Issue173Test.php 4.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <?php
  2. namespace Gedmo\Translatable;
  3. use Doctrine\Common\EventManager;
  4. use Tool\BaseTestCaseORM;
  5. use Gedmo\Translatable\Query\TreeWalker\TranslationWalker;
  6. use Translatable\Fixture\Issue173\Article;
  7. use Translatable\Fixture\Issue173\Category;
  8. use Translatable\Fixture\Issue173\Product;
  9. /**
  10. * These are tests for translatable behavior
  11. *
  12. * @author Gediminas Morkevicius <gediminas.morkevicius@gmail.com>
  13. * @contributor Oscar Balladares liebegrube@gmail.com https://github.com/oscarballadares
  14. * @package Gedmo.Translatable
  15. * @link http://www.gediminasm.org
  16. * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
  17. */
  18. class Issue173Test extends BaseTestCaseORM
  19. {
  20. const CATEGORY = 'Translatable\\Fixture\\Issue173\\Category';
  21. const ARTICLE = 'Translatable\\Fixture\\Issue173\\Article';
  22. const PRODUCT = 'Translatable\\Fixture\\Issue173\\Product';
  23. const TRANSLATION = 'Gedmo\\Translatable\\Entity\\Translation';
  24. private $translatableListener;
  25. protected function setUp()
  26. {
  27. parent::setUp();
  28. $evm = new EventManager;
  29. $this->translatableListener = new TranslatableListener();
  30. $this->translatableListener->setTranslatableLocale('en');
  31. $this->translatableListener->setDefaultLocale('en');
  32. $evm->addEventSubscriber($this->translatableListener);
  33. $this->getMockSqliteEntityManager($evm);
  34. $this->populate();
  35. }
  36. public function testIssue173()
  37. {
  38. $this->em
  39. ->getConfiguration()
  40. ->expects($this->any())
  41. ->method('getCustomHydrationMode')
  42. ->with(TranslationWalker::HYDRATE_OBJECT_TRANSLATION)
  43. ->will($this->returnValue('Gedmo\\Translatable\\Hydrator\\ORM\\ObjectHydrator'))
  44. ;
  45. $categories = $this->getCategoriesThatHasNoAssociations();
  46. $this->assertEquals(count($categories), 1, '$categoriy3 has no associations');
  47. }
  48. public function getCategoriesThatHasNoAssociations()
  49. {
  50. $query = $this->em->createQueryBuilder();
  51. $query2 = $this->em->createQueryBuilder();
  52. $query3 = $this->em->createQueryBuilder();
  53. $dql1 = $query2
  54. ->select('c1')
  55. ->from(self::CATEGORY, 'c1')
  56. ->join('c1.products', 'p')
  57. ->getDql()
  58. ;
  59. $dql2 = $query3
  60. ->select('c2')
  61. ->from(self::CATEGORY, 'c2')
  62. ->join('c2.articles', 'a')
  63. ->getDql()
  64. ;
  65. $query
  66. ->select('c')
  67. ->from(self::CATEGORY, 'c')
  68. ->where($query->expr()->notIn('c.id', $dql1))
  69. ->andWhere($query->expr()->notIn('c.id', $dql2))
  70. ;
  71. return $query->getQuery()->setHint(
  72. \Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER,
  73. 'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker'
  74. )->getResult();
  75. }
  76. private function populate()
  77. {
  78. //Categories
  79. $category1 = new Category;
  80. $category1->setTitle('en category1');
  81. $category2 = new Category;
  82. $category2->setTitle('en category2');
  83. $category3 = new Category;
  84. $category3->setTitle('en category3');
  85. $this->em->persist($category1);
  86. $this->em->persist($category2);
  87. $this->em->persist($category3);
  88. $this->em->flush();
  89. //Articles
  90. $article1 = new Article;
  91. $article1->setTitle('en article1');
  92. $article1->setCategory($category1);
  93. //Products
  94. $product1 = new Product;
  95. $product1->setTitle('en product1');
  96. $product1->setCategory($category2);
  97. $this->em->persist($article1);
  98. $this->em->persist($product1);
  99. $this->em->flush();
  100. $this->translatableListener->setTranslatableLocale('es');
  101. // Categories
  102. $category1->setTitle('es title');
  103. $category2->setTitle('es title');
  104. $category3->setTitle('es title');
  105. $article1->setTitle('es title');
  106. $product1->setTitle('es name');
  107. $this->em->persist($category1);
  108. $this->em->persist($category2);
  109. $this->em->persist($category3);
  110. $this->em->persist($article1);
  111. $this->em->persist($product1);
  112. $this->em->flush();
  113. }
  114. protected function getUsedEntityFixtures()
  115. {
  116. return array(
  117. self::CATEGORY,
  118. self::ARTICLE,
  119. self::PRODUCT,
  120. self::TRANSLATION,
  121. );
  122. }
  123. }