123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- <?php
- namespace Symfony\Tests\Component\Validator;
- require_once __DIR__.'/Fixtures/Entity.php';
- require_once __DIR__.'/Fixtures/ConstraintA.php';
- require_once __DIR__.'/Fixtures/ConstraintAValidator.php';
- require_once __DIR__.'/Fixtures/FailingConstraint.php';
- require_once __DIR__.'/Fixtures/FailingConstraintValidator.php';
- require_once __DIR__.'/Fixtures/FakeClassMetadataFactory.php';
- use Symfony\Tests\Component\Validator\Fixtures\Entity;
- use Symfony\Tests\Component\Validator\Fixtures\FakeClassMetadataFactory;
- use Symfony\Tests\Component\Validator\Fixtures\ConstraintA;
- use Symfony\Tests\Component\Validator\Fixtures\FailingConstraint;
- use Symfony\Component\Validator\GraphWalker;
- use Symfony\Component\Validator\ConstraintViolation;
- use Symfony\Component\Validator\ConstraintViolationList;
- use Symfony\Component\Validator\ConstraintValidatorFactory;
- use Symfony\Component\Validator\Mapping\ClassMetadata;
- use Symfony\Component\Validator\Constraints\Valid;
- class GraphWalkerTest extends \PHPUnit_Framework_TestCase
- {
- const CLASSNAME = 'Symfony\Tests\Component\Validator\Fixtures\Entity';
- protected $factory;
- protected $metadata;
- public function setUp()
- {
- $this->factory = new FakeClassMetadataFactory();
- $this->walker = new GraphWalker('Root', $this->factory, new ConstraintValidatorFactory());
- $this->metadata = new ClassMetadata(self::CLASSNAME);
- }
- public function testWalkClassValidatesConstraints()
- {
- $this->metadata->addConstraint(new ConstraintA());
- $this->walker->walkClass($this->metadata, new Entity(), 'Default', '');
- $this->assertEquals(1, count($this->walker->getViolations()));
- }
- public function testWalkClassValidatesPropertyConstraints()
- {
- $this->metadata->addPropertyConstraint('firstName', new ConstraintA());
- $this->walker->walkClass($this->metadata, new Entity(), 'Default', '');
- $this->assertEquals(1, count($this->walker->getViolations()));
- }
- public function testWalkClassValidatesGetterConstraints()
- {
- $this->metadata->addGetterConstraint('lastName', new ConstraintA());
- $this->walker->walkClass($this->metadata, new Entity(), 'Default', '');
- $this->assertEquals(1, count($this->walker->getViolations()));
- }
- public function testWalkPropertyValueValidatesConstraints()
- {
- $this->metadata->addPropertyConstraint('firstName', new ConstraintA());
- $this->walker->walkPropertyValue($this->metadata, 'firstName', 'value', 'Default', '');
- $this->assertEquals(1, count($this->walker->getViolations()));
- }
- public function testWalkCascadedPropertyValidatesReferences()
- {
- $entity = new Entity();
- $entityMetadata = new ClassMetadata(get_class($entity));
- $this->factory->addClassMetadata($entityMetadata);
- // add a constraint for the entity that always fails
- $entityMetadata->addConstraint(new FailingConstraint());
- // validate entity when validating the property "reference"
- $this->metadata->addPropertyConstraint('reference', new Valid());
- // invoke validation on an object
- $this->walker->walkPropertyValue(
- $this->metadata,
- 'reference',
- $entity, // object!
- 'Default',
- 'path'
- );
- $violations = new ConstraintViolationList();
- $violations->add(new ConstraintViolation(
- '',
- array(),
- 'Root',
- 'path',
- $entity
- ));
- $this->assertEquals($violations, $this->walker->getViolations());
- }
- public function testWalkCascadedPropertyValidatesArrays()
- {
- $entity = new Entity();
- $entityMetadata = new ClassMetadata(get_class($entity));
- $this->factory->addClassMetadata($entityMetadata);
- // add a constraint for the entity that always fails
- $entityMetadata->addConstraint(new FailingConstraint());
- // validate array when validating the property "reference"
- $this->metadata->addPropertyConstraint('reference', new Valid());
- $this->walker->walkPropertyValue(
- $this->metadata,
- 'reference',
- array('key' => $entity), // array!
- 'Default',
- 'path'
- );
- $violations = new ConstraintViolationList();
- $violations->add(new ConstraintViolation(
- '',
- array(),
- 'Root',
- 'path[key]',
- $entity
- ));
- $this->assertEquals($violations, $this->walker->getViolations());
- }
- public function testWalkCascadedPropertyDoesNotValidateNullValues()
- {
- $this->metadata->addPropertyConstraint('reference', new Valid());
- $this->walker->walkPropertyValue(
- $this->metadata,
- 'reference',
- null,
- 'Default',
- ''
- );
- $this->assertEquals(0, count($this->walker->getViolations()));
- }
- public function testWalkCascadedPropertyRequiresObjectOrArray()
- {
- $this->metadata->addPropertyConstraint('reference', new Valid());
- $this->setExpectedException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
- $this->walker->walkPropertyValue(
- $this->metadata,
- 'reference',
- 'no object',
- 'Default',
- ''
- );
- }
- public function testWalkConstraintBuildsAViolationIfFailed()
- {
- $constraint = new ConstraintA();
- $this->walker->walkConstraint($constraint, 'foobar', 'Default', 'firstName.path');
- $violations = new ConstraintViolationList();
- $violations->add(new ConstraintViolation(
- 'message',
- array('param' => 'value'),
- 'Root',
- 'firstName.path',
- 'foobar'
- ));
- $this->assertEquals($violations, $this->walker->getViolations());
- }
- public function testWalkConstraintBuildsNoViolationIfSuccessful()
- {
- $constraint = new ConstraintA();
- $this->walker->walkConstraint($constraint, 'VALID', 'Default', 'firstName.path');
- $this->assertEquals(0, count($this->walker->getViolations()));
- }
- }
|