Completed
Push — master ( 2fef72...ca35b8 )
by Łukasz
23:27
created

UserPasswordValidatorTest::testValidate()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 3
dl 0
loc 6
rs 10
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * @copyright Copyright (C) eZ Systems AS. All rights reserved.
5
 * @license For full copyright and license information view LICENSE file distributed with this source code.
6
 */
7
declare(strict_types=1);
8
9
namespace eZ\Publish\Core\Repository\Tests\Service\Mock;
10
11
use eZ\Publish\Core\FieldType\ValidationError;
12
use eZ\Publish\Core\Repository\Validator\UserPasswordValidator;
13
use eZ\Publish\Core\Search\Tests\TestCase;
14
15
class UserPasswordValidatorTest extends TestCase
16
{
17
    /**
18
     * @covers \eZ\Publish\Core\Repository\Validator\UserPasswordValidator::validate
19
     *
20
     * @dataProvider dateProviderForValidate
21
     */
22
    public function testValidate(array $constraints, string $password, array $expectedErrors)
23
    {
24
        $validator = new UserPasswordValidator($constraints);
25
26
        $this->assertEquals($expectedErrors, $validator->validate($password), '', 0.0, 10, true);
27
    }
28
29
    public function dateProviderForValidate(): array
30
    {
31
        return [
32
            [
33
                [
34
                    'minLength' => -1,
35
                    'requireAtLeastOneLowerCaseCharacter' => false,
36
                    'requireAtLeastOneUpperCaseCharacter' => false,
37
                    'requireAtLeastOneNumericCharacter' => false,
38
                    'requireAtLeastOneNonAlphanumericCharacter' => false,
39
                ],
40
                'pass',
41
                [/* No errors */],
42
            ],
43
            [
44
                [
45
                    'minLength' => 6,
46
                    'requireAtLeastOneLowerCaseCharacter' => false,
47
                    'requireAtLeastOneUpperCaseCharacter' => false,
48
                    'requireAtLeastOneNumericCharacter' => false,
49
                    'requireAtLeastOneNonAlphanumericCharacter' => false,
50
                ],
51
                '123',
52
                [
53
                    new ValidationError('User password must be at least %length% characters long', null, [
54
                        '%length%' => 6,
55
                    ], 'password'),
56
                ],
57
            ],
58
            [
59
                [
60
                    'minLength' => 6,
61
                    'requireAtLeastOneLowerCaseCharacter' => false,
62
                    'requireAtLeastOneUpperCaseCharacter' => false,
63
                    'requireAtLeastOneNumericCharacter' => false,
64
                    'requireAtLeastOneNonAlphanumericCharacter' => false,
65
                ],
66
                '123456!',
67
                [/* No errors */],
68
            ],
69
            [
70
                [
71
                    'minLength' => -1,
72
                    'requireAtLeastOneLowerCaseCharacter' => true,
73
                    'requireAtLeastOneUpperCaseCharacter' => false,
74
                    'requireAtLeastOneNumericCharacter' => false,
75
                    'requireAtLeastOneNonAlphanumericCharacter' => false,
76
                ],
77
                'PASS',
78
                [
79
                    new ValidationError('User password must include at least one lower case letter', null, [], 'password'),
80
                ],
81
            ],
82
            [
83
                [
84
                    'minLength' => -1,
85
                    'requireAtLeastOneLowerCaseCharacter' => true,
86
                    'requireAtLeastOneUpperCaseCharacter' => false,
87
                    'requireAtLeastOneNumericCharacter' => false,
88
                    'requireAtLeastOneNonAlphanumericCharacter' => false,
89
                ],
90
                'PaSS',
91
                [/* No errors */],
92
            ],
93
            [
94
                [
95
                    'minLength' => -1,
96
                    'requireAtLeastOneLowerCaseCharacter' => false,
97
                    'requireAtLeastOneUpperCaseCharacter' => true,
98
                    'requireAtLeastOneNumericCharacter' => false,
99
                    'requireAtLeastOneNonAlphanumericCharacter' => false,
100
                ],
101
                'pass',
102
                [
103
                    new ValidationError('User password must include at least one upper case letter', null, [], 'password'),
104
                ],
105
            ],
106
            [
107
                [
108
                    'minLength' => -1,
109
                    'requireAtLeastOneLowerCaseCharacter' => false,
110
                    'requireAtLeastOneUpperCaseCharacter' => true,
111
                    'requireAtLeastOneNumericCharacter' => false,
112
                    'requireAtLeastOneNonAlphanumericCharacter' => false,
113
                ],
114
                'pAss',
115
                [/* No errors */],
116
            ],
117
            [
118
                [
119
                    'minLength' => -1,
120
                    'requireAtLeastOneLowerCaseCharacter' => false,
121
                    'requireAtLeastOneUpperCaseCharacter' => false,
122
                    'requireAtLeastOneNumericCharacter' => true,
123
                    'requireAtLeastOneNonAlphanumericCharacter' => false,
124
                ],
125
                'pass',
126
                [
127
                    new ValidationError('User password must include at least one number', null, [], 'password'),
128
                ],
129
            ],
130
            [
131
                [
132
                    'minLength' => -1,
133
                    'requireAtLeastOneLowerCaseCharacter' => false,
134
                    'requireAtLeastOneUpperCaseCharacter' => false,
135
                    'requireAtLeastOneNumericCharacter' => true,
136
                    'requireAtLeastOneNonAlphanumericCharacter' => false,
137
                ],
138
                'pass1',
139
                [/* No errors */],
140
            ],
141
            [
142
                [
143
                    'minLength' => -1,
144
                    'requireAtLeastOneLowerCaseCharacter' => false,
145
                    'requireAtLeastOneUpperCaseCharacter' => false,
146
                    'requireAtLeastOneNumericCharacter' => false,
147
                    'requireAtLeastOneNonAlphanumericCharacter' => true,
148
                ],
149
                'pass',
150
                [
151
                    new ValidationError('User password must include at least one special character', null, [], 'password'),
152
                ],
153
            ],
154
            [
155
                [
156
                    'minLength' => -1,
157
                    'requireAtLeastOneLowerCaseCharacter' => false,
158
                    'requireAtLeastOneUpperCaseCharacter' => false,
159
                    'requireAtLeastOneNumericCharacter' => false,
160
                    'requireAtLeastOneNonAlphanumericCharacter' => true,
161
                ],
162
                'pass!',
163
                [/* No errors */],
164
            ],
165
            [
166
                [
167
                    'minLength' => 6,
168
                    'requireAtLeastOneLowerCaseCharacter' => true,
169
                    'requireAtLeastOneUpperCaseCharacter' => true,
170
                    'requireAtLeastOneNumericCharacter' => true,
171
                    'requireAtLeastOneNonAlphanumericCharacter' => true,
172
                ],
173
                'asdf',
174
                [
175
                    new ValidationError('User password must be at least %length% characters long', null, [
176
                        '%length%' => 6,
177
                    ], 'password'),
178
                    new ValidationError('User password must include at least one upper case letter', null, [], 'password'),
179
                    new ValidationError('User password must include at least one number', null, [], 'password'),
180
                    new ValidationError('User password must include at least one special character', null, [], 'password'),
181
                ],
182
            ],
183
            [
184
                [
185
                    'minLength' => 6,
186
                    'requireAtLeastOneLowerCaseCharacter' => true,
187
                    'requireAtLeastOneUpperCaseCharacter' => true,
188
                    'requireAtLeastOneNumericCharacter' => true,
189
                    'requireAtLeastOneNonAlphanumericCharacter' => true,
190
                ],
191
                'H@xxi0r!',
192
                [/* No errors */],
193
            ],
194
        ];
195
    }
196
}
197