<?php
namespace Symfony\Component\Validator\Tests;
use Symfony\Component\Validator\Tests\Fixtures\Entity;
use Symfony\Component\Validator\Tests\Fixtures\GroupSequenceProviderEntity;
use Symfony\Component\Validator\Tests\Fixtures\FakeMetadataFactory;
use Symfony\Component\Validator\Tests\Fixtures\FailingConstraint;
use Symfony\Component\Validator\Validator;
use Symfony\Component\Validator\DefaultTranslator;
use Symfony\Component\Validator\ConstraintViolation;
use Symfony\Component\Validator\ConstraintViolationList;
use Symfony\Component\Validator\ConstraintValidatorFactory;
use Symfony\Component\Validator\Constraints\Valid;
use Symfony\Component\Validator\Mapping\ClassMetadata;
class ValidatorTest extends \PHPUnit_Framework_TestCase {
private $metadataFactory;
private $validator;
protected function setUp() {
$this->metadataFactory = new FakeMetadataFactory();
$this->validator = new Validator($this->metadataFactory, new ConstraintValidatorFactory(), new DefaultTranslator());
}
protected function tearDown() {
$this->metadataFactory = null;
$this->validator = null;
}
public function testValidateDefaultGroup() {
$entity = new Entity();
$metadata = new ClassMetadata(get_class($entity));
$metadata
->addPropertyConstraint('firstName', new FailingConstraint());
$metadata
->addPropertyConstraint('lastName', new FailingConstraint(array(
'groups' => 'Custom',
)));
$this->metadataFactory
->addMetadata($metadata);
$violations = new ConstraintViolationList();
$violations
->add(new ConstraintViolation('Failed', 'Failed', array(), $entity, 'firstName', ''));
$this
->assertEquals($violations, $this->validator
->validate($entity));
}
public function testValidateOneGroup() {
$entity = new Entity();
$metadata = new ClassMetadata(get_class($entity));
$metadata
->addPropertyConstraint('firstName', new FailingConstraint());
$metadata
->addPropertyConstraint('lastName', new FailingConstraint(array(
'groups' => 'Custom',
)));
$this->metadataFactory
->addMetadata($metadata);
$violations = new ConstraintViolationList();
$violations
->add(new ConstraintViolation('Failed', 'Failed', array(), $entity, 'lastName', ''));
$this
->assertEquals($violations, $this->validator
->validate($entity, 'Custom'));
}
public function testValidateMultipleGroups() {
$entity = new Entity();
$metadata = new ClassMetadata(get_class($entity));
$metadata
->addPropertyConstraint('firstName', new FailingConstraint(array(
'groups' => 'First',
)));
$metadata
->addPropertyConstraint('lastName', new FailingConstraint(array(
'groups' => 'Second',
)));
$this->metadataFactory
->addMetadata($metadata);
$violations = new ConstraintViolationList();
$violations
->add(new ConstraintViolation('Failed', 'Failed', array(), $entity, 'firstName', ''));
$violations
->add(new ConstraintViolation('Failed', 'Failed', array(), $entity, 'lastName', ''));
$result = $this->validator
->validate($entity, array(
'First',
'Second',
));
$this
->assertEquals($violations, $result);
}
public function testValidateGroupSequenceProvider() {
$entity = new GroupSequenceProviderEntity();
$metadata = new ClassMetadata(get_class($entity));
$metadata
->addPropertyConstraint('firstName', new FailingConstraint(array(
'groups' => 'First',
)));
$metadata
->addPropertyConstraint('lastName', new FailingConstraint(array(
'groups' => 'Second',
)));
$metadata
->setGroupSequenceProvider(true);
$this->metadataFactory
->addMetadata($metadata);
$violations = new ConstraintViolationList();
$violations
->add(new ConstraintViolation('Failed', 'Failed', array(), $entity, 'firstName', ''));
$entity
->setGroups(array(
'First',
));
$result = $this->validator
->validate($entity);
$this
->assertEquals($violations, $result);
$violations = new ConstraintViolationList();
$violations
->add(new ConstraintViolation('Failed', 'Failed', array(), $entity, 'lastName', ''));
$entity
->setGroups(array(
'Second',
));
$result = $this->validator
->validate($entity);
$this
->assertEquals($violations, $result);
$entity
->setGroups(array());
$result = $this->validator
->validate($entity);
$this
->assertEquals(new ConstraintViolationList(), $result);
}
public function testValidateProperty() {
$entity = new Entity();
$metadata = new ClassMetadata(get_class($entity));
$metadata
->addPropertyConstraint('firstName', new FailingConstraint());
$this->metadataFactory
->addMetadata($metadata);
$result = $this->validator
->validateProperty($entity, 'firstName');
$this
->assertCount(1, $result);
$result = $this->validator
->validateProperty($entity, 'lastName');
$this
->assertCount(0, $result);
}
public function testValidatePropertyValue() {
$entity = new Entity();
$metadata = new ClassMetadata(get_class($entity));
$metadata
->addPropertyConstraint('firstName', new FailingConstraint());
$this->metadataFactory
->addMetadata($metadata);
$result = $this->validator
->validatePropertyValue(get_class($entity), 'firstName', 'Bernhard');
$this
->assertCount(1, $result);
}
public function testValidateValue() {
$violations = new ConstraintViolationList();
$violations
->add(new ConstraintViolation('Failed', 'Failed', array(), 'Bernhard', '', 'Bernhard'));
$this
->assertEquals($violations, $this->validator
->validateValue('Bernhard', new FailingConstraint()));
}
public function testValidateValueRejectsValid() {
$entity = new Entity();
$metadata = new ClassMetadata(get_class($entity));
$this->metadataFactory
->addMetadata($metadata);
$this->validator
->validateValue($entity, new Valid());
}
public function testValidatePropertyFailsIfPropertiesNotSupported() {
$metadata = $this
->getMock('Symfony\\Component\\Validator\\MetadataInterface');
$this->metadataFactory = $this
->getMock('Symfony\\Component\\Validator\\MetadataFactoryInterface');
$this->metadataFactory
->expects($this
->any())
->method('getMetadataFor')
->with('VALUE')
->will($this
->returnValue($metadata));
$this->validator = new Validator($this->metadataFactory, new ConstraintValidatorFactory(), new DefaultTranslator());
$this->validator
->validateProperty('VALUE', 'someProperty');
}
public function testValidatePropertyValueFailsIfPropertiesNotSupported() {
$metadata = $this
->getMock('Symfony\\Component\\Validator\\MetadataInterface');
$this->metadataFactory = $this
->getMock('Symfony\\Component\\Validator\\MetadataFactoryInterface');
$this->metadataFactory
->expects($this
->any())
->method('getMetadataFor')
->with('VALUE')
->will($this
->returnValue($metadata));
$this->validator = new Validator($this->metadataFactory, new ConstraintValidatorFactory(), new DefaultTranslator());
$this->validator
->validatePropertyValue('VALUE', 'someProperty', 'propertyValue');
}
public function testGetMetadataFactory() {
$this
->assertInstanceOf('Symfony\\Component\\Validator\\MetadataFactoryInterface', $this->validator
->getMetadataFactory());
}
}