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

Test Setup Failed
Pull Request — master (#3383)
by Cristian
17:18
created

testUpdateExistingOneToOneRelationship()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 23
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

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