ClassMetadataFactoryTest.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <?php
  2. namespace Symfony\Tests\Component\Validator\Mapping;
  3. require_once __DIR__.'/../Fixtures/Entity.php';
  4. require_once __DIR__.'/../Fixtures/ConstraintA.php';
  5. require_once __DIR__.'/../Fixtures/ConstraintB.php';
  6. use Symfony\Tests\Component\Validator\Fixtures\Entity;
  7. use Symfony\Tests\Component\Validator\Fixtures\ConstraintA;
  8. use Symfony\Tests\Component\Validator\Fixtures\ConstraintB;
  9. use Symfony\Component\Validator\Mapping\ClassMetadataFactory;
  10. use Symfony\Component\Validator\Mapping\ClassMetadata;
  11. use Symfony\Component\Validator\Mapping\PropertyMetadata;
  12. use Symfony\Component\Validator\Mapping\Loader\LoaderInterface;
  13. class ClassMetadataFactoryTest extends \PHPUnit_Framework_TestCase
  14. {
  15. const CLASSNAME = 'Symfony\Tests\Component\Validator\Fixtures\Entity';
  16. const PARENTCLASS = 'Symfony\Tests\Component\Validator\Fixtures\EntityParent';
  17. public function testLoadClassMetadata()
  18. {
  19. $factory = new ClassMetadataFactory(new TestLoader());
  20. $metadata = $factory->getClassMetadata(self::PARENTCLASS);
  21. $constraints = array(
  22. new ConstraintA(array('groups' => array('Default', 'EntityParent'))),
  23. );
  24. $this->assertEquals($constraints, $metadata->getConstraints());
  25. }
  26. public function testMergeParentConstraints()
  27. {
  28. $factory = new ClassMetadataFactory(new TestLoader());
  29. $metadata = $factory->getClassMetadata(self::CLASSNAME);
  30. $constraints = array(
  31. new ConstraintA(array('groups' => array(
  32. 'Default',
  33. 'EntityParent',
  34. 'Entity',
  35. ))),
  36. new ConstraintA(array('groups' => array(
  37. 'Default',
  38. 'EntityInterface',
  39. 'Entity',
  40. ))),
  41. new ConstraintA(array('groups' => array(
  42. 'Default',
  43. 'Entity',
  44. ))),
  45. );
  46. $this->assertEquals($constraints, $metadata->getConstraints());
  47. }
  48. public function testWriteMetadataToCache()
  49. {
  50. $cache = $this->getMock('Symfony\Component\Validator\Mapping\Cache\CacheInterface');
  51. $factory = new ClassMetadataFactory(new TestLoader(), $cache);
  52. $tester = $this;
  53. $constraints = array(
  54. new ConstraintA(array('groups' => array('Default', 'EntityParent'))),
  55. );
  56. $cache->expects($this->once())
  57. ->method('has')
  58. ->with($this->equalTo(self::PARENTCLASS))
  59. ->will($this->returnValue(false));
  60. $cache->expects($this->once())
  61. ->method('write')
  62. ->will($this->returnCallback(function($metadata) use ($tester, $constraints) {
  63. $tester->assertEquals($constraints, $metadata->getConstraints());
  64. }));
  65. $metadata = $factory->getClassMetadata(self::PARENTCLASS);
  66. $this->assertEquals(self::PARENTCLASS, $metadata->getClassName());
  67. $this->assertEquals($constraints, $metadata->getConstraints());
  68. }
  69. public function testReadMetadataFromCache()
  70. {
  71. $loader = $this->getMock('Symfony\Component\Validator\Mapping\Loader\LoaderInterface');
  72. $cache = $this->getMock('Symfony\Component\Validator\Mapping\Cache\CacheInterface');
  73. $factory = new ClassMetadataFactory($loader, $cache);
  74. $tester = $this;
  75. $metadata = new ClassMetadata(self::PARENTCLASS);
  76. $metadata->addConstraint(new ConstraintA());
  77. $loader->expects($this->never())
  78. ->method('loadClassMetadata');
  79. $cache->expects($this->once())
  80. ->method('has')
  81. ->with($this->equalTo(self::PARENTCLASS))
  82. ->will($this->returnValue(true));
  83. $cache->expects($this->once())
  84. ->method('read')
  85. ->will($this->returnValue($metadata));
  86. $this->assertEquals($metadata,$factory->getClassMetadata(self::PARENTCLASS));
  87. }
  88. }
  89. class TestLoader implements LoaderInterface
  90. {
  91. public function loadClassMetadata(ClassMetadata $metadata)
  92. {
  93. $metadata->addConstraint(new ConstraintA());
  94. }
  95. }