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

FakeUploadersTest   A

Complexity

Total Complexity 13

Size/Duplication

Total Lines 213
Duplicated Lines 0 %

Importance

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

13 Methods

Rating   Name   Duplication   Size   Complexity  
A test_it_display_the_edit_page_without_files() 0 6 1
A initUploaderWithFiles() 0 8 1
A test_it_keeps_previous_values_unchaged_when_not_deleted() 0 26 1
A defineRoutes() 0 3 1
A test_upload_multiple_can_delete_uploaded_files_and_add_at_the_same_time() 0 28 1
A test_it_can_access_the_uploaders_create_page() 0 4 1
A test_single_upload_deletes_files_when_updated_without_values() 0 24 1
A initUploader() 0 4 1
A test_it_can_update_uploaded_files() 0 29 1
A setUp() 0 6 1
A test_it_can_store_uploaded_files() 0 20 1
A test_it_can_delete_uploaded_files() 0 13 1
A test_it_display_the_upload_page_with_files() 0 10 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\FakeUploaderCrudController;
7
use Backpack\CRUD\Tests\config\Models\FakeUploader;
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
 */
18
class FakeUploadersTest extends BaseDBCrudPanel
19
{
20
    use HasUploadedFiles;
21
22
    protected string $testBaseUrl;
23
24
    protected function defineRoutes($router)
25
    {
26
        $router->crud(config('backpack.base.route_prefix').'/fake-uploader', FakeUploaderCrudController::class);
27
    }
28
29
    protected function setUp(): void
30
    {
31
        parent::setUp();
32
        Storage::fake('uploaders');
33
        $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

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