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())); } }