Scrutinizer GitHub App not installed

We could not synchronize checks via GitHub's checks API since Scrutinizer's GitHub App is not installed for this repository.

Install GitHub App

Passed
Push — CrudButton-fixees ( 8e21aa...0a7a26 )
by Pedro
36:42 queued 21:25
created

CrudPanelValidationTest   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 195
Duplicated Lines 0 %

Importance

Changes 6
Bugs 3 Features 1
Metric Value
eloc 106
c 6
b 3
f 1
dl 0
loc 195
rs 10
wmc 9

7 Methods

Rating   Name   Duplication   Size   Complexity  
A testItThrowsValidationExceptions() 0 13 1
A testItThrowsExceptionWithInvalidValidationClass() 0 12 2
A testItCanGetTheRequiredFields() 0 15 1
A testItCanDisableTheValidation() 0 16 1
A testItCanGetTheValidationFromFields() 0 48 1
A testItMergesAllKindsOfValidation() 0 42 2
A testItMergesFieldValidationWithRequestValidation() 0 33 1
1
<?php
2
3
namespace Backpack\CRUD\Tests\Unit\CrudPanel;
4
5
use Backpack\CRUD\Tests\Unit\Http\Requests\UserRequest;
6
use Backpack\CRUD\Tests\Unit\Models\User;
7
8
/**
9
 * @covers Backpack\CRUD\app\Library\CrudPanel\Traits\Validation
10
 */
