/**
  * @test
  */
 public function validatorConjunctionReturnsErrorsIfOneValidatorReturnsErrors()
 {
     $validatorConjunction = new ConjunctionValidator([]);
     $validatorObject = $this->createMock(ValidatorInterface::class);
     $errors = new Error\Result();
     $errors->addError(new Error\Error('Error', 123));
     $validatorObject->expects($this->any())->method('validate')->will($this->returnValue($errors));
     $validatorConjunction->addValidator($validatorObject);
     $this->assertTrue($validatorConjunction->validate('some subject')->hasErrors());
 }
 /**
  * This adds custom validators to the passed $conjunctionValidator.
  *
  * A custom validator is found if it follows the naming convention "Replace '\Model\' by '\Validator\' and
  * append 'Validator'". If found, it will be added to the $conjunctionValidator.
  *
  * In addition canValidate() will be called on all implementations of the ObjectValidatorInterface to find
  * all validators that could validate the target. The one with the highest priority will be added as well.
  * If multiple validators have the same priority, which one will be added is not deterministic.
  *
  * @param string $targetClassName
  * @param ConjunctionValidator $conjunctionValidator
  * @return NULL|Validator\ObjectValidatorInterface
  */
 protected function addCustomValidators($targetClassName, ConjunctionValidator &$conjunctionValidator)
 {
     // Custom validator for the class
     $addedValidatorClassName = null;
     $possibleValidatorClassName = str_replace('\\Model\\', '\\Validator\\', $targetClassName) . 'Validator';
     $customValidator = $this->createValidator($possibleValidatorClassName);
     if ($customValidator !== null) {
         $conjunctionValidator->addValidator($customValidator);
         $addedValidatorClassName = get_class($customValidator);
     }
     // find polytype validator for class
     $acceptablePolyTypeValidators = [];
     $polyTypeObjectValidatorImplementationClassNames = static::getPolyTypeObjectValidatorImplementationClassNames($this->objectManager);
     foreach ($polyTypeObjectValidatorImplementationClassNames as $validatorImplementationClassName) {
         $acceptablePolyTypeValidator = $this->createValidator($validatorImplementationClassName);
         // skip custom validator already added above
         if ($addedValidatorClassName === get_class($acceptablePolyTypeValidator)) {
             continue;
         }
         if ($acceptablePolyTypeValidator->canValidate($targetClassName)) {
             $acceptablePolyTypeValidators[$acceptablePolyTypeValidator->getPriority()] = $acceptablePolyTypeValidator;
         }
     }
     if (count($acceptablePolyTypeValidators) > 0) {
         ksort($acceptablePolyTypeValidators);
         $conjunctionValidator->addValidator(array_pop($acceptablePolyTypeValidators));
     }
 }
Пример #3
0
 /**
  * @param \Neos\Flow\Validation\Validator\ValidatorInterface $validator
  * @return void
  */
 public function addValidator(\Neos\Flow\Validation\Validator\ValidatorInterface $validator)
 {
     $this->validator->addValidator($validator);
 }