Add feature tests for Doctor-related functionalities
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Feature\Http\Admin;
|
||||
|
||||
use App\Models\Medium;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Illuminate\Http\UploadedFile;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Inertia\Testing\AssertableInertia as Assert;
|
||||
use Tests\Concerns\InteractsWithAdmin;
|
||||
use Tests\TestCase;
|
||||
|
||||
class MediumControllerTest extends TestCase
|
||||
{
|
||||
use InteractsWithAdmin, RefreshDatabase;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
Storage::fake('public');
|
||||
Storage::fake('private');
|
||||
}
|
||||
|
||||
public function test_guest_is_redirected(): void
|
||||
{
|
||||
$this->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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user