89 lines
3.2 KiB
PHP
89 lines
3.2 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Tests\Form\Service;
|
|
|
|
use App\BusProNet\Constants;
|
|
use App\BusProNet\Model\Service;
|
|
use App\BusProNet\Model\Travel;
|
|
use App\Form\Model\BookingDto;
|
|
use App\Form\Model\ParticipantDto;
|
|
use App\Form\Service\ParticipantSkiPassFieldHandler;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class ParticipantSkiPassFieldHandlerTest extends TestCase
|
|
{
|
|
public function testDeselectAutoBookSkiPassAddsOptOutId(): void
|
|
{
|
|
$autoBookSkiPass = $this->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;
|
|
}
|
|
}
|