public function addCustomValidatorsAddsExpectedPolyTypeValidatorToTheConjunction()
{
$highPriorityValidatorClassName = 'RandomHighPrio' . md5(uniqid(mt_rand(), true)) . 'PolyTypeValidator';
$lowPriorityValidatorClassName = 'RandomLowPrio' . md5(uniqid(mt_rand(), true)) . 'PolyTypeValidator';
$modelClassName = 'Acme\\Test\\Content\\Page' . md5(uniqid(mt_rand(), true));
$mockLowPriorityValidator = $this->createMock(PolyTypeObjectValidatorInterface::class, [], [], $lowPriorityValidatorClassName);
$mockLowPriorityValidator->expects($this->atLeastOnce())->method('canValidate')->with($modelClassName)->will($this->returnValue(true));
$mockLowPriorityValidator->expects($this->atLeastOnce())->method('getPriority')->will($this->returnValue(100));
$mockHighPriorityValidator = $this->createMock(PolyTypeObjectValidatorInterface::class, [], [], $highPriorityValidatorClassName);
$mockHighPriorityValidator->expects($this->atLeastOnce())->method('canValidate')->with($modelClassName)->will($this->returnValue(true));
$mockHighPriorityValidator->expects($this->atLeastOnce())->method('getPriority')->will($this->returnValue(200));
$mockConjunctionValidator = $this->getMockBuilder(ConjunctionValidator::class)->setMethods(['addValidator'])->getMock();
$mockConjunctionValidator->expects($this->once())->method('addValidator')->with($mockHighPriorityValidator);
$mockReflectionService = $this->createMock(ReflectionService::class);
$mockReflectionService->expects($this->any())->method('getAllImplementationClassNamesForInterface')->with(PolyTypeObjectValidatorInterface::class)->will($this->returnValue([$highPriorityValidatorClassName, $lowPriorityValidatorClassName]));
$mockObjectManager = $this->createMock(ObjectManagerInterface::class);
$mockObjectManager->expects($this->any())->method('get')->with(ReflectionService::class)->will($this->returnValue($mockReflectionService));
$validatorResolver = $this->getAccessibleMock(ValidatorResolver::class, ['createValidator']);
$validatorResolver->_set('reflectionService', $mockReflectionService);
$validatorResolver->_set('objectManager', $mockObjectManager);
$validatorResolver->expects($this->at(0))->method('createValidator')->will($this->returnValue(null));
$validatorResolver->expects($this->at(1))->method('createValidator')->with($highPriorityValidatorClassName)->will($this->returnValue($mockHighPriorityValidator));
$validatorResolver->expects($this->at(2))->method('createValidator')->with($lowPriorityValidatorClassName)->will($this->returnValue($mockLowPriorityValidator));
$validatorResolver->_callRef('addCustomValidators', $modelClassName, $mockConjunctionValidator);
}