TreeSlugHandlerDocumentTest.php 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <?php
  2. namespace Gedmo\Sluggable;
  3. use Tool\BaseTestCaseMongoODM;
  4. use Doctrine\Common\EventManager;
  5. use Sluggable\Fixture\Document\Handler\TreeSlug;
  6. /**
  7. * These are tests for sluggable behavior
  8. *
  9. * @author Gediminas Morkevicius <gediminas.morkevicius@gmail.com>
  10. * @package Gedmo.Sluggable
  11. * @link http://www.gediminasm.org
  12. * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
  13. */
  14. class TreeSlugHandlerDocumentTest extends BaseTestCaseMongoODM
  15. {
  16. const SLUG = 'Sluggable\\Fixture\\Document\\Handler\\TreeSlug';
  17. protected function setUp()
  18. {
  19. parent::setUp();
  20. $evm = new EventManager();
  21. $evm->addEventSubscriber(new SluggableListener);
  22. $this->getMockDocumentManager($evm);
  23. }
  24. public function testSlugGeneration()
  25. {
  26. $this->populate();
  27. $repo = $this->dm->getRepository(self::SLUG);
  28. $food = $repo->findOneByTitle('Food');
  29. $this->assertEquals('food', $food->getSlug());
  30. $fruits = $repo->findOneByTitle('Fruits');
  31. $this->assertEquals('food/fruits', $fruits->getSlug());
  32. $oranges = $repo->findOneByTitle('Oranges');
  33. $this->assertEquals('food/fruits/oranges', $oranges->getSlug());
  34. $citrons = $repo->findOneByTitle('Citrons');
  35. $this->assertEquals('food/fruits/citrons', $citrons->getSlug());
  36. }
  37. public function testSlugUpdates()
  38. {
  39. $this->populate();
  40. $repo = $this->dm->getRepository(self::SLUG);
  41. $fruits = $repo->findOneByTitle('Fruits');
  42. $fruits->setTitle('Fructis');
  43. $this->dm->persist($fruits);
  44. $this->dm->flush();
  45. $this->assertEquals('food/fructis', $fruits->getSlug());
  46. $oranges = $repo->findOneByTitle('Oranges');
  47. $this->assertEquals('food/fructis/oranges', $oranges->getSlug());
  48. $citrons = $repo->findOneByTitle('Citrons');
  49. $this->assertEquals('food/fructis/citrons', $citrons->getSlug());
  50. $food = $repo->findOneByTitle('Food');
  51. $food->setTitle('Foodissimo');
  52. $this->dm->persist($food);
  53. $this->dm->flush();
  54. $this->assertEquals('foodissimo', $food->getSlug());
  55. $this->assertEquals('foodissimo/fructis/oranges', $oranges->getSlug());
  56. $this->assertEquals('foodissimo/fructis/citrons', $citrons->getSlug());
  57. }
  58. private function populate()
  59. {
  60. $food = new TreeSlug;
  61. $food->setTitle('Food');
  62. $this->dm->persist($food);
  63. $fruits = new TreeSlug;
  64. $fruits->setTitle('Fruits');
  65. $fruits->setParent($food);
  66. $this->dm->persist($fruits);
  67. $vegitables = new TreeSlug;
  68. $vegitables->setTitle('Vegitables');
  69. $vegitables->setParent($food);
  70. $this->dm->persist($vegitables);
  71. $milk = new TreeSlug;
  72. $milk->setTitle('Milk');
  73. $milk->setParent($food);
  74. $this->dm->persist($milk);
  75. $meat = new TreeSlug;
  76. $meat->setTitle('Meat');
  77. $meat->setParent($food);
  78. $this->dm->persist($meat);
  79. $oranges = new TreeSlug;
  80. $oranges->setTitle('Oranges');
  81. $oranges->setParent($fruits);
  82. $this->dm->persist($oranges);
  83. $citrons = new TreeSlug;
  84. $citrons->setTitle('Citrons');
  85. $citrons->setParent($fruits);
  86. $this->dm->persist($citrons);
  87. $this->dm->flush();
  88. }
  89. }