FavoriteControllerTest.php 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <?php
  2. namespace Muzich\CoreBundle\Tests\Controller;
  3. use Muzich\CoreBundle\lib\FunctionalTest;
  4. class FavoriteControllerTest extends FunctionalTest
  5. {
  6. /**
  7. * Test du listing de ses favoris
  8. */
  9. public function testMyFavorites()
  10. {
  11. $this->connectUser('bux', 'toor');
  12. // On va cliquer sur le lien 'Mes favoris'
  13. $this->exist('a[href="'.($url = $this->generateUrl('favorites_my_list')).'"]');
  14. $link = $this->selectLink('a[href="'.$url.'"]');
  15. // On clique dessus
  16. $this->clickOnLink($link);
  17. $this->isResponseSuccess();
  18. $elements = $this->getDoctrine()->getEntityManager()->createQuery("
  19. SELECT e FROM MuzichCoreBundle:Element e
  20. LEFT JOIN e.elements_favorites ef
  21. WHERE ef.user = :uid
  22. ")->setParameter('uid', $this->getUser()->getId())
  23. ->getResult()
  24. ;
  25. $this->assertTrue(!is_null($elements));
  26. if (count($elements))
  27. {
  28. foreach ($elements as $element)
  29. {
  30. $this->exist('li:contains("'.$element->getName().'")');
  31. }
  32. }
  33. }
  34. /**
  35. * Test de la page listant les favoris d'un utilisateur
  36. */
  37. public function testHisFavorites()
  38. {
  39. $this->connectUser('bob', 'toor');
  40. $bux = $this->getDoctrine()->getRepository('MuzichCoreBundle:User')
  41. ->findOneByUsername('bux')
  42. ;
  43. // On se rend sur sa page des favoris de bux
  44. $this->crawler = $this->client->request('GET', $this->generateUrl('favorite_user_list', array('slug' => 'bux')));
  45. $elements = $this->getDoctrine()->getEntityManager()->createQuery("
  46. SELECT e FROM MuzichCoreBundle:Element e
  47. LEFT JOIN e.elements_favorites ef
  48. WHERE ef.user = :uid
  49. ")->setParameter('uid', $bux->getId())
  50. ->getResult()
  51. ;
  52. $this->assertTrue(!is_null($elements));
  53. if (count($elements))
  54. {
  55. foreach ($elements as $element)
  56. {
  57. $this->exist('li:contains("'.$element->getName().'")');
  58. }
  59. }
  60. }
  61. /**
  62. * Test d'ajout en favori un element, puis son retrait
  63. * Ce test dépend actuellement du fait que l'élément testé se truove sur la
  64. * page du groupe en question
  65. */
  66. public function testFavoritesManagement()
  67. {
  68. $this->connectUser('bob', 'toor');
  69. // On se rend sur la page du groupe Dudeldrum
  70. $DUDELDRUM = $this->getDoctrine()->getRepository('MuzichCoreBundle:Group')
  71. ->findOneBySlug('dudeldrum')
  72. ->getSingleResult()
  73. ;
  74. $element_DUDELDRUM = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
  75. ->findOneByName('DUDELDRUM')
  76. ;
  77. // En base l'enregistrement n'existe pas encore
  78. $favorite = $this->getDoctrine()->getRepository('MuzichCoreBundle:UsersElementsFavorites')->findOneBy(array(
  79. 'user' => $this->getUser()->getId(),
  80. 'element' => $element_DUDELDRUM->getId()
  81. ));
  82. $this->assertTrue(is_null($favorite));
  83. $this->crawler = $this->client->request(
  84. 'GET',
  85. $this->generateUrl('show_group', array('slug' => $DUDELDRUM->getSlug()))
  86. );
  87. $this->isResponseSuccess();
  88. // L'élément est présent sur la page
  89. $this->exist('li:contains("DUDELDRUM")');
  90. $this->exist('a[href="'.($url = $this->generateUrl('favorite_add', array(
  91. 'id' => $element_DUDELDRUM->getId(),
  92. 'token' => $this->getUser()->getPersonalHash()
  93. ))).'"]');
  94. $link = $this->selectLink('a[href="'.$url.'"]');
  95. $this->clickOnLink($link);
  96. $this->isResponseRedirection();
  97. $this->followRedirection();
  98. $this->isResponseSuccess();
  99. // Le lien pour ajouter aux favoris a disparus
  100. $this->exist('li:contains("DUDELDRUM")');
  101. $this->notExist('a[href="'.$url.'"]');
  102. // En base l'enregistrement existe
  103. $favorite = $this->getDoctrine()->getRepository('MuzichCoreBundle:UsersElementsFavorites')->findOneBy(array(
  104. 'user' => $this->getUser()->getId(),
  105. 'element' => $element_DUDELDRUM->getId()
  106. ));
  107. $this->assertTrue(!is_null($favorite));
  108. // On se rend sur la page de ses favoris
  109. $this->crawler = $this->client->request('GET', $this->generateUrl('favorites_my_list'));
  110. $this->exist('li:contains("DUDELDRUM")');
  111. }
  112. }