FavoriteControllerTest.php 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  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->client = self::createClient();
  12. $this->connectUser('bux', 'toor');
  13. // On va cliquer sur le lien 'Mes favoris'
  14. $this->exist('a[href="'.($url = $this->generateUrl('favorites_my_list')).'"]');
  15. $link = $this->selectLink('a[href="'.$url.'"]');
  16. // On clique dessus
  17. $this->clickOnLink($link);
  18. $this->isResponseSuccess();
  19. $elements = $this->getDoctrine()->getEntityManager()->createQuery("
  20. SELECT e FROM MuzichCoreBundle:Element e
  21. LEFT JOIN e.elements_favorites ef
  22. WHERE ef.user = :uid
  23. ")->setParameter('uid', $this->getUser()->getId())
  24. ->getResult()
  25. ;
  26. $this->assertTrue(!is_null($elements));
  27. if (count($elements))
  28. {
  29. foreach ($elements as $element)
  30. {
  31. $this->exist('li:contains("'.$element->getName().'")');
  32. }
  33. }
  34. }
  35. /**
  36. * Test de la page listant les favoris d'un utilisateur
  37. */
  38. public function testHisFavorites()
  39. {
  40. $this->client = self::createClient();
  41. $this->connectUser('bob', 'toor');
  42. $bux = $this->getDoctrine()->getRepository('MuzichCoreBundle:User')
  43. ->findOneByUsername('bux')
  44. ;
  45. // On se rend sur sa page des favoris de bux
  46. $this->crawler = $this->client->request('GET', $this->generateUrl('favorite_user_list', array('slug' => 'bux')));
  47. $elements = $this->getDoctrine()->getEntityManager()->createQuery("
  48. SELECT e FROM MuzichCoreBundle:Element e
  49. LEFT JOIN e.elements_favorites ef
  50. WHERE ef.user = :uid
  51. ")->setParameter('uid', $bux->getId())
  52. ->getResult()
  53. ;
  54. $this->assertTrue(!is_null($elements));
  55. if (count($elements))
  56. {
  57. foreach ($elements as $element)
  58. {
  59. $this->exist('li:contains("'.$element->getName().'")');
  60. }
  61. }
  62. }
  63. /**
  64. * Test d'ajout en favori un element, puis son retrait
  65. * Ce test dépend actuellement du fait que l'élément testé se truove sur la
  66. * page du groupe en question
  67. */
  68. public function testFavoritesManagement()
  69. {
  70. $this->client = self::createClient();
  71. $this->connectUser('bob', 'toor');
  72. // On se rend sur la page du groupe Dudeldrum
  73. $DUDELDRUM = $this->getDoctrine()->getRepository('MuzichCoreBundle:Group')
  74. ->findOneBySlug('dudeldrum')
  75. ->getSingleResult()
  76. ;
  77. $element_DUDELDRUM = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
  78. ->findOneByName('DUDELDRUM')
  79. ;
  80. // En base l'enregistrement n'existe pas encore
  81. $favorite = $this->getDoctrine()->getRepository('MuzichCoreBundle:UsersElementsFavorites')->findOneBy(array(
  82. 'user' => $this->getUser()->getId(),
  83. 'element' => $element_DUDELDRUM->getId()
  84. ));
  85. $this->assertTrue(is_null($favorite));
  86. $this->crawler = $this->client->request(
  87. 'GET',
  88. $this->generateUrl('show_group', array('slug' => $DUDELDRUM->getSlug()))
  89. );
  90. $this->isResponseSuccess();
  91. // Controle de l'évolution du score de joelle
  92. $joelle = $this->getUser('joelle');
  93. $this->assertEquals($joelle->getReputation(), 2);
  94. // L'élément est présent sur la page
  95. $this->exist('li:contains("DUDELDRUM")');
  96. $this->exist('a[href="'.($url = $this->generateUrl('favorite_add', array(
  97. 'id' => $element_DUDELDRUM->getId(),
  98. 'token' => $this->getUser()->getPersonalHash()
  99. ))).'"]');
  100. $link = $this->selectLink('a[href="'.$url.'"]');
  101. $this->clickOnLink($link);
  102. $this->isResponseRedirection();
  103. $this->followRedirection();
  104. $this->isResponseSuccess();
  105. // Le lien pour ajouter aux favoris a disparus
  106. $this->exist('li:contains("DUDELDRUM")');
  107. $this->notExist('a[href="'.$url.'"]');
  108. // Il a laissé place aux lien pour le retirer
  109. $this->exist('a[href="'.($url_rm = $this->generateUrl('favorite_remove', array(
  110. 'id' => $element_DUDELDRUM->getId(),
  111. 'token' => $this->getUser()->getPersonalHash()
  112. ))).'"]');
  113. // En base l'enregistrement existe
  114. $favorite = $this->getDoctrine()->getRepository('MuzichCoreBundle:UsersElementsFavorites')->findOneBy(array(
  115. 'user' => $this->getUser()->getId(),
  116. 'element' => $element_DUDELDRUM->getId()
  117. ));
  118. $this->assertTrue(!is_null($favorite));
  119. // Controle de l'évolution du score de joelle
  120. $joelle = $this->getUser('joelle');
  121. $this->assertEquals($joelle->getReputation(), 7);
  122. // On se rend sur la page de ses favoris
  123. $this->crawler = $this->client->request('GET', $this->generateUrl('favorites_my_list'));
  124. $this->exist('li:contains("DUDELDRUM")');
  125. // On va maintenant le retirer de nox favoris
  126. $this->exist('a[href="'.$url_rm.'"]');
  127. $link = $this->selectLink('a[href="'.$url_rm.'"]');
  128. $this->clickOnLink($link);
  129. $this->isResponseRedirection();
  130. $this->followRedirection();
  131. $this->isResponseSuccess();
  132. $this->NotExist('li:contains("DUDELDRUM")');
  133. // En base l'enregistrement a été supprimé
  134. $favorite = $this->getDoctrine()->getRepository('MuzichCoreBundle:UsersElementsFavorites')->findOneBy(array(
  135. 'user' => $this->getUser()->getId(),
  136. 'element' => $element_DUDELDRUM->getId()
  137. ));
  138. $this->assertTrue(is_null($favorite));
  139. // Controle de l'évolution du score de joelle
  140. $joelle = $this->getUser('joelle');
  141. $this->assertEquals($joelle->getReputation(), 2);
  142. }
  143. public function testAjax()
  144. {
  145. $this->client = self::createClient();
  146. $this->connectUser('bux', 'toor');
  147. $bux = $this->getUser();
  148. $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
  149. ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
  150. ;
  151. // Controle de l'évolution du score de joelle
  152. $bux = $this->getUser('bux');
  153. $this->assertEquals($bux->getReputation(), 22);
  154. // Ajout d'un élément en favoris
  155. // Il ajoute cet élément en favoris
  156. $url = $this->generateUrl('favorite_add', array(
  157. 'id' => $element->getId(),
  158. 'token' => $bux->getPersonalHash()
  159. ));
  160. $crawler = $this->client->request('GET', $url, array(), array(), array(
  161. 'HTTP_X-Requested-With' => 'XMLHttpRequest',
  162. ));
  163. $this->isResponseSuccess();
  164. // On contrôle la présence du favoris
  165. $fav = $this->getDoctrine()->getRepository('MuzichCoreBundle:UsersElementsFavorites')
  166. ->findOneBy(array(
  167. 'user' => $bux->getId(),
  168. 'element' => $element->getId()
  169. ));
  170. $this->assertTrue(!is_null($fav));
  171. // Controle de l'évolution du score de joelle
  172. $bux = $this->getUser('bux');
  173. $this->assertEquals($bux->getReputation(), 22);
  174. // On enlève des favoris
  175. $url = $this->generateUrl('favorite_remove', array(
  176. 'id' => $element->getId(),
  177. 'token' => $bux->getPersonalHash()
  178. ));
  179. $crawler = $this->client->request('GET', $url, array(), array(), array(
  180. 'HTTP_X-Requested-With' => 'XMLHttpRequest',
  181. ));
  182. // On contrôle l'absence du favoris
  183. $fav = $this->getDoctrine()->getRepository('MuzichCoreBundle:UsersElementsFavorites')
  184. ->findOneBy(array(
  185. 'user' => $bux->getId(),
  186. 'element' => $element->getId()
  187. ));
  188. $this->assertTrue(is_null($fav));
  189. // Controle de l'évolution du score de joelle
  190. $bux = $this->getUser('bux');
  191. $this->assertEquals($bux->getReputation(), 22);
  192. }
  193. /**
  194. * Test de la fonction ajax de récupération de plus de favoris
  195. */
  196. public function testFilterElements()
  197. {
  198. $this->client = self::createClient();
  199. $this->connectUser('paul', 'toor');
  200. $paul = $this->getUser();
  201. $hardtek_id = $this->getDoctrine()->getRepository('MuzichCoreBundle:Tag')->findOneByName('Hardtek')->getId();
  202. $tribe_id = $this->getDoctrine()->getRepository('MuzichCoreBundle:Tag')->findOneByName('Tribe')->getId();
  203. // Ouverture de la page favoris
  204. $this->crawler = $this->client->request('GET', $this->generateUrl('favorites_my_list'));
  205. // On doit voir deux elements pour paul
  206. $this->exist('span.element_name:contains("All Is Full Of Pain")');
  207. $this->exist('span.element_name:contains("Heretik System Popof - Resistance")');
  208. // Récupération de la liste avec la kekete ajax pour Tribe
  209. $url = $this->generateUrl('favorite_get', array(
  210. 'user_id' => $paul->getId(), // Utilisateur pour lequel on demande les favoris
  211. 'tags_ids_json' => json_encode(array($tribe_id))
  212. ));
  213. $this->crawler = $this->client->request('GET', $url, array(), array(), array(
  214. 'HTTP_X-Requested-With' => 'XMLHttpRequest',
  215. ));
  216. $response_content = json_decode($this->client->getResponse()->getContent(), true);
  217. $html = $response_content['html'];
  218. $this->isResponseSuccess();
  219. $this->assertTrue(strpos($html, 'All Is Full Of Pain') !== false);
  220. $this->assertTrue(strpos($html, 'Heretik System Popof - Resistance') === false);
  221. // Récupération de la liste avec la kekete ajax pour Hardtek
  222. $url = $this->generateUrl('favorite_get', array(
  223. 'user_id' => $paul->getId(), // Utilisateur pour lequel on demande les favoris
  224. 'tags_ids_json' => json_encode(array($hardtek_id))
  225. ));
  226. $this->crawler = $this->client->request('GET', $url, array(), array(), array(
  227. 'HTTP_X-Requested-With' => 'XMLHttpRequest',
  228. ));
  229. $this->isResponseSuccess();
  230. $response_content = json_decode($this->client->getResponse()->getContent(), true);
  231. $html = $response_content['html'];
  232. $this->isResponseSuccess();
  233. $this->assertTrue(strpos($html, 'All Is Full Of Pain') !== false);
  234. $this->assertTrue(strpos($html, 'Heretik System Popof - Resistance') !== false);
  235. // Récupération de la liste avec la kekete ajax pour Tribe + Hardtek
  236. $url = $this->generateUrl('favorite_get', array(
  237. 'user_id' => $paul->getId(), // Utilisateur pour lequel on demande les favoris
  238. 'tags_ids_json' => json_encode(array($hardtek_id, $tribe_id))
  239. ));
  240. $this->crawler = $this->client->request('GET', $url, array(), array(), array(
  241. 'HTTP_X-Requested-With' => 'XMLHttpRequest',
  242. ));
  243. $this->isResponseSuccess();
  244. $response_content = json_decode($this->client->getResponse()->getContent(), true);
  245. $html = $response_content['html'];
  246. $this->isResponseSuccess();
  247. $this->assertTrue(strpos($html, 'All Is Full Of Pain') !== false);
  248. $this->assertTrue(strpos($html, 'Heretik System Popof - Resistance') !== false);
  249. }
  250. }