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
Push — add-uploaders-tests ( b57c4f...2a776c )
by Pedro
11:06
created

FakeUploadersTest::getUploadedFile()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 3
rs 10
c 1
b 0
f 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\HasUploadedFiles;
10
use Illuminate\Http\UploadedFile;
11
use Illuminate\Support\Facades\Storage;
12
use PHPUnit\Framework\Attributes\Group;
13
14
/**
15
 * @covers Backpack\CRUD\app\Library\Uploaders\Uploader
16
 * @covers Backpack\CRUD\app\Library\Uploaders\SingleFile
17
 * @covers Backpack\CRUD\app\Library\Uploaders\MultipleFiles
18
 */
19
class FakeUploadersTest extends BaseDBCrudPanel
20
{
21
    use HasUploadedFiles;
22
23
    protected string $testBaseUrl;
24
25
    protected function defineRoutes($router)
26
    {
27
        $router->crud(config('backpack.base.route_prefix').'/fake-uploader', FakeUploaderCrudController::class);
28
    }
29
30
    protected function setUp(): void
31
    {
32
        parent::setUp();
33
        Storage::fake('uploaders');
34
        $this->actingAs(User::find(1));
35
        $this->testBaseUrl = config('backpack.base.route_prefix').'/fake-uploader';
36
    }
37
38
    #[Group('fail')]
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
            'id' => 1,
64
            'extras' => json_encode(['upload' => 'avatar1.jpg', 'upload_multiple' => ['avatar2.jpg', 'avatar3.jpg']]),
65
        ]);
66
    }
67
68
    public function test_it_display_the_edit_page_without_files()
69
    {
70
        self::initUploader();
71
72
        $response = $this->get($this->testBaseUrl.'/1/edit');
73
        $response->assertStatus(200);
74
    }
75
76
    public function test_it_display_the_upload_page_with_files()
77
    {
78
        self::initUploaderWithFiles();
79
        $response = $this->get($this->testBaseUrl.'/1/edit');
80
81
        $response->assertStatus(200);
82
83
        $response->assertSee('avatar1.jpg');
84
        $response->assertSee('avatar2.jpg');
85
        $response->assertSee('avatar3.jpg');
86
    }
87
88
    public function test_it_can_update_uploaded_files()
89
    {
90
        self::initUploaderWithFiles();
91
92
        $response = $this->put($this->testBaseUrl.'/1', [
93
            '_method' => 'PUT',
94
            'upload' => $this->getUploadedFile('avatar4.jpg'),
95
            'upload_multiple' => $this->getUploadedFiles(['avatar5.jpg', 'avatar6.jpg']),
96
            'clear_upload_multiple' => ['avatar2.jpg',  'avatar3.jpg'],
97
            'id' => 1,
98
        ]);
99
100
        $response->assertStatus(302);
101
102
        $response->assertRedirect($this->testBaseUrl);
103
104
        $this->assertDatabaseCount('uploaders', 1);
105
106
        $this->assertDatabaseHas('uploaders', [
107
            'extras' => json_encode(['upload' => 'avatar4.jpg', 'upload_multiple' => ['avatar5.jpg', 'avatar6.jpg']]),
108
        ]);
109
110
        $files = Storage::disk('uploaders')->allFiles();
111
112
        $this->assertEquals(3, count($files));
113
114
        $this->assertTrue(Storage::disk('uploaders')->exists('avatar4.jpg'));
115
        $this->assertTrue(Storage::disk('uploaders')->exists('avatar5.jpg'));
116
        $this->assertTrue(Storage::disk('uploaders')->exists('avatar6.jpg'));
117
    }
118
119
    public function test_single_upload_deletes_files_when_updated_without_values()
120
    {
121
        self::initUploaderWithFiles();
122
123
        $response = $this->put($this->testBaseUrl.'/1', [
124
            'upload' => null,
125
            'id' => 1,
126
        ]);
127
128
        $response->assertStatus(302);
129
130
        $response->assertRedirect($this->testBaseUrl);
131
132
        $this->assertDatabaseCount('uploaders', 1);
133
134
        $this->assertDatabaseHas('uploaders', [
135
            'extras' => json_encode(['upload' => null, 'upload_multiple' => ['avatar2.jpg', 'avatar3.jpg']]),
136
        ]);
137
138
        $files = Storage::disk('uploaders')->allFiles();
139
140
        $this->assertEquals(2, count($files));
141
142
        $this->assertFalse(Storage::disk('uploaders')->exists('avatar1.jpg'));
143
    }
