PluginProbe
GiveWP – Donation Plugin and Fundraising Platform / 4.18.0
GiveWP – Donation Plugin and Fundraising Platform v4.18.0
4.18.0 4.17.0 4.16.9 4.16.8.1 4.16.8 4.16.7.2 4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 All 257 releases
give / vendor / vendor-prefixed / stellarwp / validation / tests / unit / ValidationRuleSetTest.php

ValidationRuleSetTest.php in GiveWP – Donation Plugin and Fundraising Platform 4.18.0, at vendor/vendor-prefixed/stellarwp/validation/tests/unit/ValidationRuleSetTest.php

322 lines 9.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 declare(strict_types=1);
4
5 namespace Give\Vendors\StellarWP\Validation\Tests\Unit\Framework\Validation;
6
7 use InvalidArgumentException;
8 use Give\Vendors\StellarWP\Validation\Rules\Required;
9 use Give\Vendors\StellarWP\Validation\Rules\Size;
10 use Give\Vendors\StellarWP\Validation\Tests\TestCase;
11 use Give\Vendors\StellarWP\Validation\ValidationRuleSet;
12 use Give\Vendors\StellarWP\Validation\ValidationRulesRegistrar;
13
14 /**
15 * @covers ValidationRuleSet
16 *
17 * @since 1.1.0
18 */
19 class ValidationRuleSetTest extends TestCase
20 {
21 /**
22 * @since 1.1.0
23 */
24 public function testRulesCanBePassedAsStrings()
25 {
26 $rules = new ValidationRuleSet($this->getMockRulesRegister());
27 $rules->rules('required', 'size:5');
28
29 self::assertCount(2, $rules);
30 }
31
32 /**
33 * @since 1.1.0
34 */
35 public function testRulesCanBePassedAsInstances()
36 {
37 $rules = new ValidationRuleSet($this->getMockRulesRegister());
38 $rules->rules(new Required(), new Size(5));
39
40 self::assertCount(2, $rules);
41 }
42
43 /**
44 * @since 1.1.0
45 */
46 public function testRulesCanBePassedAsClosures()
47 {
48 $rules = new ValidationRuleSet($this->getMockRulesRegister());
49 $rules->rules(static function ($value, $fail) {
50 });
51
52 self::assertCount(1, $rules);
53 }
54
55 /**
56 * @since 1.3.0
57 */
58 public function testPrependingARule()
59 {
60 $rules = new ValidationRuleSet($this->getMockRulesRegister());
61 $rules->rules('size:5');
62 $rules->prependRule(new Required());
63
64 self::assertCount(2, $rules);
65 self::assertInstanceOf(Required::class, $rules->getRule('required'));
66 self::assertJsonStringEqualsJsonString(
67 json_encode([
68 'required' => true,
69 'size' => 5,
70 ]),
71 json_encode($rules)
72 );
73 }
74
75 /**
76 * @since 1.1.0
77 */
78 public function testCheckingHasRule()
79 {
80 $rules = new ValidationRuleSet($this->getMockRulesRegister());
81 $rules->rules('required', 'size:5');
82
83 self::assertTrue($rules->hasRule('required'));
84 self::assertTrue($rules->hasRule('size'));
85 self::assertFalse($rules->hasRule('email'));
86 }
87
88 /**
89 * @since 1.3.0
90 */
91 public function testCheckingHasAnyRules()
92 {
93 // True if it has rules
94 $rules = new ValidationRuleSet($this->getMockRulesRegister());
95 $rules->rules('required', 'size:5');
96
97 self::assertTrue($rules->hasRules());
98
99 // False if it has no rules
100 $rules = new ValidationRuleSet($this->getMockRulesRegister());
101 self::assertFalse($rules->hasRules());
102 }
103
104 /**
105 * @since 1.1.0
106 */
107 public function testGettingARule()
108 {
109 $rules = new ValidationRuleSet($this->getMockRulesRegister());
110 $rules->rules('required', 'size:5');
111
112 self::assertInstanceOf(Required::class, $rules->getRule('required'));
113 self::assertInstanceOf(Size::class, $rules->getRule('size'));
114 self::assertNull($rules->getRule('email'));
115 }
116
117 /**
118 * @since 1.1.0
119 */
120 public function testGettingAllRules()
121 {
122 $rules = new ValidationRuleSet($this->getMockRulesRegister());
123 $rules->rules('required', 'size:5');
124
125 self::assertCount(2, $rules->getRules());
126 }
127
128 /**
129 * @since 1.1.0
130 */
131 public function testForgettingARule()
132 {
133 $rules = new ValidationRuleSet($this->getMockRulesRegister());
134 $rules->rules('required', 'size:5');
135 $rules->removeRuleWithId('required');
136
137 self::assertCount(1, $rules);
138 self::assertFalse($rules->hasRule('required'));
139 }
140
141 /**
142 * @since 1.3.0
143 */
144 public function testReplacingARule()
145 {
146 // Replace if rule exists
147 $rules = new ValidationRuleSet($this->getMockRulesRegister());
148 $rules->rules('required', 'size:5');
149
150 self::assertTrue($rules->replaceRule('size', new Size(10)));
151 self::assertCount(2, $rules);
152 self::assertTrue($rules->hasRule('required'));
153 self::assertTrue($rules->hasRule('size'));
154 self::assertEquals(10, $rules->getRule('size')->getSize());
155
156 // Do not replace if rule does not exist
157 $rules = new ValidationRuleSet($this->getMockRulesRegister());
158 $rules->rules('required');
159
160 self::assertFalse($rules->replaceRule('size', new Size(10)));
161 self::assertCount(1, $rules);
162 }
163
164 /**
165 * @since 1.3.0
166 */
167 public function testConditionallyReplacingOrAppendingARule()
168 {
169 // Replace if rule exists
170 $rules = new ValidationRuleSet($this->getMockRulesRegister());
171 $rules->rules('required', 'size:5');
172
173
174 self::assertTrue($rules->replaceOrAppendRule('size', new Size(10)));
175 self::assertCount(2, $rules);
176 self::assertTrue($rules->hasRule('required'));
177 self::assertTrue($rules->hasRule('size'));
178 self::assertEquals(10, $rules->getRule('size')->getSize());
179
180 // Append if rule does not exist
181 $rules = new ValidationRuleSet($this->getMockRulesRegister());
182 $rules->rules('required');
183
184 self::assertFalse($rules->replaceOrAppendRule('size', new Size(10)));
185 self::assertCount(2, $rules);
186 self::assertTrue($rules->hasRule('required'));
187 self::assertTrue($rules->hasRule('size'));
188 self::assertEquals(10, $rules->getRule('size')->getSize());
189 }
190
191 /**
192 * @since 1.3.0
193 */
194 public function testConditionallyReplacingOrPrependingRules()
195 {
196 // Replace if rule exists
197 $rules = new ValidationRuleSet($this->getMockRulesRegister());
198 $rules->rules('required', 'size:5');
199
200 self::AssertTrue($rules->replaceOrPrependRule('size', new Size(10)));
201 self::assertCount(2, $rules);
202 self::assertTrue($rules->hasRule('required'));
203 self::assertTrue($rules->hasRule('size'));
204 self::assertEquals(10, $rules->getRule('size')->getSize());
205
206 // Prepend if rule does not exist
207 $rules = new ValidationRuleSet($this->getMockRulesRegister());
208 $rules->rules('required');
209
210 self::assertFalse($rules->replaceOrPrependRule('size', new Size(10)));
211 self::assertCount(2, $rules);
212 self::assertTrue($rules->hasRule('required'));
213 self::assertTrue($rules->hasRule('size'));
214 self::assertEquals(10, $rules->getRule('size')->getSize());
215 }
216
217 /**
218 * @since 1.1.0
219 */
220 public function testRulesCanBeSerializedToJson()
221 {
222 $rules = new ValidationRuleSet($this->getMockRulesRegister());
223 $rules->rules('required', 'size:5');
224
225 self::assertJsonStringEqualsJsonString(
226 json_encode([
227 'required' => true,
228 'size' => 5,
229 ]),
230 json_encode($rules)
231 );
232 }
233
234 /**
235 * @since 1.1.0
236 */
237 public function testRulesAreIterable()
238 {
239 $this->assertIsIterable(new ValidationRuleSet($this->getMockRulesRegister()));
240 }
241
242 /**
243 * @since 1.1.0
244 */
245 public function testClosuresMustHaveAtLeastTwoParameters()
246 {
247 $this->expectException(InvalidArgumentException::class);
248 $this->expectExceptionMessage('Validation rule closure must accept between 2 and 4 parameters, 1 given.');
249
250 $rules = new ValidationRuleSet($this->getMockRulesRegister());
251 $rules->rules(static function ($value) {
252 });
253 }
254
255 /**
256 * @since 1.1.0
257 */
258 public function testClosureMustHaveAtMostFourParameters()
259 {
260 self::expectException(InvalidArgumentException::class);
261 self::expectExceptionMessage('Validation rule closure must accept between 2 and 4 parameters, 5 given.');
262
263 $rules = new ValidationRuleSet($this->getMockRulesRegister());
264 $rules->rules(static function ($value, $fail, $message, $attribute, $extra) {
265 });
266 }
267
268 /**
269 * @since 1.1.0
270 */
271 public function testClosureSecondParameterMustBeClosure()
272 {
273 self::expectException(InvalidArgumentException::class);
274 self::expectExceptionMessage(
275 'Validation rule closure must accept a Closure as the second parameter, int given.'
276 );
277
278 $rules = new ValidationRuleSet($this->getMockRulesRegister());
279 $rules->rules(static function ($value, int $fail) {
280 });
281 }
282
283 /**
284 * @since 1.1.0
285 */
286 public function testClosureThirdParameterMustBeString()
287 {
288 self::expectException(InvalidArgumentException::class);
289 self::expectExceptionMessage('Validation rule closure must accept a string as the third parameter, int given.');
290
291 $rules = new ValidationRuleSet($this->getMockRulesRegister());
292 $rules->rules(static function ($value, $fail, int $message) {
293 });
294 }
295
296 /**
297 * @since 1.1.0
298 */
299 public function testClosureFourthParameterMustBeArray()
300 {
301 self::expectException(InvalidArgumentException::class);
302 self::expectExceptionMessage('Validation rule closure must accept a array as the fourth parameter, int given.');
303
304 $rules = new ValidationRuleSet($this->getMockRulesRegister());
305 $rules->rules(static function ($value, $fail, $message, int $attribute) {
306 });
307 }
308
309 /**
310 * @since 1.1.0
311 */
312 private function getMockRulesRegister(): ValidationRulesRegistrar
313 {
314 $register = new ValidationRulesRegistrar();
315 $register->register(Required::class);
316 $register->register(Size::class);
317
318 return $register;
319 }
320 }
321
322