wip: service descriptions and car license plate field
This commit is contained in:
@@ -0,0 +1,203 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Tests\Form\Service;
|
||||
|
||||
use App\BusProNet\Model\Travel;
|
||||
use App\Form\Model\BookingCreateDto;
|
||||
use App\Form\Model\ParticipantDto;
|
||||
use App\Form\Service\ParticipantLicensePlateFieldHandler;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class ParticipantLicensePlateFieldHandlerTest extends TestCase
|
||||
{
|
||||
private ParticipantLicensePlateFieldHandler $handler;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
$this->handler = new ParticipantLicensePlateFieldHandler();
|
||||
}
|
||||
|
||||
public function testGetFieldName(): void
|
||||
{
|
||||
$this->assertSame('licensePlate', $this->handler->getFieldName());
|
||||
}
|
||||
|
||||
public function testGetDependencies(): void
|
||||
{
|
||||
$this->assertSame(['parking'], $this->handler->getDependencies());
|
||||
}
|
||||
|
||||
public function testShouldProcessAlwaysReturnsTrue(): void
|
||||
{
|
||||
$this->assertTrue($this->handler->shouldProcess([], 0));
|
||||
$this->assertTrue($this->handler->shouldProcess(['some' => 'data'], 5));
|
||||
}
|
||||
|
||||
public function testProcessFieldWithoutParticipant(): void
|
||||
{
|
||||
$travel = new Travel();
|
||||
$bookingDto = new BookingCreateDto($travel, 1);
|
||||
$submittedData = ['licensePlate' => 'AB-CD 123'];
|
||||
|
||||
$this->handler->processField($submittedData, $bookingDto, 0);
|
||||
|
||||
// Should handle gracefully when participant doesn't exist
|
||||
$this->expectNotToPerformAssertions();
|
||||
}
|
||||
|
||||
public function testProcessFieldClearsLicensePlateWhenParkingNotSelected(): void
|
||||
{
|
||||
$participant = new ParticipantDto();
|
||||
$participant->parking = false; // Parking not selected
|
||||
$participant->licensePlate = 'AB-CD 123'; // Should be cleared
|
||||
|
||||
$travel = new Travel();
|
||||
$bookingDto = new BookingCreateDto($travel, 1);
|
||||
$bookingDto->participants = [$participant];
|
||||
|
||||
$submittedData = ['licensePlate' => 'XY-ZZ 999'];
|
||||
|
||||
$this->handler->processField($submittedData, $bookingDto, 0);
|
||||
|
||||
$this->assertNull($participant->licensePlate);
|
||||
}
|
||||
|
||||
public function testProcessFieldSetsLicensePlateWhenParkingSelected(): void
|
||||
{
|
||||
$participant = new ParticipantDto();
|
||||
$participant->parking = true; // Parking selected
|
||||
|
||||
$travel = new Travel();
|
||||
$bookingDto = new BookingCreateDto($travel, 1);
|
||||
$bookingDto->participants = [$participant];
|
||||
|
||||
$submittedData = ['licensePlate' => 'AB-CD 123'];
|
||||
|
||||
$this->handler->processField($submittedData, $bookingDto, 0);
|
||||
|
||||
$this->assertSame('AB-CD 123', $participant->licensePlate);
|
||||
}
|
||||
|
||||
public function testProcessFieldHandlesEmptyLicensePlate(): void
|
||||
{
|
||||
$participant = new ParticipantDto();
|
||||
$participant->parking = true; // Parking selected
|
||||
|
||||
$travel = new Travel();
|
||||
$bookingDto = new BookingCreateDto($travel, 1);
|
||||
$bookingDto->participants = [$participant];
|
||||
|
||||
$submittedData = ['licensePlate' => ''];
|
||||
|
||||
$this->handler->processField($submittedData, $bookingDto, 0);
|
||||
|
||||
$this->assertNull($participant->licensePlate);
|
||||
}
|
||||
|
||||
public function testProcessFieldHandlesNullLicensePlate(): void
|
||||
{
|
||||
$participant = new ParticipantDto();
|
||||
$participant->parking = true; // Parking selected
|
||||
|
||||
$travel = new Travel();
|
||||
$bookingDto = new BookingCreateDto($travel, 1);
|
||||
$bookingDto->participants = [$participant];
|
||||
|
||||
$submittedData = ['licensePlate' => null];
|
||||
|
||||
$this->handler->processField($submittedData, $bookingDto, 0);
|
||||
|
||||
$this->assertNull($participant->licensePlate);
|
||||
}
|
||||
|
||||
public function testProcessFieldTrimsWhitespace(): void
|
||||
{
|
||||
$participant = new ParticipantDto();
|
||||
$participant->parking = true; // Parking selected
|
||||
|
||||
$travel = new Travel();
|
||||
$bookingDto = new BookingCreateDto($travel, 1);
|
||||
$bookingDto->participants = [$participant];
|
||||
|
||||
$submittedData = ['licensePlate' => ' AB-CD 123 '];
|
||||
|
||||
$this->handler->processField($submittedData, $bookingDto, 0);
|
||||
|
||||
$this->assertSame('AB-CD 123', $participant->licensePlate);
|
||||
}
|
||||
|
||||
public function testProcessFieldHandlesWhitespaceOnlyAsEmpty(): void
|
||||
{
|
||||
$participant = new ParticipantDto();
|
||||
$participant->parking = true; // Parking selected
|
||||
|
||||
$travel = new Travel();
|
||||
$bookingDto = new BookingCreateDto($travel, 1);
|
||||
$bookingDto->participants = [$participant];
|
||||
|
||||
$submittedData = ['licensePlate' => ' '];
|
||||
|
||||
$this->handler->processField($submittedData, $bookingDto, 0);
|
||||
|
||||
$this->assertNull($participant->licensePlate);
|
||||
}
|
||||
|
||||
public function testProcessFieldHandlesNonStringValues(): void
|
||||
{
|
||||
$participant = new ParticipantDto();
|
||||
$participant->parking = true; // Parking selected
|
||||
|
||||
$travel = new Travel();
|
||||
$bookingDto = new BookingCreateDto($travel, 1);
|
||||
$bookingDto->participants = [$participant];
|
||||
|
||||
// Test with integer value
|
||||
$submittedData = ['licensePlate' => 123];
|
||||
$this->handler->processField($submittedData, $bookingDto, 0);
|
||||
$this->assertNull($participant->licensePlate);
|
||||
|
||||
// Test with array value
|
||||
$submittedData = ['licensePlate' => ['invalid']];
|
||||
$this->handler->processField($submittedData, $bookingDto, 0);
|
||||
$this->assertNull($participant->licensePlate);
|
||||
}
|
||||
|
||||
public function testProcessFieldHandlesMissingLicensePlateField(): void
|
||||
{
|
||||
$participant = new ParticipantDto();
|
||||
$participant->parking = true; // Parking selected
|
||||
|
||||
$travel = new Travel();
|
||||
$bookingDto = new BookingCreateDto($travel, 1);
|
||||
$bookingDto->participants = [$participant];
|
||||
|
||||
$submittedData = []; // No licensePlate field
|
||||
|
||||
$this->handler->processField($submittedData, $bookingDto, 0);
|
||||
|
||||
$this->assertNull($participant->licensePlate);
|
||||
}
|
||||
|
||||
public function testProcessFieldWithDifferentParticipantIndex(): void
|
||||
{
|
||||
$participant1 = new ParticipantDto();
|
||||
$participant1->parking = false;
|
||||
|
||||
$participant2 = new ParticipantDto();
|
||||
$participant2->parking = true;
|
||||
|
||||
$travel = new Travel();
|
||||
$bookingDto = new BookingCreateDto($travel, 1);
|
||||
$bookingDto->participants = [$participant1, $participant2];
|
||||
|
||||
$submittedData = ['licensePlate' => 'AB-CD 123'];
|
||||
|
||||
// Process for participant at index 1
|
||||
$this->handler->processField($submittedData, $bookingDto, 1);
|
||||
|
||||
$this->assertNull($participant1->licensePlate); // Should not be affected
|
||||
$this->assertSame('AB-CD 123', $participant2->licensePlate); // Should be set
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user