Files
myep/tests/Service/BookingEditSubmitGuardServiceTest.php
T

109 lines
3.8 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Tests\Service;
use App\BusProNet\DataProcessor\BookingDataProcessor;
use App\BusProNet\Model\Booking;
use App\BusProNet\Model\Pickup;
use App\BusProNet\Model\Service;
use App\BusProNet\Model\Travel;
use App\Form\Model\BookingDto;
use App\Form\Model\ParticipantDto;
use App\Service\BookingEditSubmitGuardService;
use PHPUnit\Framework\TestCase;
class BookingEditSubmitGuardServiceTest extends TestCase
{
public function testReconcileImmutableCategoriesRestoresLockedServiceData(): void
{
$travel = new Travel();
$travel->additionalServicesMutable = false;
$travel->transportationServicesMutable = false;
$travel->pickupsMutable = false;
$workingParticipant = new ParticipantDto();
$workingParticipant->index = 0;
$workingParticipant->additionalServices = [$this->createService(99)];
$workingParticipant->transportationOutbound = $this->createService(88);
$workingParticipant->pickup = $this->createPickup(77);
$workingDto = new BookingDto($travel, 1);
$workingDto->participants = [$workingParticipant];
$baselineParticipant = new ParticipantDto();
$baselineParticipant->index = 0;
$baselineParticipant->additionalServices = [$this->createService(10)];
$baselineParticipant->transportationOutbound = $this->createService(20);
$baselineParticipant->pickup = $this->createPickup(30);
$baselineDto = new BookingDto($travel, 1);
$baselineDto->participants = [$baselineParticipant];
$processor = $this->createMock(BookingDataProcessor::class);
$processor->expects($this->once())
->method('createBookingDtoFromBooking')
->willReturn($baselineDto);
$service = new BookingEditSubmitGuardService($processor);
$changed = $service->reconcileImmutableCategories($workingDto, new Booking());
$this->assertTrue($changed);
$this->assertSame([10], array_map(static fn (Service $s) => $s->id, $workingParticipant->additionalServices));
$this->assertSame(20, $workingParticipant->transportationOutbound?->id);
$this->assertSame(30, $workingParticipant->pickup?->id);
}
public function testReconcileImmutableCategoriesDoesNotChangeMutableCategories(): void
{
$travel = new Travel();
$travel->additionalServicesMutable = true;
$travel->transportationServicesMutable = true;
$travel->pickupsMutable = true;
$workingParticipant = new ParticipantDto();
$workingParticipant->index = 0;
$workingParticipant->additionalServices = [$this->createService(99)];
$workingDto = new BookingDto($travel, 1);
$workingDto->participants = [$workingParticipant];
$baselineParticipant = new ParticipantDto();
$baselineParticipant->index = 0;
$baselineParticipant->additionalServices = [$this->createService(10)];
$baselineDto = new BookingDto($travel, 1);
$baselineDto->participants = [$baselineParticipant];
$processor = $this->createMock(BookingDataProcessor::class);
$processor->expects($this->once())
->method('createBookingDtoFromBooking')
->willReturn($baselineDto);
$service = new BookingEditSubmitGuardService($processor);
$changed = $service->reconcileImmutableCategories($workingDto, new Booking());
$this->assertFalse($changed);
$this->assertSame([99], array_map(static fn (Service $s) => $s->id, $workingParticipant->additionalServices));
}
private function createService(int $id): Service
{
$service = new Service();
$service->id = $id;
return $service;
}
private function createPickup(int $id): Pickup
{
$pickup = new Pickup();
$pickup->id = $id;
return $pickup;
}
}