Skip to content

Commit d2f2de4

Browse files
committed
How about Now?
1 parent e30c7a7 commit d2f2de4

3 files changed

Lines changed: 474 additions & 132 deletions

File tree

tests/Validator/PasswordRequirementsValidatorTest.php

Lines changed: 87 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public function empty_is_valid(): void
4646
}
4747

4848
/**
49-
* @dataProvider provideValid_value_constraintsCases
49+
* @dataProvider provideValid_value_constraintsCasesLegacy
5050
*
5151
* @test
5252
*/
@@ -59,14 +59,39 @@ public function valid_value_constraints(string $value, PasswordRequirements $con
5959
$this->assertNoViolation();
6060
}
6161

62+
/**
63+
* @return iterable<int, array{0: string, 1: PasswordRequirements}>
64+
*/
65+
public static function provideValid_value_constraintsCasesLegacy(): iterable
66+
{
67+
return [
68+
['test', new PasswordRequirements(['minLength' => 3])],
69+
['1234567', new PasswordRequirements(['requireLetters' => false])],
70+
['1234567', new PasswordRequirements(['requireLetters' => false])],
71+
['aBcDez', new PasswordRequirements(['requireCaseDiff' => true])],
72+
['abcdef', new PasswordRequirements(['requireNumbers' => false])],
73+
['123456', new PasswordRequirements(['requireLetters' => false, 'requireNumbers' => true])],
74+
['123456789', new PasswordRequirements(['requireLetters' => false, 'requireNumbers' => true])],
75+
['abcd12345', new PasswordRequirements(['requireLetters' => true, 'requireNumbers' => true])],
76+
['1234abc56789', new PasswordRequirements(['requireLetters' => true, 'requireNumbers' => true])],
77+
78+
['®', new PasswordRequirements(['minLength' => 1, 'requireLetters' => false, 'requireSpecialCharacter' => true])],
79+
['»', new PasswordRequirements(['minLength' => 1, 'requireLetters' => false, 'requireSpecialCharacter' => true])],
80+
['<>', new PasswordRequirements(['minLength' => 1, 'requireLetters' => false, 'requireSpecialCharacter' => true])],
81+
['{}', new PasswordRequirements(['minLength' => 1, 'requireLetters' => false, 'requireSpecialCharacter' => true])],
82+
];
83+
}
84+
6285
/**
6386
* @dataProvider provideViolation_value_constraintsCases
6487
*
6588
* @test
6689
*
90+
* @group legacy
91+
*
6792
* @param array<int, array{0: string, 1: PasswordRequirements, 2: array<array-key, mixed>}> $violations
6893
*/
69-
public function violation_value_constraints(string $value, PasswordRequirements $constraint, array $violations = []): void
94+
public function violation_value_constraints_legacy(string $value, PasswordRequirements $constraint, array $violations = []): void
7095
{
7196
$this->value = $value;
7297
/** @var ConstraintViolationAssertion $constraintViolationAssertion */
@@ -97,26 +122,40 @@ public function violation_value_constraints(string $value, PasswordRequirements
97122
}
98123

99124
/**
100-
* @return iterable<int, array{0: string, 1: PasswordRequirements}>
125+
* @dataProvider provideViolation_value_constraintsCases
126+
*
127+
* @test
128+
*
129+
* @param array<int, array{0: string, 1: PasswordRequirements, 2: array<array-key, mixed>}> $violations
101130
*/
102-
public static function provideValid_value_constraintsCases(): iterable
131+
public function violation_value_constraints(string $value, PasswordRequirements $constraint, array $violations = []): void
103132
{
104-
return [
105-
['test', new PasswordRequirements(['minLength' => 3])],
106-
['1234567', new PasswordRequirements(['requireLetters' => false])],
107-
['1234567', new PasswordRequirements(['requireLetters' => false])],
108-
['aBcDez', new PasswordRequirements(['requireCaseDiff' => true])],
109-
['abcdef', new PasswordRequirements(['requireNumbers' => false])],
110-
['123456', new PasswordRequirements(['requireLetters' => false, 'requireNumbers' => true])],
111-
['123456789', new PasswordRequirements(['requireLetters' => false, 'requireNumbers' => true])],
112-
['abcd12345', new PasswordRequirements(['requireLetters' => true, 'requireNumbers' => true])],
113-
['1234abc56789', new PasswordRequirements(['requireLetters' => true, 'requireNumbers' => true])],
133+
$this->value = $value;
134+
/** @var ConstraintViolationAssertion $constraintViolationAssertion */
135+
$constraintViolationAssertion = null; // Shut-up PHPStan
114136

115-
['®', new PasswordRequirements(['minLength' => 1, 'requireLetters' => false, 'requireSpecialCharacter' => true])],
116-
['»', new PasswordRequirements(['minLength' => 1, 'requireLetters' => false, 'requireSpecialCharacter' => true])],
117-
['<>', new PasswordRequirements(['minLength' => 1, 'requireLetters' => false, 'requireSpecialCharacter' => true])],
118-
['{}', new PasswordRequirements(['minLength' => 1, 'requireLetters' => false, 'requireSpecialCharacter' => true])],
119-
];
137+
$this->validator->validate($value, $constraint);
138+
139+
/**
140+
* @var array<int, mixed> $violation
141+
*/
142+
foreach ($violations as $i => $violation) {
143+
if ($i === 0) {
144+
$constraintViolationAssertion = $this->buildViolation($violation[0])
145+
->setParameters($violation[1] ?? [])
146+
->setInvalidValue($value)
147+
;
148+
} else {
149+
$constraintViolationAssertion = $constraintViolationAssertion->buildNextViolation($violation[0])
150+
->setParameters($violation[1] ?? [])
151+
->setInvalidValue($value)
152+
;
153+
}
154+
155+
if ($i == \count($violations) - 1) {
156+
$constraintViolationAssertion->assertRaised();
157+
}
158+
}
120159
}
121160

122161
/**
@@ -127,25 +166,48 @@ public static function provideViolation_value_constraintsCases(): iterable
127166
$constraint = new PasswordRequirements();
128167

129168
return [
130-
['', new PasswordRequirements(['minLength' => 2, 'requireLetters' => false]), [
169+
['', new PasswordRequirements(minLength: 2, requireLetters: false), [
131170
[$constraint->tooShortMessage, ['{{length}}' => 2]],
132171
]],
133-
['test', new PasswordRequirements(['requireLetters' => true]), [
172+
['test', new PasswordRequirements(requireLetters: true), [
134173
[$constraint->tooShortMessage, ['{{length}}' => $constraint->minLength]],
135174
]],
136-
['123456', new PasswordRequirements(['requireLetters' => true]), [
175+
['123456', new PasswordRequirements(requireLetters: true), [
137176
[$constraint->missingLettersMessage],
138177
]],
139-
['abcdez', new PasswordRequirements(['requireCaseDiff' => true]), [
178+
['abcdez', new PasswordRequirements(requireCaseDiff: true), [
140179
[$constraint->requireCaseDiffMessage],
141180
]],
142-
['!@#$%^&*()-', new PasswordRequirements(['requireLetters' => true, 'requireNumbers' => true]), [
181+
['!@#$%^&*()-', new PasswordRequirements(requireLetters: true, requireNumbers: true), [
143182
[$constraint->missingLettersMessage],
144183
[$constraint->missingNumbersMessage],
145184
]],
146-
['aerfghy', new PasswordRequirements(['requireLetters' => false, 'requireSpecialCharacter' => true]), [
185+
['aerfghy', new PasswordRequirements(requireLetters: false, requireSpecialCharacter: true), [
147186
[$constraint->missingSpecialCharacterMessage],
148187
]],
149188
];
150189
}
190+
191+
/**
192+
* @return iterable<int, array{0: string, 1: PasswordRequirements}>
193+
*/
194+
public static function provideValid_value_constraintsCases(): iterable
195+
{
196+
return [
197+
['test', new PasswordRequirements(['minLength' => 3])],
198+
['1234567', new PasswordRequirements(['requireLetters' => false])],
199+
['1234567', new PasswordRequirements(['requireLetters' => false])],
200+
['aBcDez', new PasswordRequirements(['requireCaseDiff' => true])],
201+
['abcdef', new PasswordRequirements(['requireNumbers' => false])],
202+
['123456', new PasswordRequirements(['requireLetters' => false, 'requireNumbers' => true])],
203+
['123456789', new PasswordRequirements(['requireLetters' => false, 'requireNumbers' => true])],
204+
['abcd12345', new PasswordRequirements(['requireLetters' => true, 'requireNumbers' => true])],
205+
['1234abc56789', new PasswordRequirements(['requireLetters' => true, 'requireNumbers' => true])],
206+
207+
['®', new PasswordRequirements(['minLength' => 1, 'requireLetters' => false, 'requireSpecialCharacter' => true])],
208+
['»', new PasswordRequirements(['minLength' => 1, 'requireLetters' => false, 'requireSpecialCharacter' => true])],
209+
['<>', new PasswordRequirements(['minLength' => 1, 'requireLetters' => false, 'requireSpecialCharacter' => true])],
210+
['{}', new PasswordRequirements(['minLength' => 1, 'requireLetters' => false, 'requireSpecialCharacter' => true])],
211+
];
212+
}
151213
}

0 commit comments

Comments
 (0)