feat(refund): add support for event date suspension in cart invalidation process

This commit is contained in:
2026-09-17 11:42:33 -03:00
parent df6892c662
commit 830f65c402
5 changed files with 50 additions and 18 deletions

View File

@@ -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');
}