get('validator'); $violations = $validator->validate($entity, null, $groups); if (!\is_array($fieldNames)) { $fieldNames = [$fieldNames]; } $expected = \count($fieldNames); $actual = $violations->count(); $violatedFields = []; /** @var ConstraintViolationInterface $validation */ foreach ($violations as $validation) { $violatedFields[$validation->getPropertyPath()] = $validation->getPropertyPath(); } $countViolations = \count($violatedFields); foreach ($fieldNames as $id => $propertyPath) { $foundField = false; if (\in_array($propertyPath, $violatedFields)) { $foundField = true; unset($violatedFields[$propertyPath]); } $this->assertTrue($foundField, 'Failed finding violation for field: ' . $propertyPath); } $this->assertEmpty($violatedFields, sprintf('Unexpected violations found: %s', implode(', ', $violatedFields))); $this->assertEquals($expected, $countViolations, sprintf('Expected %s violations, found %s in %s.', $expected, $actual, implode(', ', array_keys($violatedFields)))); } public function assertHasNoViolations($entity, $groups = null): void { self::bootKernel(); /** @var ValidatorInterface $validator */ $validator = self::getContainer()->get('validator'); $violations = $validator->validate($entity, null, $groups); $actual = $violations->count(); $this->assertEquals(0, $actual, sprintf('Expected 0 violations, found %s.', $actual)); } }