{$property} = $value; $properties = array_map( static fn ($violation) => $violation->getPropertyPath(), iterator_to_array($this->validate($dto, ['step_2'])), ); self::assertContains($property, $properties); } /** * @return iterable */ public static function implausibleHeadCounts(): iterable { yield 'pax above the ceiling' => ['paxCount', AccommodationBooking::MAX_PAX + 1]; yield 'pax below one' => ['paxCount', 0]; yield 'negative pax' => ['paxCount', -5]; yield 'minors above the ceiling' => ['minorsCount', AccommodationBooking::MAX_PAX + 1]; yield 'negative minors' => ['minorsCount', -1]; yield 'children above the ceiling' => ['childrenCount', AccommodationBooking::MAX_PAX + 1]; } public function testAFullHouseStillPasses(): void { $dto = new AccommodationBookingDto(); $dto->paxCount = AccommodationBooking::MAX_PAX; $dto->minorsCount = 4; $dto->childrenCount = 60; $dto->selectedBoardServiceId = 1; self::assertCount(0, $this->validate($dto, ['step_2'])); } /** * @param string[] $groups */ private function validate(AccommodationBookingDto $dto, array $groups): ConstraintViolationListInterface { return Validation::createValidatorBuilder() ->enableAttributeMapping() ->getValidator() ->validate($dto, null, $groups); } }