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
Pull Request — master (#3410)
by
unknown
13:58
created

testUpdateExistingOneToOneRelationship()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 23
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 15
c 0
b 0
f 0
nc 1
nop 0
dl 0
loc 23
rs 9.7666
1
<?php
2
3
namespace Backpack\CRUD\Tests\Unit\CrudPanel;
4
5
use Backpack\CRUD\Tests\Unit\Models\AccountDetails;
6
use Backpack\CRUD\Tests\Unit\Models\Article;
7
use Backpack\CRUD\Tests\Unit\Models\User;
8
use Faker\Factory;
9
use Illuminate\Database\Eloquent\ModelNotFoundException;
10
use Illuminate\Support\Facades\DB;
11
12
/**
13
 * @covers Backpack\CRUD\app\Library\CrudPanel\Traits\Update
14
 */
15
class CrudPanelUpdateTest extends BaseDBCrudPanelTest
16
{
17
    private $userInputFields = [
18
        [
19
            'name' => 'id',
20
            'type' => 'hidden',
21
        ], [
22
            'name' => 'name',
23
        ], [
24
            'name' => 'email',
25
            'type' => 'email',
26
        ], [
27
            'name' => 'password',
28
            'type' => 'password',
29
        ],
30
    ];
31
32
    private $expectedUpdatedFields = [
33
        'id' => [
34
            'name'  => 'id',
35
            'type'  => 'hidden',
36
            'label' => 'Id',
37
        ],
38
        'name' => [
39
            'name'  => 'name',
40
            'label' => 'Name',
41
            'type'  => 'text',
42
        ],
43
        'email' => [
44
            'name'  => 'email',
45
            'type'  => 'email',
46
            'label' => 'Email',
47
        ],
48
        'password' => [
49
            'name'  => 'password',
50
            'type'  => 'password',
51
            'label' => 'Password',
52
        ],
53
    ];
54
55
    private $userInputHasOneRelation = [
56
        [
57
            'name' => 'accountDetails.nickname',
58
        ],
59
        [
60
            'name' => 'accountDetails.profile_picture',
61
        ],
62
    ];
63
64
    private $userInputHasOneWithBelongsToRelation = [
65
        [
66
            'name' => 'accountDetails.nickname',
67
        ],
68
        [
69
            'name' => 'accountDetails.profile_picture',
70
        ],
71
        [
72
            'name' => 'accountDetails.article',
73
            'type' => 'relationship',
74
        ],
75
76
    ];
77
78
    public function testUpdate()
79
    {
80
        $this->crudPanel->setModel(User::class);
81
        $this->crudPanel->addFields($this->userInputFields);
82
        $faker = Factory::create();
83
        $inputData = [
84
            'name'     => $faker->name,
85
            'email'    => $faker->safeEmail,
86
            'password' => bcrypt($faker->password()),
87
        ];
88
89
        $entry = $this->crudPanel->update(1, $inputData);
90
91
        $this->assertInstanceOf(User::class, $entry);
92
        $this->assertEntryEquals($inputData, $entry);
93
    }
94
95
    /**
96
     * Undocumented function.
97
     */
98
    public function testUpdateExistingOneToOneRelationship()
99
    {
100
        $this->crudPanel->setModel(User::class);
101
        $this->crudPanel->addFields($this->userInputFields);
102
        $this->crudPanel->addFields($this->userInputHasOneRelation);
103
        $user = User::find(1)->load('accountDetails');
104
        $this->assertInstanceOf(AccountDetails::class, $user->accountDetails);
105
106
        $inputData = [
107
            'name'     => $user->name,
108
            'email'    => $user->email,
109
            'accountDetails' => [
110
                'profile_picture' => 'test_updated.jpg',
111
                'nickname' => 'i_have_has_one',
112
            ],
113
        ];
114
115
        $entry = $this->crudPanel->update(1, $inputData);
116
117
        $entry->load('accountDetails');
118
119
        $this->assertInstanceOf(AccountDetails::class, $entry->accountDetails);
120
        $this->assertEquals('test_updated.jpg', $entry->accountDetails->profile_picture);
121
    }
122
123
    /**
124
     * Undocumented function.
125
     */
126
    public function testClearBelongsToRelationInOneToOneRelationship()
127
    {
128
        $this->crudPanel->setModel(User::class);
129
        $this->crudPanel->addFields($this->userInputFields);
130
        $this->crudPanel->addFields($this->userInputHasOneWithBelongsToRelation);
131
        $article = Article::first();
132
        $faker = Factory::create();
133
        $inputData = [
134
            'name'     => $faker->name,
135
            'email'    => $faker->safeEmail,
136
            'password' => bcrypt($faker->password()),
137
            'accountDetails' => [
138
                'nickname' => $faker->name,
139
                'profile_picture' => 'test.jpg',
140
                'article' => $article->id,
141
            ],
142
        ];
143
144
        $entry = $this->crudPanel->create($inputData);
145
146
        $entry->load('accountDetails');
147
148
        $this->assertInstanceOf(AccountDetails::class, $entry->accountDetails);
149
        $this->assertInstanceOf(Article::class, $entry->accountDetails->article);
150
151
        $inputData = [
152
            'name'     => $faker->name,
153
            'email'    => $faker->safeEmail,
154
            'password' => bcrypt($faker->password()),
155
            'accountDetails' => [
156
                'nickname' => $faker->name,
157
                'profile_picture' => 'test.jpg',
158
                'article' => null,
159
            ],
160
        ];
161
162
        $this->crudPanel->update($entry->id, $inputData);
163
164
        $entry->load('accountDetails');
165
166
        $this->assertInstanceOf(AccountDetails::class, $entry->accountDetails);
167
        $this->assertNull($entry->accountDetails->article);
168
    }
169
170
    public function testUpdateUnknownId()
171
    {
172
        $this->expectException(ModelNotFoundException::class);
173
174
        $this->crudPanel->setModel(User::class);
175
        $this->crudPanel->addFields($this->userInputFields);
176
        $faker = Factory::create();
177
        $inputData = [
178
            'name'     => $faker->name,
179
            'email'    => $faker->safeEmail,
180
            'password' => bcrypt($faker->password()),
181
        ];
182
183
        $unknownId = DB::getPdo()->lastInsertId() + 2;
184
        $this->crudPanel->update($unknownId, $inputData);
185
    }
186
187
    public function testGetUpdateFields()
188
    {
189
        $this->crudPanel->setModel(User::class);
190
        $this->crudPanel->addFields($this->userInputFields);
191
        $faker = Factory::create();
192
        $inputData = [
193
            'name'     => $faker->name,
194
            'email'    => $faker->safeEmail,
195
            'password' => bcrypt($faker->password()),
196
        ];
197
        $entry = $this->crudPanel->create($inputData);
198
        $this->addValuesToExpectedFields($entry->id, $inputData);
199
200
        $updateFields = $this->crudPanel->getUpdateFields($entry->id);
201
202
        $this->assertEquals($this->expectedUpdatedFields, $updateFields);
203
    }
204
205
    public function testGetUpdateFieldsUnknownId()
206
    {
207
        $this->expectException(ModelNotFoundException::class);
208
209
        $this->crudPanel->setModel(User::class);
210
        $this->crudPanel->addFields($this->userInputFields);
211
212
        $unknownId = DB::getPdo()->lastInsertId() + 2;
213
        $this->crudPanel->getUpdateFields($unknownId);
214
    }
215
216
    private function addValuesToExpectedFields($id, $inputData)
217
    {
218
        foreach ($inputData as $key => $value) {
219
            $this->expectedUpdatedFields[$key]['value'] = $value;
220
        }
221
        $this->expectedUpdatedFields['id']['value'] = $id;
222
    }
223
}
224