diff --git a/CHANGELOG.md b/CHANGELOG.md index b48481a..0791789 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ * Add `database.extra_databases` * Add `php.phpstan.baseline` as an optional boolean. * Add `node.version` as a string. +* Add a test to ensure extra databases is an optional array of non-blank strings. * Add a test to ensure the project type is a valid type. * Add a test to ensure the web server is a valid type. * Add a `test` task to `run` script. diff --git a/src/DataTransferObject/Config.php b/src/DataTransferObject/Config.php index 3d562d0..f47b05f 100644 --- a/src/DataTransferObject/Config.php +++ b/src/DataTransferObject/Config.php @@ -16,6 +16,7 @@ final class Config 'extra_databases' => new Assert\Optional([ new Assert\Type('array'), new Assert\All([ + new Assert\NotBlank(), new Assert\Type('string'), ]), ]), diff --git a/tests/Kernel/Validator/ConfigurationValidatorTest.php b/tests/Kernel/Validator/ConfigurationValidatorTest.php index 8c8ab01..c4be1be 100644 --- a/tests/Kernel/Validator/ConfigurationValidatorTest.php +++ b/tests/Kernel/Validator/ConfigurationValidatorTest.php @@ -12,15 +12,54 @@ use Symfony\Component\Validator\Validator\ValidatorInterface; class ConfigurationValidatorTest extends KernelTestCase { + private Config $configurationDataDTO; + private ValidatorInterface $validator; public function setUp(): void { + $this->configurationDataDTO = self::createConfigurationDTO(); + $this->validator = Validation::createValidatorBuilder() ->enableAnnotationMapping() ->getValidator(); } + /** + * @dataProvider extraDatabaseProvider + */ + public function testThatExtraDatabasesCanBeSpecified( + ?array $extraDatabases, + int $expectedViolationCount, + ?string $expectedMessage, + ): void + { + $this->configurationDataDTO->database = [ + 'extra_databases' => $extraDatabases, + 'type' => 'mariadb', + 'version' => 10, + ]; + + $violations = $this->validator->validate($this->configurationDataDTO); + + self::assertCount( + expectedCount: $expectedViolationCount, + haystack: $violations, + ); + + if ($expectedViolationCount > 0) { + self::assertSame( + actual: 'database[extra_databases][0]', + expected: $violations[0]->getPropertyPath(), + ); + + self::assertSame( + actual: $expectedMessage, + expected: $violations[0]->getMessage(), + ); + } + } + /** * @dataProvider projectNameProvider */ @@ -118,6 +157,16 @@ class ConfigurationValidatorTest extends KernelTestCase } } + public function extraDatabaseProvider(): \Generator + { + return [ + yield 'correct' => [['migrate'], 0, null], + yield 'empty string' => [[''], 1, 'This value should not be blank.'], + yield 'missing' => [null, 0, null], + yield 'no extra databases' => [[], 0, null], + ]; + } + public function projectLanguageProvider(): \Generator { return [