35 lines
1.2 KiB
PHP
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);
|
|
});
|