fix: enforce submit-time immutability, scope booking cache per user

This commit is contained in:
Björn Fromme
2026-03-16 11:20:05 +01:00
parent d05524222b
commit 03cb74370b
6 changed files with 342 additions and 282 deletions
@@ -84,7 +84,6 @@ class BookingEditDraftServiceMutabilityTest extends TestCase
$this->assertSame([], $participant->rentals);
$this->assertNull($participant->skiPass);
$this->assertNull($participant->rentalInsurance);
$this->assertTrue($this->service->hadImmutableSkips());
}
public function testDraftAppliesAdditionalServicesWhenMutable(): void
@@ -127,7 +126,6 @@ class BookingEditDraftServiceMutabilityTest extends TestCase
$skiPass = $participant->skiPass;
$this->assertNotNull($skiPass);
$this->assertSame(99, $skiPass?->id);
$this->assertFalse($this->service->hadImmutableSkips());
}
// --- Transportation Mutability ---
@@ -171,7 +169,6 @@ class BookingEditDraftServiceMutabilityTest extends TestCase
$this->assertSame($originalOutbound, $participant->transportationOutbound);
$this->assertSame($originalInbound, $participant->transportationInbound);
$this->assertFalse($participant->parking);
$this->assertTrue($this->service->hadImmutableSkips());
}
public function testDraftAppliesTransportationWhenMutable(): void
@@ -242,7 +239,6 @@ class BookingEditDraftServiceMutabilityTest extends TestCase
$this->assertSame($originalPickup, $participant->pickup);
$this->assertNull($participant->dropOff);
$this->assertFalse($participant->differentDropOff);
$this->assertTrue($this->service->hadImmutableSkips());
}
public function testDraftAppliesPickupsWhenMutable(): void
@@ -353,7 +349,6 @@ class BookingEditDraftServiceMutabilityTest extends TestCase
// Pickups: mutable → draft applied
$this->assertSame($draftPickup, $participant->pickup);
$this->assertTrue($this->service->hadImmutableSkips());
}
// --- Personal data draft restore respects edit mutability rules ---
@@ -384,7 +379,6 @@ class BookingEditDraftServiceMutabilityTest extends TestCase
$this->service->applyDraftToDto($draft, $dto, $travel);
$this->assertSame('Original', $participant->firstName);
$this->assertTrue($this->service->hadImmutableSkips());
}
public function testDraftAppliesPersonalDataForMutableNonFirstParticipant(): void
@@ -412,45 +406,6 @@ class BookingEditDraftServiceMutabilityTest extends TestCase
$this->service->applyDraftToDto($draft, $dto, $travel);
$this->assertSame('Updated', $mutableParticipant->firstName);
$this->assertFalse($this->service->hadImmutableSkips());
}
public function testDraftDoesNotFlagImmutableSkipWhenImmutableServiceStateMatchesDraft(): void
{
$originalService = $this->createService(10, 'Original');
$participant = new ParticipantDto();
$participant->additionalServices = [$originalService];
$participant->courses = [];
$participant->board = [];
$participant->rentals = [];
$participant->skiPass = null;
$participant->rentalInsurance = null;
$travel = $this->createTravel(
additionalServicesMutable: false,
additionalServices: [10 => $originalService],
);
$dto = $this->createBookingDto($travel, [$participant]);
$draft = $this->createDraft([
'participants' => [
0 => [
'services' => [
'additionalServices' => [10],
'courses' => [],
'board' => [],
'rentals' => [],
'skiPass' => null,
'rentalInsurance' => null,
],
],
],
]);
$this->service->applyDraftToDto($draft, $dto, $travel);
$this->assertFalse($this->service->hadImmutableSkips());
}
// --- Helpers ---