createSkiPass(31, autoBook: true, mandatory: false); $bookingDto = $this->createBookingDtoWithSkiPass($autoBookSkiPass); $participant = $bookingDto->participants[0]; $participant->skiPass = $autoBookSkiPass; $handler = new ParticipantSkiPassFieldHandler(); $handler->processField([], $bookingDto, 0); $this->assertSame([31], $participant->autoBookOptOutSkiPassIds); $this->assertNull($participant->skiPass); } public function testDeselectMandatoryAutoBookSkiPassDoesNotAddOptOutId(): void { $mandatoryAutoBookSkiPass = $this->createSkiPass(32, autoBook: true, mandatory: true); $bookingDto = $this->createBookingDtoWithSkiPass($mandatoryAutoBookSkiPass); $participant = $bookingDto->participants[0]; $participant->skiPass = $mandatoryAutoBookSkiPass; $handler = new ParticipantSkiPassFieldHandler(); $handler->processField([], $bookingDto, 0); $this->assertSame([], $participant->autoBookOptOutSkiPassIds); } public function testReselectAutoBookSkiPassRemovesOptOutId(): void { $autoBookSkiPass = $this->createSkiPass(33, autoBook: true, mandatory: false); $bookingDto = $this->createBookingDtoWithSkiPass($autoBookSkiPass); $participant = $bookingDto->participants[0]; $participant->autoBookOptOutSkiPassIds = [33]; $handler = new ParticipantSkiPassFieldHandler(); $handler->processField(['skiPass' => '33'], $bookingDto, 0); $this->assertSame([], $participant->autoBookOptOutSkiPassIds); $this->assertNotNull($participant->skiPass); $this->assertSame(33, $participant->skiPass?->id); } private function createBookingDtoWithSkiPass(Service $skiPass): BookingDto { $travel = new Travel(); $travel->dateFrom = new \DateTimeImmutable('+30 days'); $travel->dateTo = new \DateTimeImmutable('+37 days'); $travel->additionalServices = [$skiPass->id => $skiPass]; $bookingDto = new BookingDto($travel, 1); $participant = new ParticipantDto(); $participant->index = 0; $participant->dateOfBirth = $travel->dateFrom->modify('-25 years'); $bookingDto->participants[0] = $participant; return $bookingDto; } private function createSkiPass(int $id, bool $autoBook, bool $mandatory): Service { $service = new Service(); $service->id = $id; $service->subType = Constants::TOKEN_SKI_PASS; $service->label = 'Ski Pass'; $service->autoBook = $autoBook; $service->mandatory = $mandatory; $service->dateFrom = new \DateTimeImmutable('+30 days'); $service->dateTo = new \DateTimeImmutable('+36 days'); return $service; } }