feat(refund): add support for event date suspension in cart invalidation process
This commit is contained in:
@@ -26,6 +26,7 @@ use Illuminate\Support\Facades\Event;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Laravel\Sanctum\Sanctum;
|
||||
use PHPUnit\Framework\Attributes\DataProvider;
|
||||
use Tests\TestCase;
|
||||
|
||||
class AdminAppEventControllerTest extends TestCase
|
||||
@@ -422,9 +423,18 @@ class AdminAppEventControllerTest extends TestCase
|
||||
);
|
||||
}
|
||||
|
||||
public function test_rescheduling_invalidates_reserved_carts_before_replacing_variants(): void
|
||||
public static function cartInvalidatingDateChanges(): array
|
||||
{
|
||||
Event::fake([EventDateRescheduled::class]);
|
||||
return [
|
||||
'reschedule' => ['reschedule', ['date' => '2027-10-20'], 'event_date_rescheduled'],
|
||||
'suspend' => ['suspend', [], 'event_date_suspended'],
|
||||
];
|
||||
}
|
||||
|
||||
#[DataProvider('cartInvalidatingDateChanges')]
|
||||
public function test_date_changes_invalidate_reserved_carts(string $action, array $payload, string $reason): void
|
||||
{
|
||||
Event::fake([EventDateRescheduled::class, EventDateSuspended::class]);
|
||||
$tenant = $this->createActiveEvent($this->createTenant('acme'), 'Festival Acme');
|
||||
$source = $tenant->eventDates()->create([
|
||||
'date' => '2027-10-09', 'time_start' => '09:00', 'time_end' => '18:30',
|
||||
@@ -449,13 +459,15 @@ class AdminAppEventControllerTest extends TestCase
|
||||
]);
|
||||
Sanctum::actingAs($admin);
|
||||
|
||||
$this->postJson("/api/v1/adminapp/tenant/event-dates/{$source->id}/reschedule", [
|
||||
'date' => '2027-10-20',
|
||||
])->assertOk();
|
||||
$this->postJson("/api/v1/adminapp/tenant/event-dates/{$source->id}/{$action}", $payload)->assertOk();
|
||||
|
||||
$this->assertSame(Cart::STATUS_EXPIRED, $cart->fresh()->status);
|
||||
$this->assertSame(StockReservation::STATUS_RELEASED, $reservation->fresh()->status);
|
||||
$this->assertSame(0, $variant->fresh()->replacement->inventory->reserved_stock);
|
||||
$this->assertSame($reason, $reservation->fresh()->release_reason);
|
||||
$this->assertSame(0, $variant->fresh()->inventory->reserved_stock);
|
||||
if ($action === 'reschedule') {
|
||||
$this->assertSame(0, $variant->fresh()->replacement->inventory->reserved_stock);
|
||||
}
|
||||
$this->getJson('/api/tenants/acme/cart')->assertOk()->assertJsonCount(0, 'data.items');
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user