144
145
    public function test_it_can_delete_uploaded_files()
146
    {
147
        self::initUploaderWithFiles();
148
149
        $response = $this->delete($this->testBaseUrl.'/1');
150
        
151
        $response->assertStatus(200);
152
153
        $this->assertDatabaseCount('uploaders', 0);
154
155
        $files = Storage::disk('uploaders')->allFiles();
156
157
        $this->assertEquals(0, count($files));
158
    }
159
160
    public function test_it_keeps_previous_values_unchaged_when_not_deleted()
161
    {
162
        self::initUploaderWithFiles();
163
164
        $response = $this->put($this->testBaseUrl.'/1', [
165
            'upload_multiple' => [null],
166
            'id' => 1,
167
        ]);
168
169
        $response->assertStatus(302);
170
171
        $response->assertRedirect($this->testBaseUrl);
172
173
        $this->assertDatabaseCount('uploaders', 1);
174
175
        $this->assertDatabaseHas('uploaders', [
176
            'extras' => json_encode(['upload_multiple' => ['avatar2.jpg',  'avatar3.jpg'], 'upload' => 'avatar1.jpg']),
177
        ]);
178
179
        $files = Storage::disk('uploaders')->allFiles();
180
181
        $this->assertEquals(3, count($files));
182
183
        $this->assertTrue(Storage::disk('uploaders')->exists('avatar1.jpg'));
184
        $this->assertTrue(Storage::disk('uploaders')->exists('avatar2.jpg'));
185
        $this->assertTrue(Storage::disk('uploaders')->exists('avatar3.jpg'));
186
    }
187
188
    public function test_upload_multiple_can_delete_uploaded_files_and_add_at_the_same_time()
189
    {
190
        self::initUploaderWithFiles();
191
192
        $response = $this->put($this->testBaseUrl.'/1', [
193
            'upload_multiple' => $this->getUploadedFiles(['avatar4.jpg',  'avatar5.jpg']),
194
            'clear_upload_multiple' => ['avatar2.jpg'],
195
            'id' => 1,
196
        ]);
197
198
        $response->assertStatus(302);
199
200
        $response->assertRedirect($this->testBaseUrl);
201
202
        $this->assertDatabaseCount('uploaders', 1);
203
204
        $this->assertDatabaseHas('uploaders', [
205
            'extras' => json_encode(['upload_multiple' => ['avatar3.jpg', 'avatar4.jpg',  'avatar5.jpg'], 'upload' => 'avatar1.jpg']),
206
        ]);
207
208
        $files = Storage::disk('uploaders')->allFiles();
209
210
        $this->assertEquals(4, count($files));
211
212
        $this->assertTrue(Storage::disk('uploaders')->exists('avatar1.jpg'));
213
        $this->assertTrue(Storage::disk('uploaders')->exists('avatar3.jpg'));
214
        $this->assertTrue(Storage::disk('uploaders')->exists('avatar4.jpg'));
215
        $this->assertTrue(Storage::disk('uploaders')->exists('avatar5.jpg'));
216
    }
217
218
    protected static function initUploaderWithFiles()
219
    {
220
        UploadedFile::fake()->image('avatar1.jpg')->storeAs('', 'avatar1.jpg', ['disk' => 'uploaders']);
221
        UploadedFile::fake()->image('avatar2.jpg')->storeAs('', 'avatar2.jpg', ['disk' => 'uploaders']);
222
        UploadedFile::fake()->image('avatar3.jpg')->storeAs('', 'avatar3.jpg', ['disk' => 'uploaders']);
223
224
        FakeUploader::create([
225
            'extras' => ['upload' => 'avatar1.jpg', 'upload_multiple' => ['avatar2.jpg',  'avatar3.jpg']],
226
        ]);
227
    }
228
229
    protected static function initUploader()
230
    {
231
        FakeUploader::create([
232
            'extras' => ['upload' => null, 'upload_multiple' => null],
233
        ]);
234
    }
235
}
236