EventTest.php 25KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746
  1. <?php
  2. namespace Muzich\CoreBundle\Tests\Controller;
  3. use Muzich\CoreBundle\lib\FunctionalTest;
  4. use Muzich\CoreBundle\Entity\Event;
  5. use Muzich\CoreBundle\Managers\CommentsManager;
  6. class EventTest extends FunctionalTest
  7. {
  8. /**
  9. * Test de l'inscription d'événement lorsque des commentaires sont ajoutés
  10. *
  11. */
  12. public function testNewCommentEvent()
  13. {
  14. $this->client = self::createClient();
  15. $this->connectUser('paul', 'toor');
  16. $paul = $this->getUser();
  17. $bux = $this->getUser('bux');
  18. // Actuellement il n'y a aucun event d'ouvert pour bux (fixtures)
  19. $result = $this->getDoctrine()->getEntityManager()
  20. ->createQuery('SELECT e FROM MuzichCoreBundle:Event e
  21. WHERE e.user = :uid'
  22. )
  23. ->setParameter('uid', $bux->getId())
  24. ->getArrayResult()
  25. ;
  26. $this->assertEquals(count($result), 0);
  27. $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
  28. ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
  29. ;
  30. // paul écrit un commentaire sur un des elements a bux
  31. $this->crawler = $this->client->request(
  32. 'POST',
  33. $this->generateUrl('ajax_add_comment', array(
  34. 'element_id' => $element->getId(),
  35. 'token' => $paul->getPersonalHash()
  36. )),
  37. array(
  38. 'comment' => "Du coup ce com va emettre un event"
  39. ),
  40. array(),
  41. array('HTTP_X-Requested-With' => 'XMLHttpRequest')
  42. );
  43. $this->isResponseSuccess();
  44. $response = json_decode($this->client->getResponse()->getContent(), true);
  45. $this->assertEquals($response['status'], 'success');
  46. // bux a maintenant un event en base
  47. $result = $this->getDoctrine()->getEntityManager()
  48. ->createQuery('
  49. SELECT e FROM MuzichCoreBundle:Event e
  50. WHERE e.user = :uid'
  51. )
  52. ->setParameter('uid', $bux->getId())
  53. ->getArrayResult()
  54. ;
  55. $this->assertEquals(count($result), 1);
  56. $this->assertEquals($result[0]['type'], Event::TYPE_COMMENT_ADDED_ELEMENT);
  57. $this->assertEquals($result[0]['count'], 1);
  58. $this->assertEquals($result[0]['ids'], json_encode(array((string)$element->getId())));
  59. // paul écrit un autre commentaire sur un deuxième element
  60. $element_2 = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
  61. ->findOneByName('AZYD AZYLUM Live au Café Provisoire')
  62. ;
  63. $this->crawler = $this->client->request(
  64. 'POST',
  65. $this->generateUrl('ajax_add_comment', array(
  66. 'element_id' => $element_2->getId(),
  67. 'token' => $paul->getPersonalHash()
  68. )),
  69. array(
  70. 'comment' => "Du coup ce com va aussi emettre un event"
  71. ),
  72. array(),
  73. array('HTTP_X-Requested-With' => 'XMLHttpRequest')
  74. );
  75. $this->isResponseSuccess();
  76. $response = json_decode($this->client->getResponse()->getContent(), true);
  77. $this->assertEquals($response['status'], 'success');
  78. // bux a toujours 1 seul event en base
  79. $result = $this->getDoctrine()->getEntityManager()
  80. ->createQuery('
  81. SELECT e FROM MuzichCoreBundle:Event e
  82. WHERE e.user = :uid'
  83. )
  84. ->setParameter('uid', $bux->getId())
  85. ->getArrayResult()
  86. ;
  87. $this->assertEquals(count($result), 1);
  88. $this->assertEquals($result[0]['type'], Event::TYPE_COMMENT_ADDED_ELEMENT);
  89. // Mais il dénombre deux elements
  90. $this->assertEquals($result[0]['count'], 2);
  91. $this->assertEquals($result[0]['ids'], json_encode(array((string)$element->getId(), (string)$element_2->getId())));
  92. // Par contre si paul écrit un com sur un de ces deux éléments, pas de changement
  93. // au niveau de l'event
  94. $this->crawler = $this->client->request(
  95. 'POST',
  96. $this->generateUrl('ajax_add_comment', array(
  97. 'element_id' => $element_2->getId(),
  98. 'token' => $paul->getPersonalHash()
  99. )),
  100. array(
  101. 'comment' => "Du coup ce com va aussi emettre un event"
  102. ),
  103. array(),
  104. array('HTTP_X-Requested-With' => 'XMLHttpRequest')
  105. );
  106. $this->isResponseSuccess();
  107. $response = json_decode($this->client->getResponse()->getContent(), true);
  108. $this->assertEquals($response['status'], 'success');
  109. // bux a toujours 1 seul event en base
  110. $result = $this->getDoctrine()->getEntityManager()
  111. ->createQuery('SELECT e FROM MuzichCoreBundle:Event e
  112. WHERE e.user = :uid'
  113. )
  114. ->setParameter('uid', $bux->getId())
  115. ->getArrayResult()
  116. ;
  117. $this->assertEquals(count($result), 1);
  118. $this->assertEquals($result[0]['type'], Event::TYPE_COMMENT_ADDED_ELEMENT);
  119. // Mais il dénombre deux elements
  120. $this->assertEquals($result[0]['count'], 2);
  121. $this->assertEquals($result[0]['ids'], json_encode(array((string)$element->getId(), (string)$element_2->getId())));
  122. // Nous allons maintenant consulter ces events avec bux
  123. $this->disconnectUser();
  124. $this->connectUser('bux', 'toor');
  125. // bux doit pouvoir voir dans la barre de droite qu'il a deux elements avec de
  126. // nouveaux commentaire
  127. $this->exist('div#events div.comments a span.new_comments:contains("2")');
  128. // Il y a d'ailleurs un lien pour les afficher
  129. $url = $this->generateUrl('event_view_elements', array('event_id' => $result[0]['id']));
  130. $this->exist('div#events div.comments a[href="'.$url.'"]');
  131. // On se rend sur ce lien
  132. $this->crawler = $this->client->request('GET', $url);
  133. $this->isResponseRedirection();
  134. $this->followRedirection();
  135. $this->isResponseSuccess();
  136. // nous somme sur la page home
  137. $this->exist('ul.elements');
  138. // et on peux voir les deux éléments qui ont reçu le nouveau commentaire
  139. $this->exist('li#element_'.$element->getId());
  140. $this->exist('li#element_'.$element_2->getId());
  141. // On voit egallement le bouton dans les filtres
  142. // /!\ la je ne teste pas si il est affiché ou caché /!\
  143. $url = $this->generateUrl('ajax_filter_remove_ids');
  144. $this->exist('div.more_filters a[href="'.$url.'"]');
  145. // L'objet Event ne doit plus être en base maintenant qu'il a été vu
  146. $result = $this->getDoctrine()->getEntityManager()
  147. ->createQuery('SELECT e FROM MuzichCoreBundle:Event e
  148. WHERE e.user = :uid'
  149. )
  150. ->setParameter('uid', $bux->getId())
  151. ->getArrayResult()
  152. ;
  153. $this->assertEquals(count($result), 0);
  154. // Du coup on clique dessus pour revenir a un etat normal
  155. $this->crawler = $this->client->request(
  156. 'GET',
  157. $url,
  158. array(),
  159. array(),
  160. array('HTTP_X-Requested-With' => 'XMLHttpRequest')
  161. );
  162. $this->isResponseSuccess();
  163. $response = json_decode($this->client->getResponse()->getContent(), true);
  164. $this->assertEquals($response['status'], 'success');
  165. // la réponse contient bien un des éléments qui n'a pas été commenté tout a l'heure
  166. $this->assertTrue(!is_null(strpos($response['html'], 'Babylon Pression - Des Tasers et des Pauvres')));
  167. // Et si on réaffiche la page home, le filtre a bien été réinitialisé
  168. $this->crawler = $this->client->request('GET', $this->generateUrl('home'));
  169. $this->isResponseSuccess();
  170. $this->exist('li.element:contains("Babylon Pression - Des Tasers et des Pauvres")');
  171. }
  172. public function testFavoriteAdded()
  173. {
  174. $this->client = self::createClient();
  175. $this->connectUser('paul', 'toor');
  176. $paul = $this->getUser();
  177. $bux = $this->getUser('bux');
  178. // Actuellement il n'y a aucun event d'ouvert pour bux (fixtures)
  179. $result = $this->getDoctrine()->getEntityManager()
  180. ->createQuery('SELECT e FROM MuzichCoreBundle:Event e
  181. WHERE e.user = :uid'
  182. )
  183. ->setParameter('uid', $bux->getId())
  184. ->getArrayResult()
  185. ;
  186. $this->assertEquals(count($result), 0);
  187. $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
  188. ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
  189. ;
  190. // Ajout d'un élément en favoris
  191. // Il ajoute cet élément en favoris
  192. $url = $this->generateUrl('favorite_add', array(
  193. 'id' => $element->getId(),
  194. 'token' => $paul->getPersonalHash()
  195. ));
  196. $crawler = $this->client->request('GET', $url, array(), array(), array(
  197. 'HTTP_X-Requested-With' => 'XMLHttpRequest',
  198. ));
  199. $this->isResponseSuccess();
  200. // On contrôle la présence du favoris
  201. $fav = $this->getDoctrine()->getRepository('MuzichCoreBundle:UsersElementsFavorites')
  202. ->findOneBy(array(
  203. 'user' => $paul->getId(),
  204. 'element' => $element->getId()
  205. ));
  206. $this->assertTrue(!is_null($fav));
  207. // bux a maintenant un event en base
  208. $result = $this->getDoctrine()->getEntityManager()
  209. ->createQuery('
  210. SELECT e FROM MuzichCoreBundle:Event e
  211. WHERE e.user = :uid'
  212. )
  213. ->setParameter('uid', $bux->getId())
  214. ->getArrayResult()
  215. ;
  216. $this->assertEquals(count($result), 1);
  217. $this->assertEquals($result[0]['type'], Event::TYPE_FAV_ADDED_ELEMENT);
  218. $this->assertEquals($result[0]['count'], 1);
  219. $this->assertEquals($result[0]['ids'], json_encode(array((string)$element->getId())));
  220. // On enlève des favoris
  221. $url = $this->generateUrl('favorite_remove', array(
  222. 'id' => $element->getId(),
  223. 'token' => $paul->getPersonalHash()
  224. ));
  225. $crawler = $this->client->request('GET', $url, array(), array(), array(
  226. 'HTTP_X-Requested-With' => 'XMLHttpRequest',
  227. ));
  228. // On contrôle l'absence du favoris
  229. $fav = $this->getDoctrine()->getRepository('MuzichCoreBundle:UsersElementsFavorites')
  230. ->findOneBy(array(
  231. 'user' => $paul->getId(),
  232. 'element' => $element->getId()
  233. ));
  234. $this->assertTrue(is_null($fav));
  235. // bux a toujours qu'un event avec un seul element signalé.
  236. $result = $this->getDoctrine()->getEntityManager()
  237. ->createQuery('
  238. SELECT e FROM MuzichCoreBundle:Event e
  239. WHERE e.user = :uid'
  240. )
  241. ->setParameter('uid', $bux->getId())
  242. ->getArrayResult()
  243. ;
  244. $this->assertEquals(count($result), 1);
  245. $this->assertEquals($result[0]['type'], Event::TYPE_FAV_ADDED_ELEMENT);
  246. $this->assertEquals($result[0]['count'], 1);
  247. $this->assertEquals($result[0]['ids'], json_encode(array((string)$element->getId())));
  248. // Pour le moment pas de tests supplémentaire comme mettre de nouveaux favoris
  249. // ou consulter la liste des éléments concernés. Il faudrait coder ces test certe.
  250. // Mais la refactorisation du code fait qu'il n'y a que le type (Event) de diféfrent.
  251. // donc a coder (tests) mais pas urgent a l'isntant.
  252. }
  253. /**
  254. * Ce test teste le déclenchement d'événement qui s'effctue lorsque un
  255. * nouveau commentaire est écrit sur un élément que l'on a choisis de "suivre"
  256. *
  257. */
  258. public function testNewCommentEventOnOtherElement()
  259. {
  260. $this->client = self::createClient();
  261. $this->connectUser('paul', 'toor');
  262. $paul = $this->getUser();
  263. // Actuellement il n'y a aucun event d'ouvert pour paul (fixtures)
  264. $result = $this->getDoctrine()->getEntityManager()
  265. ->createQuery('SELECT e FROM MuzichCoreBundle:Event e
  266. WHERE e.user = :uid'
  267. )
  268. ->setParameter('uid', $paul->getId())
  269. ->getArrayResult()
  270. ;
  271. $this->assertEquals(count($result), 0);
  272. $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
  273. ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
  274. ;
  275. // paul écrit un commentaire sur un des elements a bux
  276. $this->crawler = $this->client->request(
  277. 'POST',
  278. $this->generateUrl('ajax_add_comment', array(
  279. 'element_id' => $element->getId(),
  280. 'token' => $paul->getPersonalHash()
  281. )),
  282. array(
  283. 'comment' => "Je choisis en commentant de suivre l'élément",
  284. 'follow' => true
  285. ),
  286. array(),
  287. array('HTTP_X-Requested-With' => 'XMLHttpRequest')
  288. );
  289. $this->isResponseSuccess();
  290. $response = json_decode($this->client->getResponse()->getContent(), true);
  291. $this->assertEquals($response['status'], 'success');
  292. // On vérifie que paul fait bien partis des suiveurs
  293. $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
  294. ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
  295. ;
  296. $cm = new CommentsManager($element->getComments());
  297. $this->assertTrue($cm->userFollow($paul->getId()));
  298. // joelle va egallement suivre cet élément
  299. $this->disconnectUser();
  300. $this->connectUser('joelle', 'toor');
  301. $joelle = $this->getUser();
  302. // Actuellement il n'y a aucun event d'ouvert pour joelle (fixtures)
  303. $result = $this->getDoctrine()->getEntityManager()
  304. ->createQuery('SELECT e FROM MuzichCoreBundle:Event e
  305. WHERE e.user = :uid'
  306. )
  307. ->setParameter('uid', $joelle->getId())
  308. ->getArrayResult()
  309. ;
  310. $this->assertEquals(count($result), 0);
  311. $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
  312. ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
  313. ;
  314. // joelle écrit un commentaire sur un des elements a bux
  315. $this->crawler = $this->client->request(
  316. 'POST',
  317. $this->generateUrl('ajax_add_comment', array(
  318. 'element_id' => $element->getId(),
  319. 'token' => $joelle->getPersonalHash()
  320. )),
  321. array(
  322. 'comment' => "Je choisis en commentant de suivre l'élément (joelle)",
  323. 'follow' => true
  324. ),
  325. array(),
  326. array('HTTP_X-Requested-With' => 'XMLHttpRequest')
  327. );
  328. $this->isResponseSuccess();
  329. $response = json_decode($this->client->getResponse()->getContent(), true);
  330. $this->assertEquals($response['status'], 'success');
  331. // On vérifie que jioelle fait bien partis des suiveurs
  332. $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
  333. ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
  334. ;
  335. $cm = new CommentsManager($element->getComments());
  336. $this->assertTrue($cm->userFollow($joelle->getId()));
  337. // bux va aller commenter son élément
  338. $this->disconnectUser();
  339. $this->connectUser('bux', 'toor');
  340. $bux = $this->getUser();
  341. // Actuellement il n'y a aucun event d'ouvert pour bux (fixtures)
  342. $result = $this->getDoctrine()->getEntityManager()
  343. ->createQuery('SELECT e FROM MuzichCoreBundle:Event e
  344. WHERE e.user = :uid'
  345. )
  346. ->setParameter('uid', $joelle->getId())
  347. ->getArrayResult()
  348. ;
  349. $this->assertEquals(count($result), 0);
  350. $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
  351. ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
  352. ;
  353. // bux écrit un commentaire sur un des elements a bux
  354. $this->crawler = $this->client->request(
  355. 'POST',
  356. $this->generateUrl('ajax_add_comment', array(
  357. 'element_id' => $element->getId(),
  358. 'token' => $bux->getPersonalHash()
  359. )),
  360. array(
  361. 'comment' => "Voila le com qui declenche les événemetns chez paul et joelle"
  362. ),
  363. array(),
  364. array('HTTP_X-Requested-With' => 'XMLHttpRequest')
  365. );
  366. $this->isResponseSuccess();
  367. $response = json_decode($this->client->getResponse()->getContent(), true);
  368. $this->assertEquals($response['status'], 'success');
  369. // Paul et Joelle on maintenant des events
  370. $result = $this->getDoctrine()->getEntityManager()
  371. ->createQuery('SELECT e FROM MuzichCoreBundle:Event e
  372. WHERE e.user = :uid AND e.type = :type'
  373. )
  374. ->setParameters(array(
  375. 'uid' => $paul->getId(),
  376. 'type' => Event::TYPE_COMMENT_ADDED_ELEMENT
  377. ))
  378. ->getArrayResult()
  379. ;
  380. $this->assertEquals(count($result), 1);
  381. $this->assertEquals($result[0]['type'], Event::TYPE_COMMENT_ADDED_ELEMENT);
  382. //
  383. $this->assertEquals($result[0]['count'], 1);
  384. $this->assertEquals($result[0]['ids'], json_encode(array((string)$element->getId())));
  385. $result = $this->getDoctrine()->getEntityManager()
  386. ->createQuery('SELECT e FROM MuzichCoreBundle:Event e
  387. WHERE e.user = :uid AND e.type = :type'
  388. )
  389. ->setParameters(array(
  390. 'uid' => $joelle->getId(),
  391. 'type' => Event::TYPE_COMMENT_ADDED_ELEMENT
  392. ))
  393. ->getArrayResult()
  394. ;
  395. $this->assertEquals(count($result), 1);
  396. $this->assertEquals($result[0]['type'], Event::TYPE_COMMENT_ADDED_ELEMENT);
  397. //
  398. $this->assertEquals($result[0]['count'], 1);
  399. $this->assertEquals($result[0]['ids'], json_encode(array((string)$element->getId())));
  400. // bux va envoyer un deuxième commentaire
  401. $this->crawler = $this->client->request(
  402. 'POST',
  403. $this->generateUrl('ajax_add_comment', array(
  404. 'element_id' => $element->getId(),
  405. 'token' => $bux->getPersonalHash()
  406. )),
  407. array(
  408. 'comment' => "un nouveau com"
  409. ),
  410. array(),
  411. array('HTTP_X-Requested-With' => 'XMLHttpRequest')
  412. );
  413. $this->isResponseSuccess();
  414. $response = json_decode($this->client->getResponse()->getContent(), true);
  415. $this->assertEquals($response['status'], 'success');
  416. // Pas de mouvement coté événements
  417. $result_paul = $this->getDoctrine()->getEntityManager()
  418. ->createQuery('SELECT e FROM MuzichCoreBundle:Event e
  419. WHERE e.user = :uid AND e.type = :type'
  420. )
  421. ->setParameters(array(
  422. 'uid' => $paul->getId(),
  423. 'type' => Event::TYPE_COMMENT_ADDED_ELEMENT
  424. ))
  425. ->getArrayResult()
  426. ;
  427. $this->assertEquals(count($result), 1);
  428. $this->assertEquals($result[0]['type'], Event::TYPE_COMMENT_ADDED_ELEMENT);
  429. //
  430. $this->assertEquals($result[0]['count'], 1);
  431. $this->assertEquals($result[0]['ids'], json_encode(array((string)$element->getId())));
  432. $result_jo = $this->getDoctrine()->getEntityManager()
  433. ->createQuery('SELECT e FROM MuzichCoreBundle:Event e
  434. WHERE e.user = :uid AND e.type = :type'
  435. )
  436. ->setParameters(array(
  437. 'uid' => $joelle->getId(),
  438. 'type' => Event::TYPE_COMMENT_ADDED_ELEMENT
  439. ))
  440. ->getArrayResult()
  441. ;
  442. $this->assertEquals(count($result), 1);
  443. $this->assertEquals($result[0]['type'], Event::TYPE_COMMENT_ADDED_ELEMENT);
  444. //
  445. $this->assertEquals($result[0]['count'], 1);
  446. $this->assertEquals($result[0]['ids'], json_encode(array((string)$element->getId())));
  447. // Paul va aller consulter son event
  448. $this->disconnectUser();
  449. $this->connectUser('paul', 'toor');
  450. $url = $this->generateUrl('event_view_elements', array('event_id' => $result_paul[0]['id']));
  451. // il le consulte
  452. $this->crawler = $this->client->request('GET', $url);
  453. $this->isResponseRedirection();
  454. $this->followRedirection();
  455. $this->isResponseSuccess();
  456. // L'objet Event ne doit plus être en base maintenant qu'il a été vu
  457. $result = $this->getDoctrine()->getEntityManager()
  458. ->createQuery('SELECT e FROM MuzichCoreBundle:Event e
  459. WHERE e.user = :uid'
  460. )
  461. ->setParameter('uid', $paul->getId())
  462. ->getArrayResult()
  463. ;
  464. $this->assertEquals(count($result), 0);
  465. // paul désactive le fait qu'il veut être avertis
  466. $this->crawler = $this->client->request(
  467. 'POST',
  468. $this->generateUrl('ajax_add_comment', array(
  469. 'element_id' => $element->getId(),
  470. 'token' => $paul->getPersonalHash()
  471. )),
  472. array(
  473. 'comment' => "ze veux plus",
  474. 'follow' => false
  475. ),
  476. array(),
  477. array('HTTP_X-Requested-With' => 'XMLHttpRequest')
  478. );
  479. $this->isResponseSuccess();
  480. $response = json_decode($this->client->getResponse()->getContent(), true);
  481. $this->assertEquals($response['status'], 'success');
  482. // On vérifie que paul fait bien partis des suiveurs
  483. $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
  484. ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
  485. ;
  486. $cm = new CommentsManager($element->getComments());
  487. $this->assertFalse($cm->userFollow($paul->getId()));
  488. // au tour de joelle de consulter son event
  489. $this->disconnectUser();
  490. $this->connectUser('joelle', 'toor');
  491. $url = $this->generateUrl('event_view_elements', array('event_id' => $result_jo[0]['id']));
  492. // il le consulte
  493. $this->crawler = $this->client->request('GET', $url);
  494. $this->isResponseRedirection();
  495. $this->followRedirection();
  496. $this->isResponseSuccess();
  497. // L'objet Event ne doit plus être en base maintenant qu'il a été vu
  498. $result = $this->getDoctrine()->getEntityManager()
  499. ->createQuery('SELECT e FROM MuzichCoreBundle:Event e
  500. WHERE e.user = :uid'
  501. )
  502. ->setParameter('uid', $joelle->getId())
  503. ->getArrayResult()
  504. ;
  505. $this->assertEquals(count($result), 0);
  506. // joelle garde son follow sur cet élément
  507. // bux va de nouveau metre un commentaire
  508. $this->disconnectUser();
  509. $this->connectUser('bux', 'toor');
  510. $bux = $this->getUser();
  511. // bux écrit un commentaire sur un des elements a bux
  512. $this->crawler = $this->client->request(
  513. 'POST',
  514. $this->generateUrl('ajax_add_comment', array(
  515. 'element_id' => $element->getId(),
  516. 'token' => $bux->getPersonalHash()
  517. )),
  518. array(
  519. 'comment' => "ce com va declencher un event chez joelle mais pas chez paul"
  520. ),
  521. array(),
  522. array('HTTP_X-Requested-With' => 'XMLHttpRequest')
  523. );
  524. $this->isResponseSuccess();
  525. $response = json_decode($this->client->getResponse()->getContent(), true);
  526. $this->assertEquals($response['status'], 'success');
  527. // Paul et Joelle on maintenant des events
  528. $result = $this->getDoctrine()->getEntityManager()
  529. ->createQuery('SELECT e FROM MuzichCoreBundle:Event e
  530. WHERE e.user = :uid AND e.type = :type'
  531. )
  532. ->setParameters(array(
  533. 'uid' => $paul->getId(),
  534. 'type' => Event::TYPE_COMMENT_ADDED_ELEMENT
  535. ))
  536. ->getArrayResult()
  537. ;
  538. $this->assertEquals(count($result), 0);
  539. $result = $this->getDoctrine()->getEntityManager()
  540. ->createQuery('SELECT e FROM MuzichCoreBundle:Event e
  541. WHERE e.user = :uid AND e.type = :type'
  542. )
  543. ->setParameters(array(
  544. 'uid' => $joelle->getId(),
  545. 'type' => Event::TYPE_COMMENT_ADDED_ELEMENT
  546. ))
  547. ->getArrayResult()
  548. ;
  549. $this->assertEquals(count($result), 1);
  550. $this->assertEquals($result[0]['type'], Event::TYPE_COMMENT_ADDED_ELEMENT);
  551. //
  552. $this->assertEquals($result[0]['count'], 1);
  553. $this->assertEquals($result[0]['ids'], json_encode(array((string)$element->getId())));
  554. }
  555. public function testFollowEvent()
  556. {
  557. $this->client = self::createClient();
  558. $this->connectUser('bux', 'toor');
  559. $bux = $this->getUser();
  560. $bob = $this->getUser('bob');
  561. // Actuellement il n'y a aucun event d'ouvert pour paul (fixtures)
  562. $result = $this->getDoctrine()->getEntityManager()
  563. ->createQuery('SELECT e FROM MuzichCoreBundle:Event e
  564. WHERE e.user = :uid'
  565. )
  566. ->setParameter('uid', $bob->getId())
  567. ->getArrayResult()
  568. ;
  569. $this->assertEquals(count($result), 0);
  570. // On tente de récupérer l'entité FollowUser
  571. $FollowUser = $this->getDoctrine()->getRepository('MuzichCoreBundle:FollowUser')
  572. ->findOneBy(array(
  573. 'follower' => $bux->getId(),
  574. 'followed' => $bob->getId()
  575. ))
  576. ;
  577. // Mais celle-ci doit-être innexistante
  578. $this->assertTrue(is_null($FollowUser));
  579. // On va suivre bob
  580. $url_follow = $this->generateUrl('follow', array(
  581. 'type' => 'user',
  582. 'id' => $bob->getId(),
  583. 'token' => $bux->getPersonalHash()
  584. ));
  585. $this->crawler = $this->client->request('GET', $url_follow);
  586. $this->isResponseRedirection();
  587. $this->followRedirection();
  588. $this->isResponseSuccess();
  589. // Désormais bob doit avoir un event
  590. $result = $this->getDoctrine()->getEntityManager()
  591. ->createQuery('SELECT e FROM MuzichCoreBundle:Event e
  592. WHERE e.user = :uid AND e.type = :type'
  593. )
  594. ->setParameters(array(
  595. 'uid' => $bob->getId(),
  596. 'type' => Event::TYPE_USER_FOLLOW
  597. ))
  598. ->getArrayResult()
  599. ;
  600. $this->assertEquals(count($result), 1);
  601. $this->assertEquals($result[0]['type'], Event::TYPE_USER_FOLLOW);
  602. $this->assertEquals($result[0]['count'], 1);
  603. $this->assertEquals($result[0]['ids'], json_encode(array((string)$bux->getId())));
  604. // On va se connecter avec bob
  605. $this->disconnectUser();
  606. $this->connectUser('bob', 'toor');
  607. // bob doit pouvoir voir dans la barre de droite l'event
  608. $this->exist('div#events div.follows a span.new_follows:contains("1")');
  609. // Il y a d'ailleurs un lien pour les afficher
  610. $url = $this->generateUrl('mynetwork_index', array('event_id' => $result[0]['id']));
  611. $this->exist('div#events div.follows a[href="'.$url.'"]');
  612. // On se rend sur ce lien
  613. $this->crawler = $this->client->request('GET', $url);
  614. $this->isResponseSuccess();
  615. // On peux voir le lien vers bux en class 'new'
  616. $this->exist('ul#followers_users li.new:contains(\'bux\')');
  617. // L'event n'existe d'ailleurs plus en base
  618. $result = $this->getDoctrine()->getEntityManager()
  619. ->createQuery('SELECT e FROM MuzichCoreBundle:Event e
  620. WHERE e.user = :uid'
  621. )
  622. ->setParameter('uid', $bob->getId())
  623. ->getArrayResult()
  624. ;
  625. $this->assertEquals(count($result), 0);
  626. }
  627. }