11
class CrudPanelValidationTest extends BaseDBCrudPanelTest
12
{
13
    public function testItThrowsValidationExceptions()
14
    {
15
        $this->crudPanel->setModel(User::class);
16
        $this->crudPanel->setValidation(UserRequest::class);
17
18
        $request = request()->create('users/', 'POST', [
19
            'email'    => '[email protected]',
20
            'password' => 'test',
21
        ]);
22
23
        $this->crudPanel->setRequest($request);
24
        $this->expectException(\Illuminate\Validation\ValidationException::class);
25
        $validatedRequest = $this->crudPanel->validateRequest();
0 ignored issues
show
Unused Code introduced by
The assignment to $validatedRequest is dead and can be removed.
Loading history...
26
    }
27
28
    public function testItMergesFieldValidationWithRequestValidation()
29
    {
30
        $this->crudPanel->setModel(User::class);
31
        $this->crudPanel->setValidation(UserRequest::class);
32
33
        $request = request()->create('users/', 'POST', [
34
            'name'     => 'test name',
35
            'email'    => '[email protected]',
36
            'password' => 'test',
37
        ]);
38
39
        $request->setRouteResolver(function () use ($request) {
40
            return (new Route('POST', 'users', ['Backpack\CRUD\Tests\Unit\Http\Controllers\UserCrudController', 'create']))->bind($request);
0 ignored issues
show
Bug introduced by
The type Backpack\CRUD\Tests\Unit\CrudPanel\Route was not found. Did you mean Route? If so, make sure to prefix the type with \.
Loading history...
41
        });
42
43
        $this->crudPanel->addFields([
44
            [
45
                'name'            => 'email',
46
                'validationRules' => 'required',
47
            ],
48
            [
49
                'name' => 'name',
50
            ],
51
            [
52
                'name' => 'password',
53
            ],
54
        ]);
55
56
        $this->crudPanel->setRequest($request);
57
58
        $this->crudPanel->validateRequest();
59
60
        $this->assertEquals(['email'], array_keys($this->crudPanel->getOperationSetting('validationRules')));
0 ignored issues
show
Bug introduced by
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 ignore-type  annotation

60
        $this->assertEquals(['email'], array_keys(/** @scrutinizer ignore-type */ $this->crudPanel->getOperationSetting('validationRules')));
Loading history...
61
    }
62
63
    public function testItMergesAllKindsOfValidation()
64
    {
65
        $this->crudPanel->setModel(User::class);
66
67
        $this->crudPanel->setOperation('create');
68
        $this->crudPanel->setValidation([
69
            'password' => 'required',
70
        ]);
71
        $this->crudPanel->setValidation(UserRequest::class);
72
73
        $request = request()->create('users/', 'POST', [
74
            'name'     => '',
75
            'password' => '',
76
            'email'    => '',
77
        ]);
78
79
        $request->setRouteResolver(function () use ($request) {
80
            return (new Route('POST', 'users', ['Backpack\CRUD\Tests\Unit\Http\Controllers\UserCrudController', 'create']))->bind($request);
81
        });
82
83
        $this->crudPanel->addFields([
84
            [
85
                'name'            => 'email',
86
                'validationRules' => 'required',
87
            ],
88
            [
89
                'name' => 'name',
90
            ],
91
            [
92
                'name' => 'password',
93
            ],
94
        ]);
95
96
        $this->crudPanel->setRequest($request);
97
98
        $this->expectException(\Illuminate\Validation\ValidationException::class);
99
100
        try {
101
            $this->crudPanel->validateRequest();
102
        } catch (\Illuminate\Validation\ValidationException $e) {
103
            $this->assertEquals(['password', 'email', 'name'], array_keys($e->errors()));
104
            throw $e;
105
        }
106
    }
107
108
    public function testItCanGetTheValidationFromFields()
109
    {
110
        $this->crudPanel->setModel(User::class);
111
        $this->crudPanel->setOperation('create');
112
113
        $request = request()->create('users/', 'POST', [
114
            'name'     => 'test name',
115
            'email'    => '[email protected]',
116
            'password' => 'test',
117
        ]);
118
119
        $request->setRouteResolver(function () use ($request) {
120
            return (new Route('POST', 'users', ['Backpack\CRUD\Tests\Unit\Http\Controllers\UserCrudController', 'create']))->bind($request);
121
        });
122
123
        $this->crudPanel->addField([
124
            'name'            => 'email',
125
            'validationRules' => 'required',
126
        ]);
127
128
        $this->crudPanel->addField([
129
            'name'               => 'name',
130
            'validationRules'    => 'required',
131
            'validationMessages' => [
132
                'required' => 'required ma friend',
133
            ],
134
        ]);
135
136
        $this->crudPanel->addField([
137
            'name'      => 'password',
138
            'subfields' => [
139
                [
140
                    'name'               => 'test',
141
                    'validationRules'    => 'required',
142
                    'validationMessages' => [
143
                        'required' => 'required ma friend',
144
                    ],
145
                ],
146
            ],
147
        ]);
148
149
        $this->crudPanel->setRequest($request);
150
151
        $this->crudPanel->setValidation();
152
153
        $validatedRequest = $this->crudPanel->validateRequest();
0 ignored issues
show
Unused Code introduced by
The assignment to $validatedRequest is dead and can be removed.
Loading history...
154
155
        $this->assertEquals(['email', 'name', 'password.*.test'], array_keys($this->crudPanel->getOperationSetting('validationRules')));
0 ignored issues
show
Bug introduced by
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 ignore-type  annotation

155
        $this->assertEquals(['email', 'name', 'password.*.test'], array_keys(/** @scrutinizer ignore-type */ $this->crudPanel->getOperationSetting('validationRules')));
Loading history...
156
    }
157
158
    public function testItThrowsExceptionWithInvalidValidationClass()
159
    {
160
        $this->crudPanel->setModel(User::class);
161
        $this->crudPanel->setOperation('create');
162
163
        try {
164
            $this->crudPanel->setValidation('\Backpack\CRUD\Tests\Unit\Models\User');
165
        } catch (\Throwable $e) {
0 ignored issues
show
Coding Style Comprehensibility introduced by
Consider adding a comment why this CATCH block is empty.
Loading history...
166
        }
167
        $this->assertEquals(
168
            new \Symfony\Component\HttpKernel\Exception\HttpException(500, 'Please pass setValidation() nothing, a rules array or a FormRequest class.'),
169
            $e
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $e does not seem to be defined for all execution paths leading up to this point.
Loading history...
170
        );
171
    }
172
173
    public function testItCanDisableTheValidation()
174
    {
175
        $this->crudPanel->setModel(User::class);
176
        $this->crudPanel->setOperation('create');
177
        $this->crudPanel->setValidation([
178
            'name'     => 'required',
179
            'password' => 'required',
180
        ]);
181
        $this->crudPanel->setValidation(UserRequest::class);
182
        $this->assertEquals(['name', 'password'], array_keys($this->crudPanel->getOperationSetting('validationRules')));
0 ignored issues
show
Bug introduced by
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 ignore-type  annotation

182
        $this->assertEquals(['name', 'password'], array_keys(/** @scrutinizer ignore-type */ $this->crudPanel->getOperationSetting('validationRules')));
Loading history...
183
184
        $this->crudPanel->disableValidation();
185
        $this->assertEquals([], $this->crudPanel->getOperationSetting('validationRules'));
186
        $this->assertEquals([], $this->crudPanel->getOperationSetting('validationMessages'));
187
        $this->assertEquals([], $this->crudPanel->getOperationSetting('requiredFields'));
188
        $this->assertEquals(false, $this->crudPanel->getFormRequest());
189
    }
190
191
    public function testItCanGetTheRequiredFields()
192
    {
193
        $this->crudPanel->setModel(User::class);
194
        $this->crudPanel->setOperation('create');
195
        $this->assertFalse($this->crudPanel->isRequired('test'));
196
        $this->crudPanel->setValidation([
197
            'email'     => 'required',
198
            'password.*.test' => 'required',
199
        ]);
200
201
        $this->crudPanel->setValidation(UserRequest::class);
202
        $this->assertEquals(['email', 'password[test]', 'name'], array_values($this->crudPanel->getOperationSetting('requiredFields')));
0 ignored issues
show
Bug introduced by
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 ignore-type  annotation

202
        $this->assertEquals(['email', 'password[test]', 'name'], array_values(/** @scrutinizer ignore-type */ $this->crudPanel->getOperationSetting('requiredFields')));
Loading history...
203
        $this->assertTrue($this->crudPanel->isRequired('email'));
204
        $this->assertTrue($this->crudPanel->isRequired('password.test'));
205
        $this->assertTrue($this->crudPanel->isRequired('name'));
206
    }
207
}
208