feat: body dimensions optional
This commit is contained in:
@@ -60,6 +60,10 @@ class BodyDimensionsType extends AbstractType
|
||||
'height_required' => false,
|
||||
'weight_required' => false,
|
||||
'shoeSize_required' => false,
|
||||
'help' => 'Du kannst die Daten auch später nachreichen',
|
||||
'help_attr' => [
|
||||
'class' => 'lg:col-span-3 text-sm -mt-2 px-2',
|
||||
],
|
||||
]);
|
||||
|
||||
$resolver->setAllowedTypes('height_required', 'bool');
|
||||
|
||||
@@ -298,6 +298,9 @@ class ParticipantFieldOptionsProvider extends AbstractFieldOptionsProvider
|
||||
'maxlength' => 20,
|
||||
],
|
||||
'help' => 'Bitte gib das Kennzeichen deines Fahrzeugs an. Du kannst es aber auch später nachreichen.',
|
||||
'help_attr' => [
|
||||
'class' => 'text-sm px-2 mt-2',
|
||||
],
|
||||
'sanitize_html' => true,
|
||||
];
|
||||
|
||||
|
||||
@@ -13,26 +13,9 @@ class ParticipantValidator extends ConstraintValidator
|
||||
/** @var ParticipantDto $participant */
|
||||
$participant = $value;
|
||||
|
||||
$this->assertBodyMeasurementsValid($participant);
|
||||
$this->assertPickupSelected($participant);
|
||||
}
|
||||
|
||||
public function assertBodyMeasurementsValid(ParticipantDto $participant): void
|
||||
{
|
||||
if (0 === count($participant->rentals)) {
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (['height', 'shoeSize', 'weight'] as $property) {
|
||||
if (empty($participant->{$property})) {
|
||||
$this->context->buildViolation('Bitte angeben wegen Leihmaterial')
|
||||
->atPath($property)
|
||||
->addViolation()
|
||||
;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function assertPickupSelected(ParticipantDto $participant): void
|
||||
{
|
||||
// Check if either outbound or inbound transportation is bus
|
||||
|
||||
@@ -334,6 +334,7 @@
|
||||
{{ form_row(form.bodyDimensions.height) }}
|
||||
{{ form_row(form.bodyDimensions.shoeSize) }}
|
||||
{{ form_row(form.bodyDimensions.weight) }}
|
||||
{{ form_help(form.bodyDimensions) }}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
|
||||
@@ -17,20 +17,7 @@ class ParticipantValidatorTest extends ConstraintValidatorTestCase
|
||||
return new ParticipantValidator();
|
||||
}
|
||||
|
||||
public function testParticipantWithoutRentalsPassesBodyMeasurementValidation(): void
|
||||
{
|
||||
$participant = $this->createValidParticipant();
|
||||
$participant->rentals = []; // No rentals, so body measurements not required
|
||||
$participant->height = null;
|
||||
$participant->weight = null;
|
||||
$participant->shoeSize = null;
|
||||
|
||||
$this->validator->validate($participant, new Participant());
|
||||
|
||||
$this->assertNoViolation();
|
||||
}
|
||||
|
||||
public function testParticipantWithRentalsButNoBodyMeasurementsFailsValidation(): void
|
||||
public function testParticipantWithRentalsButNoBodyMeasurementsPassesValidation(): void
|
||||
{
|
||||
$participant = $this->createValidParticipant();
|
||||
$participant->rentals = [$this->createMockService()];
|
||||
@@ -40,40 +27,7 @@ class ParticipantValidatorTest extends ConstraintValidatorTestCase
|
||||
|
||||
$this->validator->validate($participant, new Participant());
|
||||
|
||||
$this->buildViolation('Bitte angeben wegen Leihmaterial')
|
||||
->atPath('property.path.height')
|
||||
->buildNextViolation('Bitte angeben wegen Leihmaterial')
|
||||
->atPath('property.path.shoeSize')
|
||||
->buildNextViolation('Bitte angeben wegen Leihmaterial')
|
||||
->atPath('property.path.weight')
|
||||
->assertRaised();
|
||||
}
|
||||
|
||||
public function testParticipantWithRentalsAndPartialBodyMeasurementsFailsValidation(): void
|
||||
{
|
||||
$participant = $this->createValidParticipant();
|
||||
$participant->rentals = [$this->createMockService()];
|
||||
$participant->height = '175';
|
||||
$participant->weight = null; // Missing
|
||||
$participant->shoeSize = '42';
|
||||
|
||||
$this->validator->validate($participant, new Participant());
|
||||
|
||||
$this->buildViolation('Bitte angeben wegen Leihmaterial')
|
||||
->atPath('property.path.weight')
|
||||
->assertRaised();
|
||||
}
|
||||
|
||||
public function testParticipantWithRentalsAndCompleteBodyMeasurementsPassesValidation(): void
|
||||
{
|
||||
$participant = $this->createValidParticipant();
|
||||
$participant->rentals = [$this->createMockService()];
|
||||
$participant->height = '175';
|
||||
$participant->weight = '70';
|
||||
$participant->shoeSize = '42';
|
||||
|
||||
$this->validator->validate($participant, new Participant());
|
||||
|
||||
// Body measurements are optional and can be provided later
|
||||
$this->assertNoViolation();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user