diff --git a/src/ZipCodeValidator/Constraints/ZipCodeValidator.php b/src/ZipCodeValidator/Constraints/ZipCodeValidator.php index e4e44bf..758fb16 100644 --- a/src/ZipCodeValidator/Constraints/ZipCodeValidator.php +++ b/src/ZipCodeValidator/Constraints/ZipCodeValidator.php @@ -146,6 +146,7 @@ class ZipCodeValidator extends ConstraintValidator 'MX' => '\\d{5}', 'MY' => '\\d{5}', 'MZ' => '\\d{4}', + 'NA' => '\\d{2}0\d{2}', 'NC' => '988\\d{2}', 'NE' => '\\d{4}', 'NF' => '2899', diff --git a/tests/Constraints/NaZipCodeValidatorTest.php b/tests/Constraints/NaZipCodeValidatorTest.php new file mode 100644 index 0000000..e84fb15 --- /dev/null +++ b/tests/Constraints/NaZipCodeValidatorTest.php @@ -0,0 +1,93 @@ +validator = new ZipCodeValidator; + } + + /** + * @dataProvider naValidZipCodes + */ + public function testValidationOfNaZipCode(string $zipCode): void + { + $constraint = new ZipCode('NA'); + + /** @var ExecutionContext|MockObject $contextMock */ + $contextMock = $this->getMockBuilder(ExecutionContext::class) + ->disableOriginalConstructor() + ->getMock(); + + //be sure that buildViolation never gets called + $contextMock->expects($this->never())->method('buildViolation'); + + $contextMock->setConstraint($constraint); + $this->validator->initialize($contextMock); + + // Test some variations + $this->validator->validate($zipCode, $constraint); + } + + public static function naValidZipCodes(): array + { + return [ + ['13006'], + ['22002'], + ['19001'], + ['10033'], + ]; + } + + /** + * @dataProvider naInvalidZipCodes + */ + public function testValidationErrorWithInvalidNaZipCode(string $zipcode): void + { + $constraint = new ZipCode('NA'); + + $violationBuilderMock = $this->getMockBuilder(ConstraintViolationBuilderInterface::class) + ->disableOriginalConstructor() + ->getMock(); + $violationBuilderMock->expects($this->once())->method('setParameter')->willReturnSelf(); + + /** @var ExecutionContext|MockObject $contextMock */ + $contextMock = $this->getMockBuilder(ExecutionContext::class) + ->disableOriginalConstructor() + ->getMock(); + $contextMock->expects($this->once()) + ->method('buildViolation') + ->with($constraint->message) + ->willReturn($violationBuilderMock); + + $contextMock->setConstraint($constraint); + $this->validator->initialize($contextMock); + $this->validator->validate($zipcode, $constraint); + } + + public static function naInvalidZipCodes(): array + { + return [ + ['12345'], + ['14-20'], + ['110655'], + ['024567'], + ['PP023'], + ['AC-70'], + ]; + } + +}