|
1 | 1 | <?php |
2 | 2 |
|
3 | 3 | use Illuminate\Support\Facades\Gate; |
| 4 | +use Illuminate\Support\Facades\URL; |
4 | 5 | use Opcodes\LogViewer\Facades\LogViewer; |
5 | 6 | use Opcodes\LogViewer\LogFolder; |
6 | 7 |
|
7 | 8 | use function Pest\Laravel\get; |
8 | 9 |
|
| 10 | +function assertCanDownloadFolder(string $folderName, string $expectedFileName): void |
| 11 | +{ |
| 12 | + $response = get(route('log-viewer.folders.request-download', $folderName)); |
| 13 | + |
| 14 | + $response->assertOk(); |
| 15 | + expect(URL::isValidUrl($response->json('url')))->toBeTrue(); |
| 16 | + |
| 17 | + get($response->json('url')) |
| 18 | + ->assertOk() |
| 19 | + ->assertDownload($expectedFileName); |
| 20 | +} |
| 21 | + |
| 22 | +function assertCannotDownloadFolder(string $folderName): void |
| 23 | +{ |
| 24 | + get(route('log-viewer.folders.request-download', $folderName)) |
| 25 | + ->assertForbidden(); |
| 26 | +} |
| 27 | + |
9 | 28 | test('can download every folder by default', function () { |
10 | 29 | generateLogFiles([$fileName = 'laravel.log']); |
11 | 30 | $folder = LogViewer::getFolder(''); |
12 | 31 |
|
13 | | - get(route('log-viewer.folders.download', $folder->identifier)) |
14 | | - ->assertOk() |
15 | | - ->assertDownload('root.zip'); |
| 32 | + assertCanDownloadFolder($folder->identifier, 'root.zip'); |
16 | 33 | }); |
17 | 34 |
|
18 | 35 | test('cannot download a folder that\'s not found', function () { |
19 | | - get(route('log-viewer.folders.download', 'notfound')) |
| 36 | + get(route('log-viewer.folders.request-download', 'notfound')) |
20 | 37 | ->assertNotFound(); |
21 | 38 | }); |
22 | 39 |
|
|
25 | 42 | $folder = LogViewer::getFolder(''); |
26 | 43 | Gate::define('downloadLogFolder', fn (mixed $user) => false); |
27 | 44 |
|
28 | | - get(route('log-viewer.folders.download', $folder->identifier)) |
29 | | - ->assertForbidden(); |
| 45 | + assertCannotDownloadFolder($folder->identifier); |
30 | 46 |
|
31 | 47 | // now let's allow access again |
32 | 48 | Gate::define('downloadLogFolder', fn (mixed $user) => true); |
33 | 49 |
|
34 | | - get(route('log-viewer.folders.download', $folder->identifier)) |
35 | | - ->assertOk() |
36 | | - ->assertDownload('root.zip'); |
| 50 | + assertCanDownloadFolder($folder->identifier, 'root.zip'); |
37 | 51 | }); |
38 | 52 |
|
39 | 53 | test('"downloadLogFolder" gate is supplied with a log folder object', function () { |
|
49 | 63 | return true; |
50 | 64 | }); |
51 | 65 |
|
52 | | - get(route('log-viewer.folders.download', $expectedFolder->identifier)) |
53 | | - ->assertOk() |
54 | | - ->assertDownload('root.zip'); |
| 66 | + assertCanDownloadFolder($expectedFolder->identifier, 'root.zip'); |
55 | 67 |
|
56 | 68 | expect($gateChecked)->toBeTrue(); |
57 | 69 | }); |
0 commit comments