dateFrom = new \DateTimeImmutable('2025-06-01'); $travel->dateTo = new \DateTimeImmutable('2025-06-08'); $bookingDto = new BookingDto($travel, 1); $this->assertInstanceOf(BookingDto::class, $bookingDto); $this->assertSame($travel, $bookingDto->travel); $this->assertSame(BookingDto::MODE_CREATE, $bookingDto->getMode()); } public function testUnserializeHandlesIntTravelId(): void { $travel = new Travel(); $travel->id = 42; $travel->dateFrom = new \DateTimeImmutable('2025-06-01'); $travel->dateTo = new \DateTimeImmutable('2025-06-08'); $dto = new BookingDto($travel, 1); $serialized = serialize($dto); $restored = unserialize($serialized); $this->assertInstanceOf(BookingDto::class, $restored); $this->assertSame(42, $restored->travel->id); } public function testUnserializeHandlesLegacyTravelObject(): void { $travel = new Travel(); $travel->id = 42; $travel->dateFrom = new \DateTimeImmutable('2025-06-01'); $travel->dateTo = new \DateTimeImmutable('2025-06-08'); // Simulate old session format where 'travel' is a full Travel object $data = [ 'travel' => $travel, 'hotelId' => 1, ]; $dto = new BookingDto(new Travel(), 1); $dto->__unserialize($data); $this->assertSame($travel, $dto->travel); $this->assertSame(42, $dto->travel->id); } public function testUnserializeNormalizesLegacyBodyDimensionsOnParticipants(): void { $travel = new Travel(); $travel->id = 42; $travel->dateFrom = new \DateTimeImmutable('2025-06-01'); $travel->dateTo = new \DateTimeImmutable('2025-06-08'); $participant = new ParticipantDto(); $participant->height = '149-157'; $participant->weight = '75'; $participant->shoeSize = '043'; $dto = new BookingDto($travel, 1); $dto->participants = [$participant]; $restored = unserialize(serialize($dto)); $this->assertInstanceOf(BookingDto::class, $restored); $this->assertNull($restored->participants[0]->height); $this->assertSame('75', $restored->participants[0]->weight); $this->assertSame('43', $restored->participants[0]->shoeSize); } }