mirror of
https://github.com/Respect/Validation.git
synced 2026-03-15 23:05:45 +01:00
Updated the whole list according to the last version found on geonames.org. The script that I executed to generate the list is: curl -L http://download.geonames.org/export/dump/countryInfo.txt | sed 's,\t,\;,g' | sort -u | cut -d ';' -f 1,15 | sed -E "/^#/d; /^[A-Z]{2}\;$/d; s,([A-Z]{2})\;(.+),'\1' => '/\2/'\,,g" After generating the list I few changes had to be made since some of the postal codes in the list were manually updated because they were not correct. This change was made because James Macon reported that "110231" was not recognized as a valid Colombian postal code. Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
135 lines
3.6 KiB
PHP
135 lines
3.6 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of Respect/Validation.
|
|
*
|
|
* (c) Alexandre Gomes Gaigalas <alexandre@gaigalas.net>
|
|
*
|
|
* For the full copyright and license information, please view the "LICENSE.md"
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Respect\Validation\Rules;
|
|
|
|
/**
|
|
* @group rule
|
|
* @covers Respect\Validation\Rules\PostalCode
|
|
* @covers Respect\Validation\Exceptions\PostalCodeException
|
|
*/
|
|
class PostalCodeTest extends \PHPUnit_Framework_TestCase
|
|
{
|
|
public function testShouldUsePatternAccordingToCountryCode()
|
|
{
|
|
$countryCode = 'BR';
|
|
|
|
$rule = new PostalCode($countryCode);
|
|
|
|
$actualPattern = $rule->regex;
|
|
$expectedPattern = $rule->postalCodes[$countryCode];
|
|
|
|
$this->assertEquals($expectedPattern, $actualPattern);
|
|
}
|
|
|
|
public function testShouldNotBeCaseSensitiveWhenChoosingPatternAccordingToCountryCode()
|
|
{
|
|
$rule1 = new PostalCode('BR');
|
|
$rule2 = new PostalCode('br');
|
|
|
|
$this->assertEquals($rule1->regex, $rule2->regex);
|
|
}
|
|
|
|
public function testShouldUseDefaultPatternWhenCountryCodeDoesNotHavePostalCode()
|
|
{
|
|
$rule = new PostalCode('ZW');
|
|
|
|
$actualPattern = $rule->regex;
|
|
$expectedPattern = PostalCode::DEFAULT_PATTERN;
|
|
|
|
$this->assertEquals($expectedPattern, $actualPattern);
|
|
}
|
|
|
|
public function testShouldValidateEmptyStringsWhenUsingDefaultPattern()
|
|
{
|
|
$rule = new PostalCode('ZW');
|
|
|
|
$this->assertTrue($rule->validate(''));
|
|
}
|
|
|
|
public function testShouldNotValidateNonEmptyStringsWhenUsingDefaultPattern()
|
|
{
|
|
$rule = new PostalCode('ZW');
|
|
|
|
$this->assertFalse($rule->validate(' '));
|
|
}
|
|
|
|
/**
|
|
* @expectedException Respect\Validation\Exceptions\ComponentException
|
|
* @expectedExceptionMessage Cannot validate postal code from "Whatever" country
|
|
*/
|
|
public function testShouldThrowsExceptionWhenCountryCodeIsNotValid()
|
|
{
|
|
new PostalCode('Whatever');
|
|
}
|
|
|
|
/**
|
|
* @dataProvider validPostalCodesProvider
|
|
*/
|
|
public function testShouldValidatePatternAccordingToTheDefinedCountryCode($countryCode, $postalCode)
|
|
{
|
|
$rule = new PostalCode($countryCode);
|
|
|
|
$this->assertTrue($rule->validate($postalCode));
|
|
}
|
|
|
|
public function validPostalCodesProvider()
|
|
{
|
|
return [
|
|
['BR', '02179-000'],
|
|
['BR', '02179000'],
|
|
['GB', 'GIR 0AA'],
|
|
['GB', 'PR1 9LY'],
|
|
['US', '02179'],
|
|
['YE', ''],
|
|
['PL', '99-300'],
|
|
['NL', '1012 GX'],
|
|
['NL', '1012GX'],
|
|
['PT', '3660-606'],
|
|
['PT', '3660606'],
|
|
['CO', '110231'],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @dataProvider invalidPostalCodesProvider
|
|
*/
|
|
public function testShouldNotValidatePatternAccordingToTheDefinedCountryCode($countryCode, $postalCode)
|
|
{
|
|
$rule = new PostalCode($countryCode);
|
|
|
|
$this->assertFalse($rule->validate($postalCode));
|
|
}
|
|
|
|
/**
|
|
* @expectedException Respect\Validation\Exceptions\PostalCodeException
|
|
* @expectedExceptionMessage "02179-000" must be a valid postal code on "US"
|
|
*/
|
|
public function testShouldThrowsPostalCodeExceptionWhenValidationFails()
|
|
{
|
|
$rule = new PostalCode('US');
|
|
$rule->check('02179-000');
|
|
}
|
|
|
|
public function invalidPostalCodesProvider()
|
|
{
|
|
return [
|
|
['BR', '02179'],
|
|
['BR', '02179.000'],
|
|
['GB', 'GIR 00A'],
|
|
['GB', 'GIR0AA'],
|
|
['GB', 'PR19LY'],
|
|
['US', '021 79'],
|
|
['YE', '02179'],
|
|
['PL', '99300'],
|
|
];
|
|
}
|
|
}
|