GraphWalkerTest.php 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <?php
  2. namespace Symfony\Tests\Component\Validator;
  3. require_once __DIR__.'/Fixtures/Entity.php';
  4. require_once __DIR__.'/Fixtures/ConstraintA.php';
  5. require_once __DIR__.'/Fixtures/ConstraintAValidator.php';
  6. use Symfony\Tests\Component\Validator\Fixtures\Entity;
  7. use Symfony\Tests\Component\Validator\Fixtures\ConstraintA;
  8. use Symfony\Component\Validator\GraphWalker;
  9. use Symfony\Component\Validator\ConstraintViolation;
  10. use Symfony\Component\Validator\ConstraintViolationList;
  11. use Symfony\Component\Validator\ConstraintValidatorFactory;
  12. use Symfony\Component\Validator\Mapping\ClassMetadata;
  13. use Symfony\Component\Validator\Mapping\PropertyMetadata;
  14. use Symfony\Component\Validator\Constraints\All;
  15. use Symfony\Component\Validator\Constraints\Any;
  16. use Symfony\Component\Validator\Constraints\Valid;
  17. class GraphWalkerTest extends \PHPUnit_Framework_TestCase
  18. {
  19. const CLASSNAME = 'Symfony\Tests\Component\Validator\Fixtures\Entity';
  20. protected $factory;
  21. protected $metadata;
  22. public function setUp()
  23. {
  24. $this->factory = $this->getMock('Symfony\Component\Validator\Mapping\ClassMetadataFactoryInterface');
  25. $this->walker = new GraphWalker('Root', $this->factory, new ConstraintValidatorFactory());
  26. $this->metadata = new ClassMetadata(self::CLASSNAME);
  27. }
  28. public function testWalkClassValidatesConstraints()
  29. {
  30. $this->metadata->addConstraint(new ConstraintA());
  31. $this->walker->walkClass($this->metadata, new Entity(), 'Default', '');
  32. $this->assertEquals(1, count($this->walker->getViolations()));
  33. }
  34. public function testWalkClassValidatesPropertyConstraints()
  35. {
  36. $this->metadata->addPropertyConstraint('firstName', new ConstraintA());
  37. $this->walker->walkClass($this->metadata, new Entity(), 'Default', '');
  38. $this->assertEquals(1, count($this->walker->getViolations()));
  39. }
  40. public function testWalkClassValidatesGetterConstraints()
  41. {
  42. $this->metadata->addGetterConstraint('lastName', new ConstraintA());
  43. $this->walker->walkClass($this->metadata, new Entity(), 'Default', '');
  44. $this->assertEquals(1, count($this->walker->getViolations()));
  45. }
  46. public function testWalkPropertyValueValidatesConstraints()
  47. {
  48. $this->metadata->addPropertyConstraint('firstName', new ConstraintA());
  49. $this->walker->walkPropertyValue($this->metadata, 'firstName', 'value', 'Default', '');
  50. $this->assertEquals(1, count($this->walker->getViolations()));
  51. }
  52. public function testWalkConstraintBuildsAViolationIfFailed()
  53. {
  54. $constraint = new ConstraintA();
  55. $this->walker->walkConstraint($constraint, 'foobar', 'Default', 'firstName.path');
  56. $violations = new ConstraintViolationList();
  57. $violations->add(new ConstraintViolation(
  58. 'message',
  59. array('param' => 'value'),
  60. 'Root',
  61. 'firstName.path',
  62. 'foobar'
  63. ));
  64. $this->assertEquals($violations, $this->walker->getViolations());
  65. }
  66. public function testWalkConstraintBuildsNoViolationIfSuccessful()
  67. {
  68. $constraint = new ConstraintA();
  69. $this->walker->walkConstraint($constraint, 'VALID', 'Default', 'firstName.path');
  70. $this->assertEquals(0, count($this->walker->getViolations()));
  71. }
  72. }