SortableTest.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. <?php
  2. namespace Gedmo\Sortable;
  3. use Doctrine\Common\EventManager;
  4. use Tool\BaseTestCaseORM;
  5. use Sortable\Fixture\Node;
  6. use Sortable\Fixture\Item;
  7. use Sortable\Fixture\Category;
  8. /**
  9. * These are tests for sluggable behavior
  10. *
  11. * @author Gediminas Morkevicius <gediminas.morkevicius@gmail.com>
  12. * @package Gedmo.Sluggable
  13. * @link http://www.gediminasm.org
  14. * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
  15. */
  16. class SortableTest extends BaseTestCaseORM
  17. {
  18. const NODE = 'Sortable\\Fixture\\Node';
  19. const ITEM = 'Sortable\\Fixture\\Item';
  20. const CATEGORY = 'Sortable\\Fixture\\Category';
  21. private $nodeId;
  22. protected function setUp()
  23. {
  24. parent::setUp();
  25. $annotationReader = new \Doctrine\Common\Annotations\AnnotationReader();
  26. $annotationReader->setAutoloadAnnotations(true);
  27. $sortable = new SortableListener;
  28. $sortable->setAnnotationReader($annotationReader);
  29. $evm = new EventManager;
  30. $evm->addEventSubscriber($sortable);
  31. $this->getMockSqliteEntityManager($evm);
  32. //$this->startQueryLog();
  33. $this->populate();
  34. }
  35. protected function tearDown()
  36. {
  37. //$this->stopQueryLog();
  38. }
  39. public function testInsertedNewNode()
  40. {
  41. $node = $this->em->find(self::NODE, $this->nodeId);
  42. //$this->assertTrue($node instanceof Sortable);
  43. $this->assertEquals(0, $node->getPosition());
  44. }
  45. public function testInsertSortedList()
  46. {
  47. for ($i = 2; $i <= 10; $i++) {
  48. $node = new Node();
  49. $node->setName("Node".$i);
  50. $node->setPath("/");
  51. $this->em->persist($node);
  52. }
  53. $this->em->flush();
  54. $this->em->clear();
  55. $nodes = $this->em->createQuery("SELECT node FROM Sortable\Fixture\Node node "
  56. ."WHERE node.path = :path ORDER BY node.position")
  57. ->setParameter('path', '/')
  58. ->getResult();
  59. $this->assertEquals(10, count($nodes));
  60. $this->assertEquals('Node1', $nodes[0]->getName());
  61. }
  62. public function testInsertUnsortedList()
  63. {
  64. $this->assertTrue(true);
  65. }
  66. public function testGroupByAssociation()
  67. {
  68. $category1 = new Category();
  69. $category1->setName("Category1");
  70. $this->em->persist($category1);
  71. $category2 = new Category();
  72. $category2->setName("Category2");
  73. $this->em->persist($category2);
  74. $this->em->flush();
  75. $item3 = new Item();
  76. $item3->setName("Item3");
  77. $item3->setCategory($category1);
  78. $this->em->persist($item3);
  79. $item4 = new Item();
  80. $item4->setName("Item4");
  81. $item4->setCategory($category1);
  82. $this->em->persist($item4);
  83. $this->em->flush();
  84. $item1 = new Item();
  85. $item1->setName("Item1");
  86. $item1->setPosition(0);
  87. $item1->setCategory($category1);
  88. $this->em->persist($item1);
  89. $item2 = new Item();
  90. $item2->setName("Item2");
  91. $item2->setPosition(0);
  92. $item2->setCategory($category1);
  93. $this->em->persist($item2);
  94. $item2 = new Item();
  95. $item2->setName("Item2_2");
  96. $item2->setPosition(0);
  97. $item2->setCategory($category2);
  98. $this->em->persist($item2);
  99. $this->em->flush();
  100. $item1 = new Item();
  101. $item1->setName("Item1_2");
  102. $item1->setPosition(0);
  103. $item1->setCategory($category2);
  104. $this->em->persist($item1);
  105. $this->em->flush();
  106. $this->em->clear();
  107. $repo = $this->em->getRepository('Sortable\\Fixture\\Category');
  108. $category1 = $repo->findOneByName('Category1');
  109. $category2 = $repo->findOneByName('Category2');
  110. $repo = $this->em->getRepository('Sortable\\Fixture\\Item');
  111. $items = $repo->getBySortableGroups(array('category' => $category1));
  112. $this->assertEquals("Item1", $items[0]->getName());
  113. $this->assertEquals("Category1", $items[0]->getCategory()->getName());
  114. $this->assertEquals("Item2", $items[1]->getName());
  115. $this->assertEquals("Category1", $items[1]->getCategory()->getName());
  116. $this->assertEquals("Item3", $items[2]->getName());
  117. $this->assertEquals("Category1", $items[2]->getCategory()->getName());
  118. $this->assertEquals("Item4", $items[3]->getName());
  119. $this->assertEquals("Category1", $items[3]->getCategory()->getName());
  120. $items = $repo->getBySortableGroups(array('category' => $category2));
  121. $this->assertEquals("Item1_2", $items[0]->getName());
  122. $this->assertEquals("Category2", $items[0]->getCategory()->getName());
  123. $this->assertEquals("Item2_2", $items[1]->getName());
  124. $this->assertEquals("Category2", $items[1]->getCategory()->getName());
  125. }
  126. protected function getUsedEntityFixtures()
  127. {
  128. return array(
  129. self::NODE,
  130. self::ITEM,
  131. self::CATEGORY
  132. );
  133. }
  134. private function populate()
  135. {
  136. $node = new Node();
  137. $node->setName("Node1");
  138. $node->setPath("/");
  139. $this->em->persist($node);
  140. $this->em->flush();
  141. $this->em->clear();
  142. $this->nodeId = $node->getId();
  143. }
  144. }