We could not synchronize checks via GitHub's checks API since Scrutinizer's GitHub App is not installed for this repository.
1 | <?php |
||||
2 | |||||
3 | namespace Backpack\CRUD\Tests\Unit\CrudPanel; |
||||
4 | |||||
5 | use Backpack\CRUD\app\Library\Validation\Rules\ValidUpload; |
||||
6 | use Backpack\CRUD\app\Library\Validation\Rules\ValidUploadMultiple; |
||||
7 | use Backpack\CRUD\Tests\config\Http\Requests\UserRequest; |
||||
8 | use Backpack\CRUD\Tests\config\Models\User; |
||||
9 | use Illuminate\Http\UploadedFile; |
||||
10 | |||||
11 | /** |
||||
12 | * @covers Backpack\CRUD\app\Library\CrudPanel\Traits\Validation |
||||
13 | * @covers Backpack\CRUD\app\Library\CrudPanel\Traits\Read |
||||
14 | * @covers Backpack\CRUD\app\Library\Validation\Rules\BackpackCustomRule |
||||
15 | * @covers Backpack\CRUD\app\Library\Validation\Rules\ValidUpload |
||||
16 | * @covers Backpack\CRUD\app\Library\Validation\Rules\ValidUploadMultiple |
||||
17 | * @covers Backpack\CRUD\app\Library\Validation\Rules\Support\HasFiles |
||||
18 | */ |
||||
19 | class CrudPanelValidationTest extends \Backpack\CRUD\Tests\config\CrudPanel\BaseCrudPanel |
||||
20 | { |
||||
21 | public function testItThrowsValidationExceptions() |
||||
22 | { |
||||
23 | $this->crudPanel->setModel(User::class); |
||||
24 | $this->crudPanel->setValidation(UserRequest::class); |
||||
25 | |||||
26 | $request = request()->create('users/', 'POST', [ |
||||
27 | 'email' => '[email protected]', |
||||
28 | 'password' => 'test', |
||||
29 | ]); |
||||
30 | |||||
31 | $this->crudPanel->setRequest($request); |
||||
32 | $this->expectException(\Illuminate\Validation\ValidationException::class); |
||||
33 | $validatedRequest = $this->crudPanel->validateRequest(); |
||||
0 ignored issues
–
show
Unused Code
introduced
by
![]() |
|||||
34 | } |
||||
35 | |||||
36 | public function testItMergesFieldValidationWithRequestValidation() |
||||
37 | { |
||||
38 | $this->crudPanel->setModel(User::class); |
||||
39 | $this->crudPanel->setValidation(UserRequest::class); |
||||
40 | |||||
41 | $request = request()->create('users/', 'POST', [ |
||||
42 | 'name' => 'test name', |
||||
43 | 'email' => '[email protected]', |
||||
44 | 'password' => 'test', |
||||
45 | ]); |
||||
46 | |||||
47 | $request->setRouteResolver(function () use ($request) { |
||||
48 | return (new Route('POST', 'users', ['Backpack\CRUD\Tests\Config\Http\Controllers\UserCrudController', 'create']))->bind($request); |
||||
0 ignored issues
–
show
|
|||||
49 | }); |
||||
50 | |||||
51 | $this->crudPanel->addFields([ |
||||
52 | [ |
||||
53 | 'name' => 'email', |
||||
54 | 'validationRules' => 'required', |
||||
55 | ], |
||||
56 | [ |
||||
57 | 'name' => 'name', |
||||
58 | ], |
||||
59 | [ |
||||
60 | 'name' => 'password', |
||||
61 | ], |
||||
62 | ]); |
||||
63 | |||||
64 | $this->crudPanel->setRequest($request); |
||||
65 | |||||
66 | $this->crudPanel->validateRequest(); |
||||
67 | |||||
68 | $this->assertEquals(['email'], array_keys($this->crudPanel->getOperationSetting('validationRules'))); |
||||
0 ignored issues
–
show
It seems like
$this->crudPanel->getOpe...ting('validationRules') can also be of type null ; however, parameter $array of array_keys() does only seem to accept array , maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||
69 | } |
||||
70 | |||||
71 | public function testItCanGetTheValidationAttributesFromFields() |
||||
72 | { |
||||
73 | $this->crudPanel->addField([ |
||||
74 | 'name' => 'email', |
||||
75 | 'validationAttribute' => 'emailed', |
||||
76 | ]); |
||||
77 | |||||
78 | $this->crudPanel->setValidation(); |
||||
79 | |||||
80 | $this->assertEquals(['email' => 'emailed'], $this->crudPanel->getOperationSetting('validationAttributes')); |
||||
81 | } |
||||
82 | |||||
83 | public function testItCanGetTheValidationAttributesFromSubfields() |
||||
84 | { |
||||
85 | $this->crudPanel->addField([ |
||||
86 | 'name' => 'email', |
||||
87 | 'subfields' => [ |
||||
88 | [ |
||||
89 | 'name' => 'test', |
||||
90 | 'validationAttribute' => 'emailed', |
||||
91 | ], |
||||
92 | ], |
||||
93 | ]); |
||||
94 | |||||
95 | $this->crudPanel->setValidation(); |
||||
96 | |||||
97 | $this->assertEquals(['email.*.test' => 'emailed'], $this->crudPanel->getOperationSetting('validationAttributes')); |
||||
98 | } |
||||
99 | |||||
100 | public function testItMergesAllKindsOfValidation() |
||||
101 | { |
||||
102 | $this->crudPanel->setModel(User::class); |
||||
103 | |||||
104 | $this->crudPanel->setOperation('create'); |
||||
105 | $this->crudPanel->setValidation([ |
||||
106 | 'password' => 'required', |
||||
107 | ]); |
||||
108 | $this->crudPanel->setValidation(UserRequest::class); |
||||
109 | |||||
110 | $request = request()->create('users/', 'POST', [ |
||||
111 | 'name' => '', |
||||
112 | 'password' => '', |
||||
113 | 'email' => '', |
||||
114 | ]); |
||||
115 | |||||
116 | $request->setRouteResolver(function () use ($request) { |
||||
117 | return (new Route('POST', 'users', ['Backpack\CRUD\Tests\Config\Http\Controllers\UserCrudController', 'create']))->bind($request); |
||||
118 | }); |
||||
119 | |||||
120 | $this->crudPanel->addFields([ |
||||
121 | [ |
||||
122 | 'name' => 'email', |
||||
123 | 'validationRules' => 'required', |
||||
124 | ], |
||||
125 | [ |
||||
126 | 'name' => 'name', |
||||
127 | ], |
||||
128 | [ |
||||
129 | 'name' => 'password', |
||||
130 | ], |
||||
131 | ]); |
||||
132 | |||||
133 | $this->crudPanel->setRequest($request); |
||||
134 | |||||
135 | $this->expectException(\Illuminate\Validation\ValidationException::class); |
||||
136 | |||||
137 | try { |
||||
138 | $this->crudPanel->validateRequest(); |
||||
139 | } catch (\Illuminate\Validation\ValidationException $e) { |
||||
140 | $this->assertEquals(['password', 'email', 'name'], array_keys($e->errors())); |
||||
141 | throw $e; |
||||
142 | } |
||||
143 | } |
||||
144 | |||||
145 | public function testItCanGetTheValidationFromFields() |
||||
146 | { |
||||
147 | $this->crudPanel->setModel(User::class); |
||||
148 | $this->crudPanel->setOperation('create'); |
||||
149 | |||||
150 | $request = request()->create('users/', 'POST', [ |
||||
151 | 'name' => 'test name', |
||||
152 | 'email' => '[email protected]', |
||||
153 | 'password' => 'test', |
||||
154 | ]); |
||||
155 | |||||
156 | $request->setRouteResolver(function () use ($request) { |
||||
157 | return (new Route('POST', 'users', ['Backpack\CRUD\Tests\Config\Http\Controllers\UserCrudController', 'create']))->bind($request); |
||||
158 | }); |
||||
159 | |||||
160 | $this->crudPanel->addField([ |
||||
161 | 'name' => 'email', |
||||
162 | 'validationRules' => 'required', |
||||
163 | ]); |
||||
164 | |||||
165 | $this->crudPanel->addField([ |
||||
166 | 'name' => 'name', |
||||
167 | 'validationRules' => 'required', |
||||
168 | 'validationMessages' => [ |
||||
169 | 'required' => 'required ma friend', |
||||
170 | ], |
||||
171 | ]); |
||||
172 | |||||
173 | $this->crudPanel->addField([ |
||||
174 | 'name' => 'password', |
||||
175 | 'subfields' => [ |
||||
176 | [ |
||||
177 | 'name' => 'test', |
||||
178 | 'validationRules' => 'required', |
||||
179 | 'validationMessages' => [ |
||||
180 | 'required' => 'required ma friend', |
||||
181 | ], |
||||
182 | ], |
||||
183 | ], |
||||
184 | ]); |
||||
185 | |||||
186 | $this->crudPanel->setRequest($request); |
||||
187 | |||||
188 | $this->crudPanel->setValidation(); |
||||
189 | |||||
190 | $validatedRequest = $this->crudPanel->validateRequest(); |
||||
0 ignored issues
–
show
|
|||||
191 | |||||
192 | $this->assertEquals(['email', 'name', 'password.*.test'], array_keys($this->crudPanel->getOperationSetting('validationRules'))); |
||||
0 ignored issues
–
show
It seems like
$this->crudPanel->getOpe...ting('validationRules') can also be of type null ; however, parameter $array of array_keys() does only seem to accept array , maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||
193 | } |
||||
194 | |||||
195 | public function testItThrowsExceptionWithInvalidValidationClass() |
||||
196 | { |
||||
197 | $this->crudPanel->setModel(User::class); |
||||
198 | $this->crudPanel->setOperation('create'); |
||||
199 | |||||
200 | try { |
||||
201 | $this->crudPanel->setValidation('\Backpack\CRUD\Tests\config\Models\User'); |
||||
202 | } catch (\Throwable $e) { |
||||
0 ignored issues
–
show
Coding Style
Comprehensibility
introduced
by
|
|||||
203 | } |
||||
204 | $this->assertEquals( |
||||
205 | new \Symfony\Component\HttpKernel\Exception\HttpException(500, 'Please pass setValidation() nothing, a rules array or a FormRequest class.', null, ['developer-error-exception']), |
||||
206 | $e |
||||
0 ignored issues
–
show
Comprehensibility
Best Practice
introduced
by
|
|||||
207 | ); |
||||
208 | } |
||||
209 | |||||
210 | public function testItCanDisableTheValidation() |
||||
211 | { |
||||
212 | $this->crudPanel->setModel(User::class); |
||||
213 | $this->crudPanel->setOperation('create'); |
||||
214 | $this->crudPanel->setValidation([ |
||||
215 | 'name' => 'required', |
||||
216 | 'password' => 'required', |
||||
217 | ]); |
||||
218 | $this->crudPanel->setValidation(UserRequest::class); |
||||
219 | $this->assertEquals(['name', 'password'], array_keys($this->crudPanel->getOperationSetting('validationRules'))); |
||||
0 ignored issues
–
show
It seems like
$this->crudPanel->getOpe...ting('validationRules') can also be of type null ; however, parameter $array of array_keys() does only seem to accept array , maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||
220 | |||||
221 | $this->crudPanel->disableValidation(); |
||||
222 | $this->assertEquals([], $this->crudPanel->getOperationSetting('validationRules')); |
||||
223 | $this->assertEquals([], $this->crudPanel->getOperationSetting('validationMessages')); |
||||
224 | $this->assertEquals([], $this->crudPanel->getOperationSetting('requiredFields')); |
||||
225 | $this->assertEquals(false, $this->crudPanel->getFormRequest()); |
||||
226 | } |
||||
227 | |||||
228 | public function testItCanGetTheRequiredFields() |
||||
229 | { |
||||
230 | $this->crudPanel->setModel(User::class); |
||||
231 | $this->crudPanel->setOperation('create'); |
||||
232 | $this->assertFalse($this->crudPanel->isRequired('test')); |
||||
233 | $this->crudPanel->setValidation([ |
||||
234 | 'email' => 'required', |
||||
235 | 'password.*.test' => 'required', |
||||
236 | ]); |
||||
237 | |||||
238 | $this->crudPanel->setValidation(UserRequest::class); |
||||
239 | $this->assertEquals(['email', 'password[test]', 'name'], array_values($this->crudPanel->getOperationSetting('requiredFields'))); |
||||
0 ignored issues
–
show
It seems like
$this->crudPanel->getOpe...tting('requiredFields') can also be of type null ; however, parameter $array of array_values() does only seem to accept array , maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||
240 | $this->assertTrue($this->crudPanel->isRequired('email')); |
||||
241 | $this->assertTrue($this->crudPanel->isRequired('password.test')); |
||||
242 | $this->assertTrue($this->crudPanel->isRequired('name')); |
||||
243 | } |
||||
244 | |||||
245 | public function testItCanGetTheRequiredFieldsFromCustomRules() |
||||
246 | { |
||||
247 | $this->crudPanel->setModel(User::class); |
||||
248 | |||||
249 | $this->crudPanel->setValidation([ |
||||
250 | 'email' => ValidUpload::field('required'), |
||||
251 | 'password' => ValidUploadMultiple::field('required'), |
||||
252 | ]); |
||||
253 | |||||
254 | $this->assertEquals(['email', 'password'], array_values($this->crudPanel->getOperationSetting('requiredFields'))); |
||||
0 ignored issues
–
show
It seems like
$this->crudPanel->getOpe...tting('requiredFields') can also be of type null ; however, parameter $array of array_values() does only seem to accept array , maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||
255 | $this->assertTrue($this->crudPanel->isRequired('email')); |
||||
256 | $this->assertTrue($this->crudPanel->isRequired('password')); |
||||
257 | } |
||||
258 | |||||
259 | public function testItCanValidateCustomRules() |
||||
260 | { |
||||
261 | $this->crudPanel->setModel(User::class); |
||||
262 | |||||
263 | $pdf1 = UploadedFile::fake()->create('test1.pdf', 1000); |
||||
264 | $pdf2 = UploadedFile::fake()->create('test2.pdf', 1000); |
||||
265 | |||||
266 | $request = request()->create('users/', 'POST', [ |
||||
267 | 'email' => $pdf1, |
||||
268 | 'password' => [$pdf1, $pdf2], |
||||
269 | 'name' => 'test', |
||||
270 | ]); |
||||
271 | |||||
272 | $request->setRouteResolver(function () use ($request) { |
||||
273 | return (new Route('POST', 'users', ['Backpack\CRUD\Tests\Config\Http\Controllers\UserCrudController', 'create']))->bind($request); |
||||
274 | }); |
||||
275 | |||||
276 | $this->crudPanel->addFields([ |
||||
277 | [ |
||||
278 | 'name' => 'password', |
||||
279 | 'validationRules' => ValidUploadMultiple::field('required')->file('file|mimes:pdf|max:500'), |
||||
280 | ], |
||||
281 | [ |
||||
282 | 'name' => 'email', |
||||
283 | 'validationRules' => ValidUpload::field('required')->file('file|mimes:jpg'), |
||||
284 | ], |
||||
285 | ]); |
||||
286 | |||||
287 | $this->crudPanel->setRequest($request); |
||||
288 | |||||
289 | $this->expectException(\Illuminate\Validation\ValidationException::class); |
||||
290 | |||||
291 | try { |
||||
292 | $this->crudPanel->validateRequest(); |
||||
293 | } catch (\Illuminate\Validation\ValidationException $e) { |
||||
294 | $this->assertEquals([ |
||||
295 | 'password' => ['The password field must not be greater than 500 kilobytes.'], |
||||
296 | 'email' => ['The email field must be a file of type: jpg.'], |
||||
297 | ], $e->errors()); |
||||
298 | throw $e; |
||||
299 | } |
||||
300 | } |
||||
301 | } |
||||
302 |