diff --git a/README.md b/README.md index 5aaf688..59b369c 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ This Symfony bundle provides validators for common scalar values: - [French RNA value](/src/Validator/Constraints/FrenchRnaValidator.php) - [French SIREN value](/src/Validator/Constraints/FrenchSirenValidator.php) - [French SIRET value](/src/Validator/Constraints/FrenchSiretValidator.php) +- [Dutch KVK number](/src/Validator/Constraints/DutchKvkNumberValidator.php) See the different constraints source code for available options. diff --git a/composer.json b/composer.json index e135cad..fb8d070 100644 --- a/composer.json +++ b/composer.json @@ -40,7 +40,7 @@ "assoconnect/php-date": "^2.0", "doctrine/orm": "^3.0", "symfony/intl": "^7.0|^8.0", - "assoconnect/doctrine-types-bundle": "^v2.16", + "assoconnect/doctrine-types-bundle": "^2.18", "assoconnect/php-percent":"^1.1", "assoconnect/absolute-percent-value-bundle": "^1.5", "webmozart/assert": "^1.11", diff --git a/src/Validator/Constraints/DutchKvkNumber.php b/src/Validator/Constraints/DutchKvkNumber.php new file mode 100644 index 0000000..a993922 --- /dev/null +++ b/src/Validator/Constraints/DutchKvkNumber.php @@ -0,0 +1,14 @@ +context->buildViolation($constraint::MESSAGE) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode($constraint::WRONG_FORMAT_ERROR) + ->addViolation(); + } + } +} diff --git a/src/Validator/ConstraintsSetProvider/Field/DutchKvkNumberProvider.php b/src/Validator/ConstraintsSetProvider/Field/DutchKvkNumberProvider.php new file mode 100644 index 0000000..3ee2742 --- /dev/null +++ b/src/Validator/ConstraintsSetProvider/Field/DutchKvkNumberProvider.php @@ -0,0 +1,23 @@ + + */ +class DutchKvkNumberValidatorTest extends ConstraintValidatorTestCase +{ + protected function getConstraint(): Constraint + { + return new DutchKvkNumber(); + } + + public function createValidator(): ConstraintValidator + { + return new DutchKvkNumberValidator(); + } + + public static function providerValidValues(): iterable + { + yield 'null value' => [null]; + yield 'empty string' => ['']; + // Adyen documentation example + yield 'valid KVK number' => ['34179503']; + yield 'valid KVK number with leading zero' => ['01234567']; + yield 'valid KVK number all zeros' => ['00000000']; + } + + public static function providerInvalidValues(): iterable + { + $formatMessage = DutchKvkNumber::MESSAGE; + $formatCode = DutchKvkNumber::WRONG_FORMAT_ERROR; + + yield 'too short' => ['3417950', $formatCode, $formatMessage]; + yield 'too long' => ['341795031', $formatCode, $formatMessage]; + yield 'contains letters' => ['3417950A', $formatCode, $formatMessage]; + yield 'contains internal space' => ['3417 503', $formatCode, $formatMessage]; + yield 'contains special characters' => ['3417-503', $formatCode, $formatMessage]; + yield 'leading plus sign' => ['+4179503', $formatCode, $formatMessage]; + yield 'single digit' => ['3', $formatCode, $formatMessage]; + } +} diff --git a/tests/Validator/ConstraintsSetProvider/Field/DutchKvkNumberProviderTest.php b/tests/Validator/ConstraintsSetProvider/Field/DutchKvkNumberProviderTest.php new file mode 100644 index 0000000..81f5251 --- /dev/null +++ b/tests/Validator/ConstraintsSetProvider/Field/DutchKvkNumberProviderTest.php @@ -0,0 +1,23 @@ + 'dutchKvkNumber'], [new DutchKvkNumber()]]; + } +}