diff --git a/composer.json b/composer.json index 52ba9c87..cf294d9e 100644 --- a/composer.json +++ b/composer.json @@ -92,6 +92,7 @@ "autoload-dev": { "psr-4": { "ShlinkioTest\\Shlink\\CLI\\": "module/CLI/test", + "ShlinkioCliTest\\Shlink\\CLI\\": "module/CLI/test-cli", "ShlinkioTest\\Shlink\\Rest\\": "module/Rest/test", "ShlinkioApiTest\\Shlink\\Rest\\": "module/Rest/test-api", "ShlinkioTest\\Shlink\\Core\\": "module/Core/test", @@ -138,6 +139,8 @@ "test:db:ms": "DB_DRIVER=mssql composer test:db:sqlite", "test:api": "bin/test/run-api-tests.sh", "test:api:ci": "GENERATE_COVERAGE=yes composer test:api", + "test:cli": "APP_ENV=test DB_DRIVER=maria TEST_ENV=cli php vendor/bin/phpunit --order-by=random --colors=always --testdox -c phpunit-cli.xml", + "test:cli:ci": "GENERATE_COVERAGE=yes composer test:cli", "infect:ci:base": "infection --threads=4 --log-verbosity=default --only-covered --only-covering-test-cases --skip-initial-tests", "infect:ci:unit": "@infect:ci:base --coverage=build/coverage-unit --min-msi=80", "infect:ci:db": "@infect:ci:base --coverage=build/coverage-db --min-msi=95 --configuration=infection-db.json", diff --git a/config/test/bootstrap_cli_tests.php b/config/test/bootstrap_cli_tests.php new file mode 100644 index 00000000..703677d2 --- /dev/null +++ b/config/test/bootstrap_cli_tests.php @@ -0,0 +1,19 @@ +get(Helper\TestHelper::class); +$config = $container->get('config'); +$em = $container->get(EntityManager::class); + +$testHelper->createTestDb(['bin/cli', 'db:create'], ['bin/cli', 'db:migrate']); +CliTest\CliTestCase::setSeedFixturesCallback( + static fn () => $testHelper->seedFixtures($em, $config['data_fixtures'] ?? []), +); diff --git a/config/test/test_config.global.php b/config/test/test_config.global.php index 89807b26..c3151194 100644 --- a/config/test/test_config.global.php +++ b/config/test/test_config.global.php @@ -178,6 +178,7 @@ return [ 'data_fixtures' => [ 'paths' => [ + // TODO These are used for CLI tests too, so maybe should be somewhere else __DIR__ . '/../../module/Rest/test-api/Fixtures', ], ], diff --git a/module/CLI/test-cli/Command/GenerateApiKeyTest.php b/module/CLI/test-cli/Command/GenerateApiKeyTest.php new file mode 100644 index 00000000..b14462c0 --- /dev/null +++ b/module/CLI/test-cli/Command/GenerateApiKeyTest.php @@ -0,0 +1,21 @@ +exec([GenerateKeyCommand::NAME]); + + self::assertStringContainsString('[OK] Generated API key', $output); + self::assertEquals(ExitCodes::EXIT_SUCCESS, $exitCode); + } +} diff --git a/module/CLI/test-cli/Command/ListApiKeysTest.php b/module/CLI/test-cli/Command/ListApiKeysTest.php new file mode 100644 index 00000000..96b60e92 --- /dev/null +++ b/module/CLI/test-cli/Command/ListApiKeysTest.php @@ -0,0 +1,63 @@ +exec([ListKeysCommand::NAME, ...$flags]); + + self::assertEquals($expectedOutput, $output); + self::assertEquals(ExitCodes::EXIT_SUCCESS, $exitCode); + } + + public function provideFlags(): iterable + { + $expiredApiKeyDate = Chronos::now()->subDay()->startOfDay()->toAtomString(); + $enabledOnlyOutput = << [[], << [['-e'], $enabledOnlyOutput]; + yield '--enabled-only' => [['--enabled-only'], $enabledOnlyOutput]; + } +} diff --git a/module/Rest/test-api/Fixtures/ApiKeyFixture.php b/module/Rest/test-api/Fixtures/ApiKeyFixture.php index ef6d1781..54797bb4 100644 --- a/module/Rest/test-api/Fixtures/ApiKeyFixture.php +++ b/module/Rest/test-api/Fixtures/ApiKeyFixture.php @@ -25,7 +25,7 @@ class ApiKeyFixture extends AbstractFixture implements DependentFixtureInterface { $manager->persist($this->buildApiKey('valid_api_key', true)); $manager->persist($this->buildApiKey('disabled_api_key', false)); - $manager->persist($this->buildApiKey('expired_api_key', true, Chronos::now()->subDay())); + $manager->persist($this->buildApiKey('expired_api_key', true, Chronos::now()->subDay()->startOfDay())); $authorApiKey = $this->buildApiKey('author_api_key', true); $authorApiKey->registerRole(RoleDefinition::forAuthoredShortUrls()); diff --git a/phpunit-cli.xml b/phpunit-cli.xml new file mode 100644 index 00000000..49ba781e --- /dev/null +++ b/phpunit-cli.xml @@ -0,0 +1,20 @@ + + + + + ./module/*/test-cli + + + + + + ./module/CLI/src + ./module/Core/src + + +