Passed
Push — master ( dbf0a8...b29633 )
by
unknown
02:35
created

InTest::testWhen()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 0
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Yiisoft\Validator\Tests\Rule;
6
7
use ArrayObject;
8
use Yiisoft\Validator\Rule\In;
9
use Yiisoft\Validator\Rule\InHandler;
10
use Yiisoft\Validator\Tests\Rule\Base\DifferentRuleInHandlerTestTrait;
11
use Yiisoft\Validator\Tests\Rule\Base\RuleTestCase;
12
use Yiisoft\Validator\Tests\Rule\Base\RuleWithOptionsTestTrait;
13
use Yiisoft\Validator\Tests\Rule\Base\SkipOnErrorTestTrait;
14
use Yiisoft\Validator\Tests\Rule\Base\WhenTestTrait;
15
16
final class InTest extends RuleTestCase
17
{
18
    use DifferentRuleInHandlerTestTrait;
19
    use RuleWithOptionsTestTrait;
20
    use SkipOnErrorTestTrait;
21
    use WhenTestTrait;
22
23
    public function testGetName(): void
24
    {
25
        $rule = new In(range(1, 10));
26
        $this->assertSame('inRange', $rule->getName());
27
    }
28
29
    public function dataOptions(): array
30
    {
31
        return [
32
            [
33
                new In(range(1, 10)),
34
                [
35
                    'values' => range(1, 10),
36
                    'strict' => false,
37
                    'not' => false,
38
                    'message' => [
39
                        'template' => 'This value is invalid.',
40
                        'parameters' => [],
41
                    ],
42
                    'skipOnEmpty' => false,
43
                    'skipOnError' => false,
44
                ],
45
            ],
46
            [
47
                new In(range(1, 2), strict: true),
48
                [
49
                    'values' => [1, 2],
50
                    'strict' => true,
51
                    'not' => false,
52
                    'message' => [
53
                        'template' => 'This value is invalid.',
54
                        'parameters' => [],
55
                    ],
56
                    'skipOnEmpty' => false,
57
                    'skipOnError' => false,
58
                ],
59
            ],
60
            [
61
                new In(range(1, 2), not: true),
62
                [
63
                    'values' => [1, 2],
64
                    'strict' => false,
65
                    'not' => true,
66
                    'message' => [
67
                        'template' => 'This value is invalid.',
68
                        'parameters' => [],
69
                    ],
70
                    'skipOnEmpty' => false,
71
                    'skipOnError' => false,
72
                ],
73
            ],
74
        ];
75
    }
76
77
    public function dataValidationPassed(): array
78
    {
79
        return [
80
            [1, [new In(range(1, 10))]],
81
            [10, [new In(range(1, 10))]],
82
            ['10', [new In(range(1, 10))]],
83
            ['5', [new In(range(1, 10))]],
84
85
            [['a'], [new In([['a'], ['b']])]],
86
            ['a', [new In(new ArrayObject(['a', 'b']))]],
87
88
            [1, [new In(range(1, 10), strict: true)]],
89
            [5, [new In(range(1, 10), strict: true)]],
90
            [10, [new In(range(1, 10), strict: true)]],
91
92
            [0, [new In(range(1, 10), not: true)]],
93
            [11, [new In(range(1, 10), not: true)]],
94
            [5.5, [new In(range(1, 10), not: true)]],
95
        ];
96
    }
97
98
    public function dataValidationFailed(): array
99
    {
100
        $errors = ['' => ['This value is invalid.']];
101
102
        return [
103
            [0, [new In(range(1, 10))], $errors],
104
            [11, [new In(range(1, 10))], $errors],
105
            [5.5, [new In(range(1, 10))], $errors],
106
107
            [null, [new In(range(1, 10))], $errors],
108
            ['0', [new In(range(1, 10))], $errors],
109
            [0, [new In(range(1, 10))], $errors],
110
            ['', [new In(range(1, 10))], $errors],
111
112
            ['1', [new In(range(1, 10), strict: true)], $errors],
113
            ['10', [new In(range(1, 10), strict: true)], $errors],
114
            ['5.5', [new In(range(1, 10), strict: true)], $errors],
115
            [['1', '2', '3', '4', '5', '6'], [new In(range(1, 10), strict: true)], $errors],
116
            [['1', '2', '3', 4, 5, 6], [new In(range(1, 10), strict: true)], $errors],
117
118
            [1, [new In(range(1, 10), not: true)], $errors],
119
            [10, [new In(range(1, 10), not: true)], $errors],
120
            ['10', [new In(range(1, 10), not: true)], $errors],
121
            ['5', [new In(range(1, 10), not: true)], $errors],
122
123
            'custom error' => [15, [new In(range(1, 10), message: 'Custom error')], ['' => ['Custom error']]],
124
        ];
125
    }
126
127
    public function testSkipOnError(): void
128
    {
129
        $this->testSkipOnErrorInternal(new In(range(1, 10)), new In(range(1, 10), skipOnError: true));
130
    }
131
132
    public function testWhen(): void
133
    {
134
        $when = static fn (mixed $value): bool => $value !== null;
135
        $this->testWhenInternal(new In(range(1, 10)), new In(range(1, 10), when: $when));
136
    }
137
138
    protected function getDifferentRuleInHandlerItems(): array
139
    {
140
        return [In::class, InHandler::class];
141
    }
142
}
143