merger = new BookingEditDraftMerger(); } public function testDraftDoesNotUnassignRoomWhenDraftValueIsNull(): void { $participant = new ParticipantDto(); $participant->mutable = true; $participant->assignedRoomId = 74; $travel = $this->createTravel([74 => $this->createRoom(74, 'Bett im Mehrbettzimmer')]); $this->apply($travel, $participant, ['assignedRoomId' => null]); $this->assertSame(74, $participant->assignedRoomId); } public function testDraftAppliesRoomThatResolvesAgainstTravel(): void { $participant = new ParticipantDto(); $participant->mutable = true; $participant->assignedRoomId = 74; $travel = $this->createTravel([ 74 => $this->createRoom(74, 'Bett im Mehrbettzimmer'), 75 => $this->createRoom(75, 'Doppelzimmer'), ]); $this->apply($travel, $participant, ['assignedRoomId' => 75]); $this->assertSame(75, $participant->assignedRoomId); } public function testDraftSkipsRoomThatIsUnknownToTravel(): void { $participant = new ParticipantDto(); $participant->mutable = true; $participant->assignedRoomId = 74; $travel = $this->createTravel([74 => $this->createRoom(74, 'Bett im Mehrbettzimmer')]); $this->apply($travel, $participant, ['assignedRoomId' => 999]); $this->assertSame(74, $participant->assignedRoomId); } public function testDraftClearsRoomRemarks(): void { $participant = new ParticipantDto(); $participant->mutable = true; $participant->assignedRoomId = 74; $participant->remarksRoom = 'Bitte mit Lisa'; $travel = $this->createTravel([74 => $this->createRoom(74, 'Bett im Mehrbettzimmer')]); $this->apply($travel, $participant, ['assignedRoomId' => null, 'remarksRoom' => null]); $this->assertNull($participant->remarksRoom); $this->assertSame(74, $participant->assignedRoomId); } /** @param array $roomAssignment */ private function apply(Travel $travel, ParticipantDto $participant, array $roomAssignment): void { $dto = new BookingDto($travel, 1); $dto->participants = [1 => $participant]; $this->merger->apply($dto, 1, $participant, ['roomAssignment' => $roomAssignment], $travel); } /** @param array $rooms */ private function createTravel(array $rooms): Travel { $travel = new Travel(); $travel->rooms = $rooms; return $travel; } private function createRoom(int $id, string $label): Room { $room = new Room(); $room->id = $id; $room->label = $label; return $room; } }