ValidatorTest.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <?php
  2. /*
  3. * This file is part of the Symfony package.
  4. *
  5. * (c) Fabien Potencier <fabien@symfony.com>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Symfony\Tests\Component\Validator;
  11. require_once __DIR__.'/Fixtures/Entity.php';
  12. require_once __DIR__.'/Fixtures/FailingConstraint.php';
  13. require_once __DIR__.'/Fixtures/FailingConstraintValidator.php';
  14. require_once __DIR__.'/Fixtures/FakeClassMetadataFactory.php';
  15. use Symfony\Tests\Component\Validator\Fixtures\Entity;
  16. use Symfony\Tests\Component\Validator\Fixtures\FakeClassMetadataFactory;
  17. use Symfony\Tests\Component\Validator\Fixtures\FailingConstraint;
  18. use Symfony\Component\Validator\Validator;
  19. use Symfony\Component\Validator\ConstraintViolation;
  20. use Symfony\Component\Validator\ConstraintViolationList;
  21. use Symfony\Component\Validator\ConstraintValidatorFactory;
  22. use Symfony\Component\Validator\Mapping\ClassMetadata;
  23. class ValidatorTest extends \PHPUnit_Framework_TestCase
  24. {
  25. protected $factory;
  26. protected $validator;
  27. protected function setUp()
  28. {
  29. $this->factory = new FakeClassMetadataFactory();
  30. $this->validator = new Validator($this->factory, new ConstraintValidatorFactory());
  31. }
  32. public function testValidate_defaultGroup()
  33. {
  34. $entity = new Entity();
  35. $metadata = new ClassMetadata(get_class($entity));
  36. $metadata->addPropertyConstraint('firstName', new FailingConstraint());
  37. $metadata->addPropertyConstraint('lastName', new FailingConstraint(array(
  38. 'groups' => 'Custom',
  39. )));
  40. $this->factory->addClassMetadata($metadata);
  41. // Only the constraint of group "Default" failed
  42. $violations = new ConstraintViolationList();
  43. $violations->add(new ConstraintViolation(
  44. '',
  45. array(),
  46. $entity,
  47. 'firstName',
  48. ''
  49. ));
  50. $this->assertEquals($violations, $this->validator->validate($entity));
  51. }
  52. public function testValidate_oneGroup()
  53. {
  54. $entity = new Entity();
  55. $metadata = new ClassMetadata(get_class($entity));
  56. $metadata->addPropertyConstraint('firstName', new FailingConstraint());
  57. $metadata->addPropertyConstraint('lastName', new FailingConstraint(array(
  58. 'groups' => 'Custom',
  59. )));
  60. $this->factory->addClassMetadata($metadata);
  61. // Only the constraint of group "Custom" failed
  62. $violations = new ConstraintViolationList();
  63. $violations->add(new ConstraintViolation(
  64. '',
  65. array(),
  66. $entity,
  67. 'lastName',
  68. ''
  69. ));
  70. $this->assertEquals($violations, $this->validator->validate($entity, 'Custom'));
  71. }
  72. public function testValidate_multipleGroups()
  73. {
  74. $entity = new Entity();
  75. $metadata = new ClassMetadata(get_class($entity));
  76. $metadata->addPropertyConstraint('firstName', new FailingConstraint(array(
  77. 'groups' => 'First',
  78. )));
  79. $metadata->addPropertyConstraint('lastName', new FailingConstraint(array(
  80. 'groups' => 'Second',
  81. )));
  82. $this->factory->addClassMetadata($metadata);
  83. // The constraints of both groups failed
  84. $violations = new ConstraintViolationList();
  85. $violations->add(new ConstraintViolation(
  86. '',
  87. array(),
  88. $entity,
  89. 'firstName',
  90. ''
  91. ));
  92. $violations->add(new ConstraintViolation(
  93. '',
  94. array(),
  95. $entity,
  96. 'lastName',
  97. ''
  98. ));
  99. $result = $this->validator->validate($entity, array('First', 'Second'));
  100. $this->assertEquals($violations, $result);
  101. }
  102. public function testValidateProperty()
  103. {
  104. $entity = new Entity();
  105. $metadata = new ClassMetadata(get_class($entity));
  106. $metadata->addPropertyConstraint('firstName', new FailingConstraint());
  107. $this->factory->addClassMetadata($metadata);
  108. $result = $this->validator->validateProperty($entity, 'firstName');
  109. $this->assertEquals(1, count($result));
  110. }
  111. public function testValidatePropertyValue()
  112. {
  113. $entity = new Entity();
  114. $metadata = new ClassMetadata(get_class($entity));
  115. $metadata->addPropertyConstraint('firstName', new FailingConstraint());
  116. $this->factory->addClassMetadata($metadata);
  117. $result = $this->validator->validatePropertyValue(get_class($entity), 'firstName', 'Bernhard');
  118. $this->assertEquals(1, count($result));
  119. }
  120. public function testValidateValue()
  121. {
  122. $result = $this->validator->validateValue('Bernhard', new FailingConstraint());
  123. $this->assertEquals(1, count($result));
  124. }
  125. public function testGetMetadataFactory()
  126. {
  127. $this->assertInstanceOf(
  128. 'Symfony\Component\Validator\Mapping\ClassMetadataFactoryInterface',
  129. $this->validator->getMetadataFactory()
  130. );
  131. }
  132. }