forked from Respect/Validation
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCountryCodeTest.php
More file actions
86 lines (77 loc) · 2.87 KB
/
Copy pathCountryCodeTest.php
File metadata and controls
86 lines (77 loc) · 2.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<?php
/*
* SPDX-License-Identifier: MIT
* SPDX-FileCopyrightText: (c) Respect Project Contributors
* SPDX-FileContributor: Alexandre Gomes Gaigalas <alganet@gmail.com>
* SPDX-FileContributor: Felipe Martins <me@fefas.net>
* SPDX-FileContributor: Gabriel Caruso <carusogabriel34@gmail.com>
* SPDX-FileContributor: Henrique Moody <henriquemoody@gmail.com>
* SPDX-FileContributor: William Espindola <oi@williamespindola.com.br>
*/
declare(strict_types=1);
namespace Respect\Validation\Validators;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Group;
use PHPUnit\Framework\Attributes\Test;
use Respect\Config\Container;
use Respect\Validation\ContainerRegistry;
use Respect\Validation\Exceptions\InvalidValidatorException;
use Respect\Validation\Exceptions\MissingComposerDependencyException;
use Respect\Validation\Test\RuleTestCase;
#[Group('validator')]
#[CoversClass(CountryCode::class)]
final class CountryCodeTest extends RuleTestCase
{
#[Test]
public function itShouldThrowsExceptionWhenInvalidFormat(): void
{
$this->expectException(InvalidValidatorException::class);
$this->expectExceptionMessage(
'"whatever" is not a valid set for ISO 3166-1 (Available: "alpha-2", "alpha-3", and "numeric")',
);
// @phpstan-ignore-next-line
new CountryCode('whatever');
}
#[Test]
public function shouldThrowWhenMissingComponent(): void
{
ContainerRegistry::setContainer(new Container());
try {
new CountryCode('alpha-3');
$this->fail('Expected MissingComposerDependencyException was not thrown.');
} catch (MissingComposerDependencyException $e) {
$this->assertStringContainsString(
'CountryCode rule requires PHP ISO Codes',
$e->getMessage(),
);
} finally {
ContainerRegistry::resetContainer();
}
}
/** @return iterable<array{CountryCode, mixed}> */
public static function providerForValidInput(): iterable
{
return [
[new CountryCode('alpha-2'), 'BR'],
[new CountryCode('alpha-3'), 'BRA'],
[new CountryCode('numeric'), '076'],
[new CountryCode('alpha-2'), 'DE'],
[new CountryCode('alpha-3'), 'DEU'],
[new CountryCode('numeric'), '276'],
[new CountryCode('alpha-2'), 'US'],
[new CountryCode('alpha-3'), 'USA'],
[new CountryCode('numeric'), '840'],
];
}
/** @return iterable<array{CountryCode, mixed}> */
public static function providerForInvalidInput(): iterable
{
return [
[new CountryCode(), []],
[new CountryCode(), 'ca'],
[new CountryCode('alpha-2'), 'USA'],
[new CountryCode('alpha-3'), 'US'],
[new CountryCode('numeric'), '000'],
];
}
}