ramadanproject/tests/Feature/ReserveSelectionTest.php
Ahmed Darrazi 45a147253c
Some checks failed
tests / ci (push) Failing after 6m13s
linter / quality (pull_request) Failing after 58s
linter / quality (push) Failing after 1m19s
tests / ci (pull_request) Failing after 5m28s
feat(public-grid): add QA, quickstart, decision docs; scheduler docs; ignore files; tasks updates; run pint
2026-01-03 04:56:12 +01:00

35 lines
1.2 KiB
PHP

<?php
use App\Models\MasterImage;
use App\Models\Reservation;
beforeEach(function () {
Reservation::query()->delete();
});
it('creates a reservation when area is free', function () {
MasterImage::create(['path' => 'master.png', 'version' => 1]);
$payload = ['x' => 10, 'y' => 10, 'w' => 20, 'h' => 20, 'offsetX' => 0, 'offsetY' => 0];
$response = $this->postJson('/api/grid/reserve', $payload);
$response->assertSuccessful();
$data = $response->json();
expect($data['reservation_id'])->toBeInt();
expect(Reservation::count())->toBe(1);
});
it('returns 409 when overlapping reservation exists', function () {
MasterImage::create(['path' => 'master.png', 'version' => 1]);
// Existing reservation occupies cells 1..3 x 1..3
Reservation::create(['x' => 1, 'y' => 1, 'w' => 3, 'h' => 3, 'status' => 'held', 'reserved_until' => now()->addMinutes(5)]);
// Attempt overlapping reservation (pixel coords mapping to cell 2,2..)
// cellSize default 20 -> cell 2 starts at pixel 40
$payload = ['x' => 40, 'y' => 40, 'w' => 40, 'h' => 40, 'offsetX' => 0, 'offsetY' => 0];
$response = $this->postJson('/api/grid/reserve', $payload);
$response->assertStatus(409);
});