SluggableDocumentTest.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <?php
  2. namespace Gedmo\Sluggable;
  3. use Sluggable\Fixture\Document\Article;
  4. /**
  5. * These are tests for sluggable behavior
  6. *
  7. * @author Gediminas Morkevicius <gediminas.morkevicius@gmail.com>
  8. * @package Gedmo.Sluggable
  9. * @link http://www.gediminasm.org
  10. * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
  11. */
  12. class SluggableDocumentTest extends \PHPUnit_Framework_TestCase
  13. {
  14. const TEST_ENTITY_CLASS = 'Sluggable\Fixture\Document\Article';
  15. /**
  16. * @var DocumentManager
  17. */
  18. private $dm;
  19. public function setUp()
  20. {
  21. $config = new \Doctrine\ODM\MongoDB\Configuration();
  22. $config->setProxyDir(__DIR__ . '/Proxy');
  23. $config->setProxyNamespace('Gedmo\Sluggable\Proxies');
  24. $config->setHydratorDir(__DIR__ . '/Hydrator');
  25. $config->setHydratorNamespace('Hydrator');
  26. $config->setDefaultDB('doctrine_odm_sluggable_tests');
  27. $config->setLoggerCallable(function(array $log) {
  28. print_r($log);
  29. });
  30. $reader = new \Doctrine\Common\Annotations\AnnotationReader();
  31. $reader->setDefaultAnnotationNamespace('Doctrine\ODM\MongoDB\Mapping\\');
  32. $config->setMetadataDriverImpl(
  33. new \Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver($reader, __DIR__ . '/Fixture/Document')
  34. );
  35. $evm = new \Doctrine\Common\EventManager();
  36. $sluggableListener = new ODM\MongoDB\SluggableListener();
  37. $evm->addEventSubscriber($sluggableListener);
  38. $this->dm = \Doctrine\ODM\MongoDB\DocumentManager::create(
  39. new \Doctrine\MongoDB\Connection(),
  40. $config,
  41. $evm
  42. );
  43. $this->populate();
  44. }
  45. public function testSlugGeneration()
  46. {
  47. // test insert
  48. $repo = $this->dm->getRepository(self::TEST_ENTITY_CLASS);
  49. $article = $repo->findOneByTitle('My Title');
  50. $this->assertEquals('my-title-the-code', $article->getSlug());
  51. // test update
  52. $article->setTitle('New Title');
  53. $this->dm->persist($article);
  54. $this->dm->flush();
  55. $this->dm->clear();
  56. $article = $repo->findOneByTitle('New Title');
  57. $this->assertEquals('new-title-the-code', $article->getSlug());
  58. }
  59. public function testUniqueSlugGeneration()
  60. {
  61. for ($i = 0; $i < 12; $i++) {
  62. $article = new Article();
  63. $article->setTitle('My Title');
  64. $article->setCode('The Code');
  65. $this->dm->persist($article);
  66. $this->dm->flush();
  67. $this->dm->clear();
  68. $this->assertEquals($article->getSlug(), 'my-title-the-code-' . ($i + 1));
  69. }
  70. }
  71. private function populate()
  72. {
  73. $qb = $this->dm->createQueryBuilder(self::TEST_ENTITY_CLASS);
  74. $q = $qb->remove()
  75. ->getQuery();
  76. $q->execute();
  77. $art0 = new Article();
  78. $art0->setTitle('My Title');
  79. $art0->setCode('The Code');
  80. $this->dm->persist($art0);
  81. $this->dm->flush();
  82. $this->dm->clear();
  83. }
  84. }