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

CrudPanelUpdateTest::testGetUpdateFieldsWithEnum()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 48
Code Lines 33

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 33
nc 1
nop 0
dl 0
loc 48
rs 9.392
c 0
b 0
f 0
1
<?php
2
3
namespace Backpack\CRUD\Tests\Unit\CrudPanel;
4
5
use Backpack\CRUD\Tests\config\Models\User;
6
use Faker\Factory;
7
use Illuminate\Database\Eloquent\ModelNotFoundException;
8
use Illuminate\Support\Facades\DB;
9
use Illuminate\Support\Facades\Hash;
10
11
/**
12
 * @covers Backpack\CRUD\app\Library\CrudPanel\Traits\Update
13
 * @covers Backpack\CRUD\app\Library\CrudPanel\Traits\Relationships
14
 * @covers Backpack\CRUD\app\Library\CrudPanel\Traits\FieldsProtectedMethods
15
 * @covers Backpack\CRUD\app\Library\CrudPanel\Traits\Input
16
 */
17
class CrudPanelUpdateTest extends \Backpack\CRUD\Tests\config\CrudPanel\BaseDBCrudPanel
18
{
19
    private $userInputFields = [
20
        [
21
            'name' => 'id',
22
            'type' => 'hidden',
23
        ], [
24
            'name' => 'name',
25
        ], [
26
            'name' => 'email',
27
            'type' => 'email',
28
        ], [
29
            'name' => 'password',
30
            'type' => 'password',
31
        ],
32
    ];
33
34
    private $expectedUpdatedFields = [
35
        'id' => [
36
            'name' => 'id',
37
            'type' => 'hidden',
38
            'label' => 'Id',
39
            'entity' => false,
40
        ],
41
        'name' => [
42
            'name' => 'name',
43
            'label' => 'Name',
44
            'type' => 'text',
45
            'entity' => false,
46
        ],
47
        'email' => [
48
            'name' => 'email',
49
            'type' => 'email',
50
            'label' => 'Email',
51
            'entity' => false,
52
        ],
53
        'password' => [
54
            'name' => 'password',
55
            'type' => 'password',
56
            'label' => 'Password',
57
            'entity' => false,
58
        ],
59
    ];
60
61
    public function testUpdate()
62
    {
63
        $this->crudPanel->setModel(User::class);
64
        $this->crudPanel->addFields($this->userInputFields);
65
        $faker = Factory::create();
66
        $inputData = [
67
            'name' => $faker->name,
68
            'email' => $faker->safeEmail,
69
            'password' => Hash::make($faker->password()),
70
        ];
71
72
        $entry = $this->crudPanel->update(1, $inputData);
73
74
        $this->assertInstanceOf(User::class, $entry);
75
        $this->assertEntryEquals($inputData, $entry);
76
    }
77
78
    public function testUpdateUnknownId()
79
    {
80
        $this->expectException(ModelNotFoundException::class);
81
82
        $this->crudPanel->setModel(User::class);
83
        $this->crudPanel->addFields($this->userInputFields);
84
        $faker = Factory::create();
85
        $inputData = [
86
            'name' => $faker->name,
87
            'email' => $faker->safeEmail,
88
            'password' => Hash::make($faker->password()),
89
        ];
90
91
        $unknownId = DB::getPdo()->lastInsertId() + 2;
92
        $this->crudPanel->update($unknownId, $inputData);
93
    }
94
95
    public function testGetUpdateFields()
96
    {
97
        $this->crudPanel->setModel(User::class);
98
        $this->crudPanel->addFields($this->userInputFields);
99
        $faker = Factory::create();
100
        $inputData = [
101
            'name' => $faker->name,
102
            'email' => $faker->safeEmail,
103
            'password' => Hash::make($faker->password()),
104
        ];
105
        $entry = $this->crudPanel->create($inputData);
106
        $this->addValuesToExpectedFields($entry->id, $inputData);
107
108
        $updateFields = $this->crudPanel->getUpdateFields($entry->id);
109
110
        $this->assertEquals($this->expectedUpdatedFields, $updateFields);
111
    }
112
113
    public function testGetUpdateFieldsUnknownId()
114
    {
115
        $this->expectException(ModelNotFoundException::class);
116
117
        $this->crudPanel->setModel(User::class);
118
        $this->crudPanel->addFields($this->userInputFields);
119
120
        $unknownId = DB::getPdo()->lastInsertId() + 2;
121
        $this->crudPanel->getUpdateFields($unknownId);
122
    }
123
124
    public function testGetUpdateFieldsWithEnum()
125
    {
126
        $this->crudPanel->setModel(\Backpack\CRUD\Tests\config\Models\ArticleWithEnum::class);
127
        $this->crudPanel->addFields([[
128
            'name' => 'id',
129
            'type' => 'hidden',
130
        ], [
131
            'name' => 'content',
132
        ], [
133
            'name' => 'tags',
134
        ], [
135
            'label' => 'Author',
136
            'type' => 'select',
137
            'name' => 'user_id',
138
            'entity' => 'user',
139
            'attribute' => 'name',
140
        ], [
141
            'name' => 'status',
142
        ],
143
            [
144
                'name' => 'state',
145
            ],
146
            [
147
                'name' => 'style',
148
            ],
149
        ]);
150
        $faker = Factory::create();
151
        $inputData = [
152
            'content' => $faker->text(),
153
            'tags' => $faker->words(3, true),
154
            'user_id' => 1,
155
            'metas' => null,
156
            'extras' => null,
157
            'status' => 'publish',
158
            'state' => 'COLD',
159
            'style' => 'DRAFT',
160
            'cast_metas' => null,
161
            'cast_tags' => null,
162
            'cast_extras' => null,
163
        ];
164
        $article = $this->crudPanel->create($inputData);
0 ignored issues
show
Unused Code introduced by
The assignment to $article is dead and can be removed.
Loading history...
165
166
        $updateFields = $this->crudPanel->getUpdateFields(2);
167
168
        $this->assertTrue($updateFields['status']['value']->value === 'publish');
169
        $this->assertTrue($updateFields['status']['value']->name === 'PUBLISHED');
170
        $this->assertTrue($updateFields['state']['value']->name === 'COLD');
171
        $this->assertTrue($updateFields['style']['value']->color() === 'red');
172
    }
173
174
    private function addValuesToExpectedFields($id, $inputData)
175
    {
176
        foreach ($inputData as $key => $value) {
177
            $this->expectedUpdatedFields[$key]['value'] = $value;
178
        }
179
        $this->expectedUpdatedFields['id']['value'] = $id;
180
    }
181
}
182