parfum/tests/Feature/Livewire/Studio/Master/Outlet/EditTest.php
Yoga Pangestu 62ff10c411 fix(test): image outlet test dan voucher test
-create opening hour factory
-create facility factory
2025-10-01 18:20:54 +07:00

94 lines
3.2 KiB
PHP

<?php
use App\Enums\Day;
use App\Livewire\Studio\Master\Outlet\Edit;
use App\Livewire\Studio\Master\Outlet\Index;
use App\Models\Facility;
use App\Models\Outlet;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use Livewire\Livewire;
uses(RefreshDatabase::class);
it('renders successfully', function () {
$outlet = Outlet::factory()->operational()->create();
Livewire::test(Edit::class, ['outlet' => $outlet])
->assertViewIs('livewire.studio.master.outlet.form')
->assertViewHas('pageTitle', 'Ubah Outlet');
});
it('can update an outlet', function () {
$outlet = Outlet::factory()->operational()->create();
$facilities = Facility::factory()->count(5)->raw();
$makeLivewireFile = function ($name) {
$file = UploadedFile::fake()->image($name, 100, 100);
$tmpId = Str::random(32);
$filename = $tmpId.'-'.base64_encode($file->getClientOriginalName()).'.'.$file->getClientOriginalExtension();
$path = "livewire-tmp/{$filename}";
Storage::disk('local')->putFileAs('livewire-tmp', $file, $filename);
return [
'tmpFilename' => $filename,
'name' => $file->getClientOriginalName(),
'extension' => $file->getClientOriginalExtension(),
'path' => storage_path("app/private/{$path}"),
'temporaryUrl' => url("livewire/preview-file/{$filename}"),
'size' => $file->getSize(),
];
};
$featuredImage = $makeLivewireFile('featured.jpg');
$images = [
$makeLivewireFile('image1.jpg'),
$makeLivewireFile('image2.png'),
];
$data = array_merge(
Outlet::factory()->operational()->raw(),
[
'opening_hours' => collect(Day::cases())
->mapWithKeys(fn ($day) => [
$day->value => [
'day' => $day->value,
'open_time' => fake()->time('H:i'),
'close_time' => fake()->time('H:i'),
],
])
->toArray(),
'facilities' => collect($facilities)->pluck('name')->toArray(),
'featured_image' => [$featuredImage],
'images' => $images,
]
);
Livewire::test(Edit::class, ['outlet' => $outlet])
->set('form.name', $data['name'])
->set('form.phone_number', $data['phone_number'])
->set('form.address', $data['address'])
->set('form.landmark', $data['landmark'])
->set('form.maps_url', $data['maps_url'])
->set('form.opened_date', $data['opened_date'])
->set('form.status', $data['status']->value)
->set('form.opening_hours', $data['opening_hours'])
->set('form.facilities', $data['facilities'])
->set('form.featured_image', $data['featured_image'])
->set('form.images', $data['images'])
->call('save')
->assertHasNoErrors()
->assertDispatched('refreshDatatable')
->assertRedirect(Index::class);
$this->assertDatabaseHas('outlets', [
'id' => $outlet->id,
'name' => $data['name'],
'phone_number' => $data['phone_number'],
]);
});