GraphWalkerTest.php 3.8 KB

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