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

BooleanTest   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 216
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 122
dl 0
loc 216
rs 10
c 0
b 0
f 0
wmc 7

7 Methods

Rating   Name   Duplication   Size   Complexity  
B dataOptions() 0 81 1
A dataValidationPassed() 0 14 1
A getDifferentRuleInHandlerItems() 0 3 1
A dataValidationFailed() 0 82 1
A testWhen() 0 4 1
A testSkipOnError() 0 3 1
A testGetName() 0 4 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Yiisoft\Validator\Tests\Rule;
6
7
use Yiisoft\Validator\Rule\Boolean;
8
use Yiisoft\Validator\Rule\BooleanHandler;
9
use Yiisoft\Validator\Tests\Rule\Base\DifferentRuleInHandlerTestTrait;
10
use Yiisoft\Validator\Tests\Rule\Base\RuleTestCase;
11
use Yiisoft\Validator\Tests\Rule\Base\RuleWithOptionsTestTrait;
12
use Yiisoft\Validator\Tests\Rule\Base\SkipOnErrorTestTrait;
13
use Yiisoft\Validator\Tests\Rule\Base\WhenTestTrait;
14
15
final class BooleanTest extends RuleTestCase
16
{
17
    use DifferentRuleInHandlerTestTrait;
18
    use RuleWithOptionsTestTrait;
19
    use SkipOnErrorTestTrait;
20
    use WhenTestTrait;
21
22
    public function testGetName(): void
23
    {
24
        $rule = new Boolean();
25
        $this->assertSame('boolean', $rule->getName());
26
    }
27
28
    public function dataOptions(): array
29
    {
30
        return [
31
            [
32
                new Boolean(),
33
                [
34
                    'trueValue' => '1',
35
                    'falseValue' => '0',
36
                    'strict' => false,
37
                    'nonScalarMessage' => [
38
                        'template' => 'Value must be either "{true}" or "{false}".',
39
                        'parameters' => [
40
                            'true' => '1',
41
                            'false' => '0',
42
                        ],
43
                    ],
44
                    'scalarMessage' => [
45
                        'template' => 'Value must be either "{true}" or "{false}".',
46
                        'parameters' => [
47
                            'true' => '1',
48
                            'false' => '0',
49
                        ],
50
                    ],
51
                    'skipOnEmpty' => false,
52
                    'skipOnError' => false,
53
                ],
54
            ],
55
            [
56
                new Boolean(trueValue: true, falseValue: false, strict: true),
57
                [
58
                    'trueValue' => true,
59
                    'falseValue' => false,
60
                    'strict' => true,
61
                    'nonScalarMessage' => [
62
                        'template' => 'Value must be either "{true}" or "{false}".',
63
                        'parameters' => [
64
                            'true' => 'true',
65
                            'false' => 'false',
66
                        ],
67
                    ],
68
                    'scalarMessage' => [
69
                        'template' => 'Value must be either "{true}" or "{false}".',
70
                        'parameters' => [
71
                            'true' => 'true',
72
                            'false' => 'false',
73
                        ],
74
                    ],
75
                    'skipOnEmpty' => false,
76
                    'skipOnError' => false,
77
                ],
78
            ],
79
            [
80
                new Boolean(
81
                    trueValue: 'YES',
82
                    falseValue: 'NO',
83
                    strict: true,
84
                    nonScalarMessage: 'Custom message 1.',
85
                    scalarMessage: 'Custom message 2.',
86
                    skipOnEmpty: true,
87
                    skipOnError: true
88
                ),
89
                [
90
                    'trueValue' => 'YES',
91
                    'falseValue' => 'NO',
92
                    'strict' => true,
93
                    'nonScalarMessage' => [
94
                        'template' => 'Custom message 1.',
95
                        'parameters' => [
96
                            'true' => 'YES',
97
                            'false' => 'NO',
98
                        ],
99
                    ],
100
                    'scalarMessage' => [
101
                        'template' => 'Custom message 2.',
102
                        'parameters' => [
103
                            'true' => 'YES',
104
                            'false' => 'NO',
105
                        ],
106
                    ],
107
                    'skipOnEmpty' => true,
108
                    'skipOnError' => true,
109
                ],
110
            ],
111
        ];
112
    }
113
114
    public function dataValidationPassed(): array
115
    {
116
        return [
117
            [true, [new Boolean()]],
118
            [false, [new Boolean()]],
119
120
            ['0', [new Boolean()]],
121
            ['1', [new Boolean()]],
122
123
            ['0', [new Boolean(strict: true)]],
124
            ['1', [new Boolean(strict: true)]],
125
126
            [true, [new Boolean(trueValue: true, falseValue: false, strict: true)]],
127
            [false, [new Boolean(trueValue: true, falseValue: false, strict: true)]],
128
        ];
129
    }
130
131
    public function dataValidationFailed(): array
132
    {
133
        $defaultErrors = ['' => ['Value must be either "1" or "0".']];
134
        $booleanErrors = ['' => ['Value must be either "true" or "false".']];
135
136
        return [
137
            ['5', [new Boolean()], $defaultErrors],
138
139
            [null, [new Boolean()], $defaultErrors],
140
            [[], [new Boolean()], $defaultErrors],
141
142
            [true, [new Boolean(strict: true)], $defaultErrors],
143
            [false, [new Boolean(strict: true)], $defaultErrors],
144
145
            ['0', [new Boolean(trueValue: true, falseValue: false, strict: true)], $booleanErrors],
146
            [[], [new Boolean(trueValue: true, falseValue: false, strict: true)], $booleanErrors],
147
148
            'custom scalar message' => [5, [new Boolean(scalarMessage: 'Custom error.')], ['' => ['Custom error.']]],
149
            'custom scalar message with parameters' => [
150
                5,
151
                [
152
                    new Boolean(
153
                        scalarMessage: 'Attribute - {attribute}, true - {true}, false - {false}, value - {value}.',
154
                    ),
155
                ],
156
                ['' => ['Attribute - , true - 1, false - 0, value - 5.']],
157
            ],
158
            'custom scalar message with parameters, custom true and false values, strict' => [
159
                5,
160
                [
161
                    new Boolean(
162
                        trueValue: true,
163
                        falseValue: false,
164
                        strict: true,
165
                        scalarMessage: 'Attribute - {attribute}, true - {true}, false - {false}, value - {value}.',
166
                    ),
167
                ],
168
                ['' => ['Attribute - , true - true, false - false, value - 5.']],
169
            ],
170
            'custom scalar message with parameters, attribute set' => [
171
                ['data' => 5],
172
                [
173
                    'data' => new Boolean(
174
                        scalarMessage: 'Attribute - {attribute}, true - {true}, false - {false}, value - {value}.',
175
                    ),
176
                ],
177
                ['data' => ['Attribute - data, true - 1, false - 0, value - 5.']],
178
            ],
179
            'custom non-scalar message' => [
180
                [],
181
                [new Boolean(nonScalarMessage: 'Custom error.')],
182
                ['' => ['Custom error.']],
183
            ],
184
            'custom non-scalar message with parameters' => [
185
                [],
186
                [
187
                    new Boolean(
188
                        nonScalarMessage: 'Attribute - {attribute}, true - {true}, false - {false}, type - {type}.',
189
                    ),
190
                ],
191
                ['' => ['Attribute - , true - 1, false - 0, type - array.']],
192
            ],
193
            'custom non-scalar message with parameters, custom true and false values, strict' => [
194
                [],
195
                [
196
                    new Boolean(
197
                        trueValue: true,
198
                        falseValue: false,
199
                        strict: true,
200
                        nonScalarMessage: 'Attribute - {attribute}, true - {true}, false - {false}, type - {type}.',
201
                    ),
202
                ],
203
                ['' => ['Attribute - , true - true, false - false, type - array.']],
204
            ],
205
            'custom non-scalar message with parameters, attribute set' => [
206
                ['data' => []],
207
                [
208
                    'data' => new Boolean(
209
                        nonScalarMessage: 'Attribute - {attribute}, true - {true}, false - {false}, type - {type}.',
210
                    ),
211
                ],
212
                ['data' => ['Attribute - data, true - 1, false - 0, type - array.']],
213
            ],
214
        ];
215
    }
216
217
    public function testSkipOnError(): void
218
    {
219
        $this->testSkipOnErrorInternal(new Boolean(), new Boolean(skipOnError: true));
220
    }
221
222
    public function testWhen(): void
223
    {
224
        $when = static fn (mixed $value): bool => $value !== null;
225
        $this->testWhenInternal(new Boolean(), new Boolean(when: $when));
226
    }
227
228
    protected function getDifferentRuleInHandlerItems(): array
229
    {
230
        return [Boolean::class, BooleanHandler::class];
231
    }
232
}
233