PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.24.0
GiveWP – Donation Plugin and Fundraising Platform v2.24.0
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 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / vendor / stellarwp / validation / tests / unit / ValidationRuleSetTest.php
give / vendor / stellarwp / validation / tests / unit Last commit date
Rules 3 years ago ValidationRuleSetTest.php 3 years ago ValidatorTest.php 3 years ago _bootstrap.php 3 years ago
ValidationRuleSetTest.php
210 lines
1 <?php
2
3 declare(strict_types=1);
4
5 namespace StellarWP\Validation\Tests\Unit\Framework\Validation;
6
7 use InvalidArgumentException;
8 use StellarWP\Validation\Rules\Required;
9 use StellarWP\Validation\Rules\Size;
10 use StellarWP\Validation\Tests\TestCase;
11 use StellarWP\Validation\ValidationRuleSet;
12 use StellarWP\Validation\ValidationRulesRegistrar;
13
14 /**
15 * @covers ValidationRuleSet
16 *
17 * @unreleased
18 */
19 class ValidationRuleSetTest extends TestCase
20 {
21 /**
22 * @unreleased
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 * @unreleased
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 * @unreleased
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 * @unreleased
57 */
58 public function testCheckingHasRule()
59 {
60 $rules = new ValidationRuleSet($this->getMockRulesRegister());
61 $rules->rules('required', 'size:5');
62
63 self::assertTrue($rules->hasRule('required'));
64 self::assertTrue($rules->hasRule('size'));
65 self::assertFalse($rules->hasRule('email'));
66 }
67
68 /**
69 * @unreleased
70 */
71 public function testGettingARule()
72 {
73 $rules = new ValidationRuleSet($this->getMockRulesRegister());
74 $rules->rules('required', 'size:5');
75
76 self::assertInstanceOf(Required::class, $rules->getRule('required'));
77 self::assertInstanceOf(Size::class, $rules->getRule('size'));
78 self::assertNull($rules->getRule('email'));
79 }
80
81 /**
82 * @unreleased
83 */
84 public function testGettingAllRules()
85 {
86 $rules = new ValidationRuleSet($this->getMockRulesRegister());
87 $rules->rules('required', 'size:5');
88
89 self::assertCount(2, $rules->getRules());
90 }
91
92 /**
93 * @unreleased
94 */
95 public function testForgettingARule()
96 {
97 $rules = new ValidationRuleSet($this->getMockRulesRegister());
98 $rules->rules('required', 'size:5');
99 $rules->removeRuleWithId('required');
100
101 self::assertCount(1, $rules);
102 self::assertFalse($rules->hasRule('required'));
103 }
104
105 /**
106 * @unreleased
107 */
108 public function testRulesCanBeSerializedToJson()
109 {
110 $rules = new ValidationRuleSet($this->getMockRulesRegister());
111 $rules->rules('required', 'size:5');
112
113 self::assertJsonStringEqualsJsonString(
114 json_encode([
115 'required' => true,
116 'size' => 5,
117 ]),
118 json_encode($rules)
119 );
120 }
121
122 /**
123 * @unreleased
124 */
125 public function testRulesAreIterable()
126 {
127 $this->assertIsIterable(new ValidationRuleSet($this->getMockRulesRegister()));
128 }
129
130 /**
131 * @unreleased
132 */
133 public function testClosuresMustHaveAtLeastTwoParameters()
134 {
135 $this->expectException(InvalidArgumentException::class);
136 $this->expectExceptionMessage('Validation rule closure must accept between 2 and 4 parameters, 1 given.');
137
138 $rules = new ValidationRuleSet($this->getMockRulesRegister());
139 $rules->rules(static function ($value) {
140 });
141 }
142
143 /**
144 * @unreleased
145 */
146 public function testClosureMustHaveAtMostFourParameters()
147 {
148 self::expectException(InvalidArgumentException::class);
149 self::expectExceptionMessage('Validation rule closure must accept between 2 and 4 parameters, 5 given.');
150
151 $rules = new ValidationRuleSet($this->getMockRulesRegister());
152 $rules->rules(static function ($value, $fail, $message, $attribute, $extra) {
153 });
154 }
155
156 /**
157 * @unreleased
158 */
159 public function testClosureSecondParameterMustBeClosure()
160 {
161 self::expectException(InvalidArgumentException::class);
162 self::expectExceptionMessage(
163 'Validation rule closure must accept a Closure as the second parameter, int given.'
164 );
165
166 $rules = new ValidationRuleSet($this->getMockRulesRegister());
167 $rules->rules(static function ($value, int $fail) {
168 });
169 }
170
171 /**
172 * @unreleased
173 */
174 public function testClosureThirdParameterMustBeString()
175 {
176 self::expectException(InvalidArgumentException::class);
177 self::expectExceptionMessage('Validation rule closure must accept a string as the third parameter, int given.');
178
179 $rules = new ValidationRuleSet($this->getMockRulesRegister());
180 $rules->rules(static function ($value, $fail, int $message) {
181 });
182 }
183
184 /**
185 * @unreleased
186 */
187 public function testClosureFourthParameterMustBeArray()
188 {
189 self::expectException(InvalidArgumentException::class);
190 self::expectExceptionMessage('Validation rule closure must accept a array as the fourth parameter, int given.');
191
192 $rules = new ValidationRuleSet($this->getMockRulesRegister());
193 $rules->rules(static function ($value, $fail, $message, int $attribute) {
194 });
195 }
196
197 /**
198 * @unreleased
199 */
200 private function getMockRulesRegister(): ValidationRulesRegistrar
201 {
202 $register = new ValidationRulesRegistrar();
203 $register->register(Required::class);
204 $register->register(Size::class);
205
206 return $register;
207 }
208 }
209
210