ReferenceIntegrityDocumentTest.php 5.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. <?php
  2. namespace Gedmo\ReferenceIntegrity;
  3. use Doctrine\Common\EventManager;
  4. use Gedmo\ReferenceIntegrity\ReferenceIntegrityListener;
  5. use Tool\BaseTestCaseMongoODM;
  6. /**
  7. * These are tests for the ReferenceIntegrity extension
  8. *
  9. * @author Evert Harmeling <evert.harmeling@freshheads.com>
  10. * @package Gedmo.ReferenceIntegrity
  11. * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
  12. */
  13. class ReferenceIntegrityDocumentTest extends BaseTestCaseMongoODM
  14. {
  15. const TYPE_ONE_NULLIFY_CLASS = 'ReferenceIntegrity\Fixture\Document\OneNullify\Type';
  16. const ARTICLE_ONE_NULLIFY_CLASS = 'ReferenceIntegrity\Fixture\Document\OneNullify\Article';
  17. const TYPE_MANY_NULLIFY_CLASS = 'ReferenceIntegrity\Fixture\Document\ManyNullify\Type';
  18. const ARTICLE_MANY_NULLIFY_CLASS = 'ReferenceIntegrity\Fixture\Document\ManyNullify\Article';
  19. const TYPE_ONE_RESTRICT_CLASS = 'ReferenceIntegrity\Fixture\Document\OneRestrict\Type';
  20. const ARTICLE_ONE_RESTRICT_CLASS = 'ReferenceIntegrity\Fixture\Document\OneRestrict\Article';
  21. const TYPE_MANY_RESTRICT_CLASS = 'ReferenceIntegrity\Fixture\Document\ManyRestrict\Type';
  22. const ARTICLE_MANY_RESTRICT_CLASS = 'ReferenceIntegrity\Fixture\Document\ManyRestrict\Article';
  23. protected function setUp()
  24. {
  25. parent::setUp();
  26. $evm = new EventManager();
  27. $evm->addEventSubscriber(new ReferenceIntegrityListener());
  28. $this->dm = $this->getMockDocumentManager($evm, $this->getMockAnnotatedConfig());
  29. $this->populateOneNullify();
  30. $this->populateManyNullify();
  31. $this->populateOneRestrict();
  32. $this->populateManyRestrict();
  33. }
  34. public function testOneNullify()
  35. {
  36. $type = $this->dm->getRepository(self::TYPE_ONE_NULLIFY_CLASS)
  37. ->findOneByTitle('One Nullify Type');
  38. $this->assertFalse(is_null($type));
  39. $this->assertTrue(is_object($type));
  40. $this->dm->remove($type);
  41. $this->dm->flush();
  42. $type = $this->dm->getRepository(self::TYPE_ONE_NULLIFY_CLASS)
  43. ->findOneByTitle('One Nullify Type');
  44. $this->assertNull($type);
  45. $article = $this->dm->getRepository(self::ARTICLE_ONE_NULLIFY_CLASS)
  46. ->findOneByTitle('One Nullify Article');
  47. $this->assertNull($article->getType());
  48. $this->dm->clear();
  49. }
  50. public function testManyNullify()
  51. {
  52. $type = $this->dm->getRepository(self::TYPE_MANY_NULLIFY_CLASS)
  53. ->findOneByTitle('Many Nullify Type');
  54. $this->assertFalse(is_null($type));
  55. $this->assertTrue(is_object($type));
  56. $this->dm->remove($type);
  57. $this->dm->flush();
  58. $type = $this->dm->getRepository(self::TYPE_MANY_NULLIFY_CLASS)
  59. ->findOneByTitle('Many Nullify Type');
  60. $this->assertNull($type);
  61. $article = $this->dm->getRepository(self::ARTICLE_MANY_NULLIFY_CLASS)
  62. ->findOneByTitle('Many Nullify Article');
  63. $this->assertNull($article->getType());
  64. $this->dm->clear();
  65. }
  66. /**
  67. * @test
  68. * @expectedException Gedmo\Exception\ReferenceIntegrityStrictException
  69. */
  70. public function testOneRestrict()
  71. {
  72. $type = $this->dm->getRepository(self::TYPE_ONE_RESTRICT_CLASS)
  73. ->findOneByTitle('One Restrict Type');
  74. $this->assertFalse(is_null($type));
  75. $this->assertTrue(is_object($type));
  76. $this->dm->remove($type);
  77. $this->dm->flush();
  78. }
  79. /**
  80. * @test
  81. * @expectedException Gedmo\Exception\ReferenceIntegrityStrictException
  82. */
  83. public function testManyRestrict()
  84. {
  85. $type = $this->dm->getRepository(self::TYPE_MANY_RESTRICT_CLASS)
  86. ->findOneByTitle('Many Restrict Type');
  87. $this->assertFalse(is_null($type));
  88. $this->assertTrue(is_object($type));
  89. $this->dm->remove($type);
  90. $this->dm->flush();
  91. }
  92. private function populateOneNullify()
  93. {
  94. $typeClass = self::TYPE_ONE_NULLIFY_CLASS;
  95. $type = new $typeClass();
  96. $type->setTitle('One Nullify Type');
  97. $articleClass = self::ARTICLE_ONE_NULLIFY_CLASS;
  98. $article = new $articleClass();
  99. $article->setTitle('One Nullify Article');
  100. $article->setType($type);
  101. $this->dm->persist($article);
  102. $this->dm->persist($type);
  103. $this->dm->flush();
  104. $this->dm->clear();
  105. }
  106. private function populateManyNullify()
  107. {
  108. $typeClass = self::TYPE_MANY_NULLIFY_CLASS;
  109. $type = new $typeClass();
  110. $type->setTitle('Many Nullify Type');
  111. $articleClass = self::ARTICLE_MANY_NULLIFY_CLASS;
  112. $article = new $articleClass();
  113. $article->setTitle('Many Nullify Article');
  114. $article->setType($type);
  115. $this->dm->persist($article);
  116. $this->dm->persist($type);
  117. $this->dm->flush();
  118. $this->dm->clear();
  119. }
  120. private function populateOneRestrict()
  121. {
  122. $typeClass = self::TYPE_ONE_RESTRICT_CLASS;
  123. $type = new $typeClass();
  124. $type->setTitle('One Restrict Type');
  125. $articleClass = self::ARTICLE_ONE_RESTRICT_CLASS;
  126. $article = new $articleClass();
  127. $article->setTitle('One Restrict Article');
  128. $article->setType($type);
  129. $this->dm->persist($article);
  130. $this->dm->persist($type);
  131. $this->dm->flush();
  132. $this->dm->clear();
  133. }
  134. private function populateManyRestrict()
  135. {
  136. $typeClass = self::TYPE_MANY_RESTRICT_CLASS;
  137. $type = new $typeClass();
  138. $type->setTitle('Many Restrict Type');
  139. $articleClass = self::ARTICLE_MANY_RESTRICT_CLASS;
  140. $article = new $articleClass();
  141. $article->setTitle('Many Restrict Article');
  142. $article->setType($type);
  143. $this->dm->persist($article);
  144. $this->dm->persist($type);
  145. $this->dm->flush();
  146. $this->dm->clear();
  147. }
  148. }