Passed
Push — master ( e73618...52f31e )
by Alexander
17:03 queued 10:18
created

InRangeTest::testValidateArrayValueStrict()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 5
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 8
cc 1
rs 10
1
<?php
2
3
namespace Yiisoft\Validator\Tests\Rule;
4
5
use PHPUnit\Framework\TestCase;
6
use Yiisoft\Validator\Rule\InRange;
7
8
/**
9
 * @group validators
10
 */
11
class InRangeTest extends TestCase
12
{
13
    public function testInitException(): void
14
    {
15
        $this->expectException(\RuntimeException::class);
16
        $this->expectExceptionMessage('The "range" property must be set.');
17
        new InRange('not an array');
18
    }
19
20
    public function testValidate(): void
21
    {
22
        $val = new InRange(range(1, 10, 1));
23
        $this->assertTrue($val->validate(1)->isValid());
24
        $this->assertFalse($val->validate(0)->isValid());
25
        $this->assertFalse($val->validate(11)->isValid());
26
        $this->assertFalse($val->validate(5.5)->isValid());
27
        $this->assertTrue($val->validate(10)->isValid());
28
        $this->assertTrue($val->validate('10')->isValid());
29
        $this->assertTrue($val->validate('5')->isValid());
30
    }
31
32
    public function testValidateEmpty(): void
33
    {
34
        $rule = (new InRange(range(10, 20, 1)))->skipOnEmpty(false);
35
        $this->assertFalse($rule->validate(null)->isValid()); //row RangeValidatorTest.php:101
36
        $this->assertFalse($rule->validate('0')->isValid());
37
        $this->assertFalse($rule->validate(0)->isValid());
38
        $this->assertFalse($rule->validate('')->isValid());
39
40
        $rule = (new InRange(range(10, 20, 1)))
41
            ->skipOnEmpty(false)
42
            ->allowArray(true);
43
44
        $this->assertTrue($rule->validate([])->isValid());
45
    }
46
47
    public function testValidateArrayValue(): void
48
    {
49
        $rule = (new InRange(range(1, 10, 1)))
50
            ->allowArray(true);
51
52
        $this->assertTrue($rule->validate([1, 2, 3, 4, 5])->isValid());
53
        $this->assertTrue($rule->validate([6, 7, 8, 9, 10])->isValid());
54
        $this->assertFalse($rule->validate([0, 1, 2])->isValid());
55
        $this->assertFalse($rule->validate([10, 11, 12])->isValid());
56
        $this->assertTrue($rule->validate(['1', '2', '3', 4, 5, 6])->isValid());
57
    }
58
59
    public function testValidateStrict(): void
60
    {
61
        $rule = (new InRange(range(1, 10, 1)))
62
            ->strict();
63
64
        $this->assertTrue($rule->validate(1)->isValid());
65
        $this->assertTrue($rule->validate(5)->isValid());
66
        $this->assertTrue($rule->validate(10)->isValid());
67
        $this->assertFalse($rule->validate('1')->isValid());
68
        $this->assertFalse($rule->validate('10')->isValid());
69
        $this->assertFalse($rule->validate('5.5')->isValid());
70
    }
71
72
    public function testValidateArrayValueStrict(): void
73
    {
74
        $rule = (new InRange(range(1, 10, 1)))
75
            ->strict()
76
            ->allowArray(true);
77
78
        $this->assertFalse($rule->validate(['1', '2', '3', '4', '5', '6'])->isValid());
79
        $this->assertFalse($rule->validate(['1', '2', '3', 4, 5, 6])->isValid());
80
    }
81
82
    public function testValidateNot()
83
    {
84
        $rule = (new InRange(range(1, 10, 1)))
85
            ->not();
86
87
        $this->assertFalse($rule->validate(1)->isValid());
88
        $this->assertTrue($rule->validate(0)->isValid());
89
        $this->assertTrue($rule->validate(11)->isValid());
90
        $this->assertTrue($rule->validate(5.5)->isValid());
91
        $this->assertFalse($rule->validate(10)->isValid());
92
        $this->assertFalse($rule->validate('10')->isValid());
93
        $this->assertFalse($rule->validate('5')->isValid());
94
    }
95
96
    public function testValidateSubsetArrayable(): void
97
    {
98
        // Test in array, values are arrays. IE: ['a'] in [['a'], ['b']]
99
        $rule = (new InRange([['a'], ['b']]))
100
            ->allowArray(false);
101
102
        $this->assertTrue($rule->validate(['a'])->isValid());
103
104
        // Test in array, values are arrays. IE: ['a', 'b'] subset [['a', 'b', 'c']
105
        $rule = (new InRange(['a', 'b', 'c']))
106
            ->allowArray(true);
107
108
        $this->assertTrue($rule->validate(['a', 'b'])->isValid());
109
110
        // Test in array, values are arrays. IE: ['a', 'b'] subset [['a', 'b', 'c']
111
        $rule = (new InRange(['a', 'b', 'c']))
112
            ->allowArray(true);
113
114
        $this->assertTrue($rule->validate(new \ArrayObject(['a', 'b']))->isValid());
115
116
117
        // Test range as ArrayObject.
118
        $rule = (new InRange(new \ArrayObject(['a', 'b'])))
119
            ->allowArray(false);
120
121
        $this->assertTrue($rule->validate('a')->isValid());
122
    }
123
}
124