get('/admin/medium')->assertRedirect(route('login')); } public function test_admin_without_permission_is_forbidden(): void { $admin = $this->adminWithoutPermissions(); $medium = Medium::factory()->create(); $this->actingAs($admin)->get('/admin/medium')->assertForbidden(); $this->actingAs($admin)->post('/admin/medium')->assertForbidden(); $this->actingAs($admin)->delete("/admin/medium/{$medium->id}")->assertForbidden(); $this->actingAs($admin)->get('/admin/get-medium')->assertForbidden(); $this->actingAs($admin)->get("/admin/medium/{$medium->id}/download")->assertForbidden(); $this->actingAs($admin)->get("/admin/medium/{$medium->id}/serve")->assertForbidden(); } public function test_index_renders_paginated_media(): void { Medium::factory()->count(2)->create(); $this->actingAs($this->adminWithAllPermissions())->get('/admin/medium')->assertOk()->assertInertia(fn (Assert $page) => $page->component('Medium')->has('medium.data', 2)); } public function test_store_uploads_public_file_into_media_directory(): void { $this->actingAs($this->adminWithAllPermissions())->postJson('/admin/medium', ['file' => UploadedFile::fake()->image('pic.png')]) ->assertOk() ->assertJsonPath('disk', 'public'); $medium = Medium::first(); $this->assertStringStartsWith('media/', $medium->path); Storage::disk('public')->assertExists($medium->path); } public function test_store_validates_file(): void { $this->actingAs($this->adminWithAllPermissions())->postJson('/admin/medium', [])->assertUnprocessable()->assertJsonValidationErrors('file'); } public function test_destroy_removes_file_and_record(): void { $medium = Medium::factory()->public()->create(['path' => 'media/a.png']); Storage::disk('public')->put('media/a.png', 'x'); $this->actingAs($this->adminWithAllPermissions())->from('/admin/medium')->delete("/admin/medium/{$medium->id}")->assertRedirect('/admin/medium')->assertSessionHas('success'); Storage::disk('public')->assertMissing('media/a.png'); $this->assertDatabaseMissing('media', ['id' => $medium->id]); } public function test_get_medium_returns_paginated_json(): void { Medium::factory()->count(3)->create(); $this->actingAs($this->adminWithAllPermissions())->getJson('/admin/get-medium')->assertOk()->assertJsonCount(3, 'data'); } public function test_download_and_serve_private_file(): void { $medium = Medium::factory()->private()->create(['path' => 'documents/f.txt', 'filename' => 'f.txt', 'mime_type' => 'text/plain']); Storage::disk('private')->put('documents/f.txt', 'body'); $admin = $this->adminWithAllPermissions(); $this->actingAs($admin)->get("/admin/medium/{$medium->id}/download")->assertOk()->assertDownload('f.txt'); $this->actingAs($admin)->get("/admin/medium/{$medium->id}/serve")->assertOk()->assertHeader('Content-Type', 'text/plain; charset=UTF-8')->assertSee('body', false); } public function test_download_public_file_is_not_found(): void { $medium = Medium::factory()->public()->create(); $this->actingAs($this->adminWithAllPermissions())->get("/admin/medium/{$medium->id}/download")->assertNotFound(); } }