respect-validation/tests/unit/Rules/SubdivisionCodeTest.php
Henrique Moody 688fbde552
Make PHPUnit tests final
Whenever is possible it is better to declare our classes as final. The
PHPUnit tests should not be extended, therefore there is no reason for
them to not be final.

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2019-02-09 14:32:12 +01:00

123 lines
3.1 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.
*/
declare(strict_types=1);
namespace Respect\Validation\Rules;
use Respect\Validation\Test\TestCase;
/**
* @covers \Respect\Validation\Exceptions\SubdivisionCodeException
* @covers \Respect\Validation\Rules\SubdivisionCode
*
* @author Gabriel Caruso <carusogabriel34@gmail.com>
* @author Henrique Moody <henriquemoody@gmail.com>
*/
final class SubdivisionCodeTest extends TestCase
{
/**
* @expectedException \Respect\Validation\Exceptions\ComponentException
* @expectedExceptionMessage "whatever" is not a supported country code
*
* @test
*/
public function shouldThrowsExceptionWhenInvalidFormat(): void
{
new SubdivisionCode('whatever');
}
/**
* @expectedException \Respect\Validation\Exceptions\ComponentException
* @expectedExceptionMessage "JK" is not a supported country code
*
* @test
*/
public function shouldNotAcceptWrongNamesOnConstructor(): void
{
new SubdivisionCode('JK');
}
/**
* @test
*/
public function shouldDefineSubdivisionCodeFormatOnConstructor(): void
{
$countryCode = 'US';
$countrySubdivision = new SubdivisionCode($countryCode);
self::assertAttributeEquals($countryCode, 'countryCode', $countrySubdivision);
}
/**
* @return mixed[][]
*/
public function providerForValidSubdivisionCodeInformation(): array
{
return [
['AQ', null],
['BR', 'SP'],
['MV', '00'],
['US', 'CA'],
['YT', ''],
];
}
/**
* @dataProvider providerForValidSubdivisionCodeInformation
*
* @test
*/
public function shouldValidateValidSubdivisionCodeInformation(string $countryCode, ?string $input): void
{
$countrySubdivision = new SubdivisionCode($countryCode);
self::assertTrue($countrySubdivision->validate($input));
}
/**
* @return mixed[][]
*/
public function providerForInvalidSubdivisionCodeInformation(): array
{
return [
['BR', 'CA'],
['MV', 0],
['US', 'CE'],
];
}
/**
* @dataProvider providerForInvalidSubdivisionCodeInformation
*
* @test
*
* @param mixed $input
*/
public function shouldNotValidateInvalidSubdivisionCodeInformation(string $countryCode, $input): void
{
$countrySubdivision = new SubdivisionCode($countryCode);
self::assertFalse($countrySubdivision->validate($input));
}
/**
* @expectedException \Respect\Validation\Exceptions\Locale\BrSubdivisionCodeException
* @expectedExceptionMessage "CA" must be a subdivision code of Brazil
*
* @test
*/
public function shouldThrowsSubdivisionCodeException(): void
{
$countrySubdivision = new SubdivisionCode('BR');
$countrySubdivision->assert('CA');
}
}