parfum/tests/Feature/Livewire/Studio/Loyalty/Voucher/EditTest.php

62 lines
2.0 KiB
PHP

<?php
use App\Enums\IsActive;
use App\Livewire\Studio\Loyalty\Voucher\Edit;
use App\Livewire\Studio\Loyalty\Voucher\Index;
use App\Models\Facility;
use App\Models\OpeningHour;
use App\Models\Outlet;
use App\Models\Voucher;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Livewire\Livewire;
uses(RefreshDatabase::class);
it('renders successfully', function () {
$voucher = Voucher::factory()->active()->create();
Livewire::test(Edit::class, ['voucher' => $voucher])
->assertViewIs('livewire.studio.loyalty.voucher.form')
->assertViewHas('pageTitle', 'Ubah Voucher');
});
it('can update a voucher', function () {
$voucher = Voucher::factory()->active()->create();
$data = Voucher::factory()
->state(fn () => [
'is_active' => fake()->randomElement(IsActive::cases()),
])
->raw();
$outletIds = Outlet::factory()
->count(4)
->has(OpeningHour::factory()->count(7))
->has(Facility::factory()->count(5))
->create();
Livewire::test(Edit::class, ['voucher' => $voucher])
->set('form.name', $data['name'])
->set('form.code', $data['code'])
->set('form.min_purchase', $data['min_purchase'])
->set('form.quota', $data['quota'])
->set('form.limit_per_user', $data['limit_per_user'])
->set('form.start_date', $data['start_date'])
->set('form.end_date', $data['end_date'])
->set('form.type', $data['type'])
->set('form.discount_amount', $data['discount_amount'])
->set('form.max_discount', $data['max_discount'])
->set('form.is_active', $data['is_active']->value)
->set('form.outlet_ids', $outletIds->pluck('id')->toArray())
->call('save')
->assertHasNoErrors()
->assertDispatched('refreshDatatable')
->assertRedirect(Index::class);
$this->assertDatabaseHas('vouchers', [
'id' => $voucher->id,
'name' => $data['name'],
'code' => $data['code'],
]);
});