Files
radicall/tests/Feature/Models/MediumTest.php
T

77 lines
2.7 KiB
PHP

<?php
namespace Tests\Feature\Models;
use App\Enums\MediaDiskEnum;
use App\Models\Medium;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Storage;
use Tests\TestCase;
class MediumTest extends TestCase
{
use RefreshDatabase;
protected function setUp(): void
{
parent::setUp();
Storage::fake('public');
Storage::fake('private');
}
public function test_is_public_and_is_private_reflect_disk(): void
{
$public = Medium::factory()->public()->create();
$private = Medium::factory()->private()->create();
$this->assertTrue($public->isPublic());
$this->assertFalse($public->isPrivate());
$this->assertTrue($private->isPrivate());
$this->assertFalse($private->isPublic());
}
public function test_get_storage_disk_matches_medium_disk(): void
{
$private = Medium::factory()->private()->create(['path' => 'a.txt']);
Storage::disk('private')->put('a.txt', 'x');
$this->assertTrue($private->getStorageDisk()->exists('a.txt'));
$this->assertFalse(Storage::disk('public')->exists('a.txt'));
}
public function test_full_url_returns_absolute_path_on_matching_disk(): void
{
$public = Medium::factory()->public()->create(['path' => 'files/a.png']);
$private = Medium::factory()->private()->create(['path' => 'files/b.png']);
$this->assertSame(Storage::disk('public')->path('files/a.png'), $public->full_url);
$this->assertSame(Storage::disk('private')->path('files/b.png'), $private->full_url);
}
public function test_exists_get_contents_and_delete_file(): void
{
$medium = Medium::factory()->private()->create(['path' => 'files/c.txt']);
Storage::disk('private')->put('files/c.txt', 'hello');
$this->assertTrue($medium->exists());
$this->assertSame('hello', $medium->getContents());
$this->assertTrue($medium->deleteFile());
$this->assertFalse($medium->exists());
$this->assertFalse($medium->deleteFile());
}
public function test_human_size_formats_bytes_into_units(): void
{
$this->assertSame('512 B', Medium::factory()->make(['size' => 512])->human_size);
$this->assertSame('1 KB', Medium::factory()->make(['size' => 1025])->human_size);
$this->assertSame('1.5 MB', Medium::factory()->make(['size' => 1572864])->human_size);
$this->assertSame('2 GB', Medium::factory()->make(['size' => 2147483648])->human_size);
}
public function test_disk_is_cast_to_enum(): void
{
$this->assertSame(MediaDiskEnum::Private, Medium::factory()->private()->create()->fresh()->disk);
}
}