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 — main (#5725)
by Pedro
25:49 queued 10:59
created

UploadersTest   A

Complexity

Total Complexity 13

Size/Duplication

Total Lines 222
Duplicated Lines 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
eloc 110
c 1
b 1
f 0
dl 0
loc 222
rs 10
wmc 13

13 Methods

Rating   Name   Duplication   Size   Complexity  
A test_it_keeps_previous_values_unchaged_when_not_deleted() 0 27 1
A test_single_upload_deletes_files_when_updated_without_values() 0 25 1
A test_upload_multiple_can_delete_uploaded_files_and_add_at_the_same_time() 0 29 1
A test_it_can_store_uploaded_files() 0 25 1
A test_it_can_update_uploaded_files() 0 29 1
A test_it_display_the_upload_page_with_files() 0 10 1
A initUploader() 0 5 1
A test_it_display_the_edit_page_without_files() 0 6 1
A test_it_can_access_the_uploaders_create_page() 0 4 1
A test_it_can_delete_uploaded_files() 0 13 1
A defineRoutes() 0 3 1
A setUp() 0 6 1
A initUploaderWithFiles() 0 9 1
1
<?php
2
3
namespace Backpack\CRUD\Tests\Feature;
4
5
use Backpack\CRUD\Tests\config\CrudPanel\BaseDBCrudPanel;
6
use Backpack\CRUD\Tests\config\Http\Controllers\UploaderCrudController;
7
use Backpack\CRUD\Tests\config\Models\Uploader;
8
use Backpack\CRUD\Tests\config\Models\User;
9
use Backpack\CRUD\Tests\config\Uploads\HasUploadedFiles;
10
use Illuminate\Http\UploadedFile;
11
use Illuminate\Support\Facades\Storage;
12
13
/**
14
 * @covers Backpack\CRUD\app\Library\Uploaders\Uploader
15
 * @covers Backpack\CRUD\app\Library\Uploaders\SingleFile
16
 * @covers Backpack\CRUD\app\Library\Uploaders\MultipleFiles
17
 * @covers Backpack\CRUD\app\Library\Uploaders\Support\RegisterUploadEvents
18
 * @covers Backpack\CRUD\app\Library\Uploaders\Support\UploadersRepository
19
 */
20
class UploadersTest extends BaseDBCrudPanel
21
{
22
    use HasUploadedFiles;
23
24
    protected string $testBaseUrl;
25
26
    protected function defineRoutes($router)
27
    {
28
        $router->crud(config('backpack.base.route_prefix').'/uploader', UploaderCrudController::class);
29
    }
30
31
    protected function setUp(): void
32
    {
33
        parent::setUp();
34
        $this->testBaseUrl = config('backpack.base.route_prefix').'/uploader';
35
        Storage::fake('uploaders');
36
        $this->actingAs(User::find(1));
0 ignored issues
show
Bug introduced by
It seems like Backpack\CRUD\Tests\config\Models\User::find(1) can also be of type Illuminate\Database\Eloq...gHasThroughRelationship and null; however, parameter $user of Orchestra\Testbench\TestCase::actingAs() does only seem to accept Illuminate\Contracts\Auth\Authenticatable, 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

36
        $this->actingAs(/** @scrutinizer ignore-type */ User::find(1));
Loading history...
37
    }
38
39
    public function test_it_can_access_the_uploaders_create_page()
40
    {
41
        $response = $this->get($this->testBaseUrl.'/create');
42
        $response->assertStatus(200);
43
    }
44
45
    public function test_it_can_store_uploaded_files()
46
    {
47
        $response = $this->post($this->testBaseUrl, [
48
            'upload' => $this->getUploadedFile('avatar1.jpg'),
49
            'upload_multiple' => $this->getUploadedFiles(['avatar2.jpg', 'avatar3.jpg']),
50
        ]);
51
52
        $response->assertStatus(302);
53
54
        $response->assertRedirect($this->testBaseUrl);
55
56
        $this->assertDatabaseCount('uploaders', 1);
57
58
        $files = Storage::disk('uploaders')->allFiles();
59
60
        $this->assertEquals(3, count($files));
61
62
        $this->assertDatabaseHas('uploaders', [
63
            'upload' => 'avatar1.jpg',
64
            'upload_multiple' => json_encode(['avatar2.jpg',  'avatar3.jpg']),
65
        ]);
66
67
        $this->assertTrue(Storage::disk('uploaders')->exists('avatar1.jpg'));
68
        $this->assertTrue(Storage::disk('uploaders')->exists('avatar2.jpg'));
69
        $this->assertTrue(Storage::disk('uploaders')->exists('avatar3.jpg'));
70
    }
71
72
    public function test_it_display_the_edit_page_without_files()
73
    {
74
        self::initUploader();
75
76
        $response = $this->get($this->testBaseUrl.'/1/edit');
77
        $response->assertStatus(200);
78
    }
79
80
    public function test_it_display_the_upload_page_with_files()
81
    {
82
        self::initUploaderWithFiles();
83
        $response = $this->get($this->testBaseUrl.'/1/edit');
84
85
        $response->assertStatus(200);
86
87
        $response->assertSee('avatar1.jpg');
88
        $response->assertSee('avatar2.jpg');
89
        $response->assertSee('avatar3.jpg');
90
    }
91
92
    public function test_it_can_update_uploaded_files()
93
    {
94
        self::initUploaderWithFiles();
95
96
        $response = $this->put($this->testBaseUrl.'/1', [
97
            'upload' => $this->getUploadedFile('avatar4.jpg'),
98
            'upload_multiple' => $this->getUploadedFiles(['avatar5.jpg', 'avatar6.jpg']),
99
            'clear_upload_multiple' => ['avatar2.jpg',  'avatar3.jpg'],
100
            'id' => 1,
101
        ]);
102
103
        $response->assertStatus(302);
104
105
        $response->assertRedirect($this->testBaseUrl);
106
107
        $this->assertDatabaseCount('uploaders', 1);
108
109
        $this->assertDatabaseHas('uploaders', [
110
            'upload' => 'avatar4.jpg',
111
            'upload_multiple' => json_encode(['avatar5.jpg',  'avatar6.jpg']),
112
        ]);
113
114
        $files = Storage::disk('uploaders')->allFiles();
115
116
        $this->assertEquals(3, count($files));
117
118
        $this->assertTrue(Storage::disk('uploaders')->exists('avatar4.jpg'));
119
        $this->assertTrue(Storage::disk('uploaders')->exists('avatar5.jpg'));
120
        $this->assertTrue(Storage::disk('uploaders')->exists('avatar6.jpg'));
121
    }
122
123
    public function test_single_upload_deletes_files_when_updated_without_values()
124
    {
125
        self::initUploaderWithFiles();
126
127
        $response = $this->put($this->testBaseUrl.'/1', [
128
            'upload' => null,
129
            'id' => 1,
130
        ]);
131
132
        $response->assertStatus(302);
133
134
        $response->assertRedirect($this->testBaseUrl);
135
136
        $this->assertDatabaseCount('uploaders', 1);
137
138
        $this->assertDatabaseHas('uploaders', [
139
            'upload' => null,
140
            'upload_multiple' => json_encode(['avatar2.jpg',  'avatar3.jpg']),
141
        ]);
142
143
        $files = Storage::disk('uploaders')->allFiles();
144
145
        $this->assertEquals(2, count($files));
146
147
        $this->assertFalse(Storage::disk('uploaders')->exists('avatar1.jpg'));
148
    }
149
150
    public function test_it_can_delete_uploaded_files()
151
    {
152
        self::initUploaderWithFiles();
153
154
        $response = $this->delete($this->testBaseUrl.'/1');
155
156
        $response->assertStatus(200);
157
158
        $this->assertDatabaseCount('uploaders', 0);
159
160
        $files = Storage::disk('uploaders')->allFiles();
161
162
        $this->assertEquals(0, count($files));
163
    }
164
165
    public function test_it_keeps_previous_values_unchaged_when_not_deleted()
166
    {
167
        self::initUploaderWithFiles();
168
169
        $response = $this->put($this->testBaseUrl.'/1', [
170
            'upload_multiple' => ['avatar2.jpg',  'avatar3.jpg'],
171
            'id' => 1,
172
        ]);
173
174
        $response->assertStatus(302);
175
176
        $response->assertRedirect($this->testBaseUrl);
177
178
        $this->assertDatabaseCount('uploaders', 1);
179
180
        $this->assertDatabaseHas('uploaders', [
181
            'upload' => 'avatar1.jpg',
182
            'upload_multiple' => json_encode(['avatar2.jpg',  'avatar3.jpg']),
183
        ]);
184
185
        $files = Storage::disk('uploaders')->allFiles();
186
187
        $this->assertEquals(3, count($files));
188
189
        $this->assertTrue(Storage::disk('uploaders')->exists('avatar1.jpg'));
190
        $this->assertTrue(Storage::disk('uploaders')->exists('avatar2.jpg'));
191
        $this->assertTrue(Storage::disk('uploaders')->exists('avatar3.jpg'));
192
    }
193
194
    public function test_upload_multiple_can_delete_uploaded_files_and_add_at_the_same_time()
195
    {
196
        self::initUploaderWithFiles();
197
198
        $response = $this->put($this->testBaseUrl.'/1', [
199
            'upload_multiple' => $this->getUploadedFiles(['avatar4.jpg', 'avatar5.jpg']),
200
            'clear_upload_multiple' => ['avatar2.jpg'],
201
            'id' => 1,
202
        ]);
203
204
        $response->assertStatus(302);
205
206
        $response->assertRedirect($this->testBaseUrl);
207
208
        $this->assertDatabaseCount('uploaders', 1);
209
210
        $this->assertDatabaseHas('uploaders', [
211
            'upload' => 'avatar1.jpg',
212
            'upload_multiple' => json_encode(['avatar3.jpg', 'avatar4.jpg',  'avatar5.jpg']),
213
        ]);
214
215
        $files = Storage::disk('uploaders')->allFiles();
216
217
        $this->assertEquals(4, count($files));
218
219
        $this->assertTrue(Storage::disk('uploaders')->exists('avatar1.jpg'));
220
        $this->assertTrue(Storage::disk('uploaders')->exists('avatar3.jpg'));
221
        $this->assertTrue(Storage::disk('uploaders')->exists('avatar4.jpg'));
222
        $this->assertTrue(Storage::disk('uploaders')->exists('avatar5.jpg'));
223
    }
224
225
    protected static function initUploaderWithFiles()
226
    {
227
        UploadedFile::fake()->image('avatar1.jpg')->storeAs('', 'avatar1.jpg', ['disk' => 'uploaders']);
228
        UploadedFile::fake()->image('avatar2.jpg')->storeAs('', 'avatar2.jpg', ['disk' => 'uploaders']);
229
        UploadedFile::fake()->image('avatar3.jpg')->storeAs('', 'avatar3.jpg', ['disk' => 'uploaders']);
230
231
        Uploader::create([
232
            'upload' => 'avatar1.jpg',
233
            'upload_multiple' => json_encode(['avatar2.jpg',  'avatar3.jpg']),
234
        ]);
235
    }
236
237
    protected static function initUploader()
238
    {
239
        Uploader::create([
240
            'upload' => null,
241
            'upload_multiple' => null,
242
        ]);
243
    }
244
}
245