client = self::createClient(); $this->connectUser('paul', 'toor'); $paul = $this->getUser(); $bux = $this->getUser('bux'); // Actuellement il n'y a aucun event d'ouvert pour bux (fixtures) $result = $this->getDoctrine()->getEntityManager() ->createQuery('SELECT e FROM MuzichCoreBundle:Event e WHERE e.user = :uid' ) ->setParameter('uid', $bux->getId()) ->getArrayResult() ; $this->assertEquals(count($result), 0); $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element') ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)') ; // paul écrit un commentaire sur un des elements a bux $this->crawler = $this->client->request( 'POST', $this->generateUrl('ajax_add_comment', array( 'element_id' => $element->getId(), 'token' => $paul->getPersonalHash() )), array( 'comment' => "Du coup ce com va emettre un event" ), array(), array('HTTP_X-Requested-With' => 'XMLHttpRequest') ); $this->isResponseSuccess(); $response = json_decode($this->client->getResponse()->getContent(), true); $this->assertEquals($response['status'], 'success'); // bux a maintenant un event en base $result = $this->getDoctrine()->getEntityManager() ->createQuery(' SELECT e FROM MuzichCoreBundle:Event e WHERE e.user = :uid' ) ->setParameter('uid', $bux->getId()) ->getArrayResult() ; $this->assertEquals(count($result), 1); $this->assertEquals($result[0]['type'], Event::TYPE_COMMENT_ADDED_ELEMENT); $this->assertEquals($result[0]['count'], 1); $this->assertEquals($result[0]['ids'], json_encode(array((string)$element->getId()))); // paul écrit un autre commentaire sur un deuxième element $element_2 = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element') ->findOneByName('AZYD AZYLUM Live au Café Provisoire') ; $this->crawler = $this->client->request( 'POST', $this->generateUrl('ajax_add_comment', array( 'element_id' => $element_2->getId(), 'token' => $paul->getPersonalHash() )), array( 'comment' => "Du coup ce com va aussi emettre un event" ), array(), array('HTTP_X-Requested-With' => 'XMLHttpRequest') ); $this->isResponseSuccess(); $response = json_decode($this->client->getResponse()->getContent(), true); $this->assertEquals($response['status'], 'success'); // bux a toujours 1 seul event en base $result = $this->getDoctrine()->getEntityManager() ->createQuery(' SELECT e FROM MuzichCoreBundle:Event e WHERE e.user = :uid' ) ->setParameter('uid', $bux->getId()) ->getArrayResult() ; $this->assertEquals(count($result), 1); $this->assertEquals($result[0]['type'], Event::TYPE_COMMENT_ADDED_ELEMENT); // Mais il dénombre deux elements $this->assertEquals($result[0]['count'], 2); $this->assertEquals($result[0]['ids'], json_encode(array((string)$element->getId(), (string)$element_2->getId()))); // Par contre si paul écrit un com sur un de ces deux éléments, pas de changement // au niveau de l'event $this->crawler = $this->client->request( 'POST', $this->generateUrl('ajax_add_comment', array( 'element_id' => $element_2->getId(), 'token' => $paul->getPersonalHash() )), array( 'comment' => "Du coup ce com va aussi emettre un event" ), array(), array('HTTP_X-Requested-With' => 'XMLHttpRequest') ); $this->isResponseSuccess(); $response = json_decode($this->client->getResponse()->getContent(), true); $this->assertEquals($response['status'], 'success'); // bux a toujours 1 seul event en base $result = $this->getDoctrine()->getEntityManager() ->createQuery('SELECT e FROM MuzichCoreBundle:Event e WHERE e.user = :uid' ) ->setParameter('uid', $bux->getId()) ->getArrayResult() ; $this->assertEquals(count($result), 1); $this->assertEquals($result[0]['type'], Event::TYPE_COMMENT_ADDED_ELEMENT); // Mais il dénombre deux elements $this->assertEquals($result[0]['count'], 2); $this->assertEquals($result[0]['ids'], json_encode(array((string)$element->getId(), (string)$element_2->getId()))); // Nous allons maintenant consulter ces events avec bux $this->disconnectUser(); $this->connectUser('bux', 'toor'); // bux doit pouvoir voir dans la barre de droite qu'il a deux elements avec de // nouveaux commentaire $this->exist('div#events div.comments a span.new_comments:contains("2")'); // Il y a d'ailleurs un lien pour les afficher $url = $this->generateUrl('event_view_elements', array('event_id' => $result[0]['id'])); $this->exist('div#events div.comments a[href="'.$url.'"]'); // On se rend sur ce lien $this->crawler = $this->client->request('GET', $url); $this->isResponseRedirection(); $this->followRedirection(); $this->isResponseSuccess(); // nous somme sur la page home $this->exist('ul.elements'); // et on peux voir les deux éléments qui ont reçu le nouveau commentaire $this->exist('li#element_'.$element->getId()); $this->exist('li#element_'.$element_2->getId()); // On voit egallement le bouton dans les filtres // /!\ la je ne teste pas si il est affiché ou caché /!\ $url = $this->generateUrl('ajax_filter_remove_ids'); $this->exist('div.more_filters a[href="'.$url.'"]'); // L'objet Event ne doit plus être en base maintenant qu'il a été vu $result = $this->getDoctrine()->getEntityManager() ->createQuery('SELECT e FROM MuzichCoreBundle:Event e WHERE e.user = :uid' ) ->setParameter('uid', $bux->getId()) ->getArrayResult() ; $this->assertEquals(count($result), 0); // Du coup on clique dessus pour revenir a un etat normal $this->crawler = $this->client->request( 'GET', $url, array(), array(), array('HTTP_X-Requested-With' => 'XMLHttpRequest') ); $this->isResponseSuccess(); $response = json_decode($this->client->getResponse()->getContent(), true); $this->assertEquals($response['status'], 'success'); // la réponse contient bien un des éléments qui n'a pas été commenté tout a l'heure $this->assertTrue(!is_null(strpos($response['html'], 'Babylon Pression - Des Tasers et des Pauvres'))); // Et si on réaffiche la page home, le filtre a bien été réinitialisé $this->crawler = $this->client->request('GET', $this->generateUrl('home')); $this->isResponseSuccess(); $this->exist('li.element:contains("Babylon Pression - Des Tasers et des Pauvres")'); } public function testFavoriteAdded() { $this->client = self::createClient(); $this->connectUser('paul', 'toor'); $paul = $this->getUser(); $bux = $this->getUser('bux'); // Actuellement il n'y a aucun event d'ouvert pour bux (fixtures) $result = $this->getDoctrine()->getEntityManager() ->createQuery('SELECT e FROM MuzichCoreBundle:Event e WHERE e.user = :uid' ) ->setParameter('uid', $bux->getId()) ->getArrayResult() ; $this->assertEquals(count($result), 0); $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element') ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)') ; // Ajout d'un élément en favoris // Il ajoute cet élément en favoris $url = $this->generateUrl('favorite_add', array( 'id' => $element->getId(), 'token' => $paul->getPersonalHash() )); $crawler = $this->client->request('GET', $url, array(), array(), array( 'HTTP_X-Requested-With' => 'XMLHttpRequest', )); $this->isResponseSuccess(); // On contrôle la présence du favoris $fav = $this->getDoctrine()->getRepository('MuzichCoreBundle:UsersElementsFavorites') ->findOneBy(array( 'user' => $paul->getId(), 'element' => $element->getId() )); $this->assertTrue(!is_null($fav)); // bux a maintenant un event en base $result = $this->getDoctrine()->getEntityManager() ->createQuery(' SELECT e FROM MuzichCoreBundle:Event e WHERE e.user = :uid' ) ->setParameter('uid', $bux->getId()) ->getArrayResult() ; $this->assertEquals(count($result), 1); $this->assertEquals($result[0]['type'], Event::TYPE_FAV_ADDED_ELEMENT); $this->assertEquals($result[0]['count'], 1); $this->assertEquals($result[0]['ids'], json_encode(array((string)$element->getId()))); // On enlève des favoris $url = $this->generateUrl('favorite_remove', array( 'id' => $element->getId(), 'token' => $paul->getPersonalHash() )); $crawler = $this->client->request('GET', $url, array(), array(), array( 'HTTP_X-Requested-With' => 'XMLHttpRequest', )); // On contrôle l'absence du favoris $fav = $this->getDoctrine()->getRepository('MuzichCoreBundle:UsersElementsFavorites') ->findOneBy(array( 'user' => $paul->getId(), 'element' => $element->getId() )); $this->assertTrue(is_null($fav)); // bux a toujours qu'un event avec un seul element signalé. $result = $this->getDoctrine()->getEntityManager() ->createQuery(' SELECT e FROM MuzichCoreBundle:Event e WHERE e.user = :uid' ) ->setParameter('uid', $bux->getId()) ->getArrayResult() ; $this->assertEquals(count($result), 1); $this->assertEquals($result[0]['type'], Event::TYPE_FAV_ADDED_ELEMENT); $this->assertEquals($result[0]['count'], 1); $this->assertEquals($result[0]['ids'], json_encode(array((string)$element->getId()))); // Pour le moment pas de tests supplémentaire comme mettre de nouveaux favoris // ou consulter la liste des éléments concernés. Il faudrait coder ces test certe. // Mais la refactorisation du code fait qu'il n'y a que le type (Event) de diféfrent. // donc a coder (tests) mais pas urgent a l'isntant. } /** * Ce test teste le déclenchement d'événement qui s'effctue lorsque un * nouveau commentaire est écrit sur un élément que l'on a choisis de "suivre" * */ public function testNewCommentEventOnOtherElement() { $this->client = self::createClient(); $this->connectUser('paul', 'toor'); $paul = $this->getUser(); // Actuellement il n'y a aucun event d'ouvert pour paul (fixtures) $result = $this->getDoctrine()->getEntityManager() ->createQuery('SELECT e FROM MuzichCoreBundle:Event e WHERE e.user = :uid' ) ->setParameter('uid', $paul->getId()) ->getArrayResult() ; $this->assertEquals(count($result), 0); $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element') ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)') ; // paul écrit un commentaire sur un des elements a bux $this->crawler = $this->client->request( 'POST', $this->generateUrl('ajax_add_comment', array( 'element_id' => $element->getId(), 'token' => $paul->getPersonalHash() )), array( 'comment' => "Je choisis en commentant de suivre l'élément", 'follow' => true ), array(), array('HTTP_X-Requested-With' => 'XMLHttpRequest') ); $this->isResponseSuccess(); $response = json_decode($this->client->getResponse()->getContent(), true); $this->assertEquals($response['status'], 'success'); // On vérifie que paul fait bien partis des suiveurs $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element') ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)') ; $cm = new CommentsManager($element->getComments()); $this->assertTrue($cm->userFollow($paul->getId())); // joelle va egallement suivre cet élément $this->disconnectUser(); $this->connectUser('joelle', 'toor'); $joelle = $this->getUser(); // Actuellement il n'y a aucun event d'ouvert pour joelle (fixtures) $result = $this->getDoctrine()->getEntityManager() ->createQuery('SELECT e FROM MuzichCoreBundle:Event e WHERE e.user = :uid' ) ->setParameter('uid', $joelle->getId()) ->getArrayResult() ; $this->assertEquals(count($result), 0); $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element') ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)') ; // joelle écrit un commentaire sur un des elements a bux $this->crawler = $this->client->request( 'POST', $this->generateUrl('ajax_add_comment', array( 'element_id' => $element->getId(), 'token' => $joelle->getPersonalHash() )), array( 'comment' => "Je choisis en commentant de suivre l'élément (joelle)", 'follow' => true ), array(), array('HTTP_X-Requested-With' => 'XMLHttpRequest') ); $this->isResponseSuccess(); $response = json_decode($this->client->getResponse()->getContent(), true); $this->assertEquals($response['status'], 'success'); // On vérifie que jioelle fait bien partis des suiveurs $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element') ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)') ; $cm = new CommentsManager($element->getComments()); $this->assertTrue($cm->userFollow($joelle->getId())); // bux va aller commenter son élément $this->disconnectUser(); $this->connectUser('bux', 'toor'); $bux = $this->getUser(); // Actuellement il n'y a aucun event d'ouvert pour bux (fixtures) $result = $this->getDoctrine()->getEntityManager() ->createQuery('SELECT e FROM MuzichCoreBundle:Event e WHERE e.user = :uid' ) ->setParameter('uid', $joelle->getId()) ->getArrayResult() ; $this->assertEquals(count($result), 0); $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element') ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)') ; // bux écrit un commentaire sur un des elements a bux $this->crawler = $this->client->request( 'POST', $this->generateUrl('ajax_add_comment', array( 'element_id' => $element->getId(), 'token' => $bux->getPersonalHash() )), array( 'comment' => "Voila le com qui declenche les événemetns chez paul et joelle" ), array(), array('HTTP_X-Requested-With' => 'XMLHttpRequest') ); $this->isResponseSuccess(); $response = json_decode($this->client->getResponse()->getContent(), true); $this->assertEquals($response['status'], 'success'); // Paul et Joelle on maintenant des events $result = $this->getDoctrine()->getEntityManager() ->createQuery('SELECT e FROM MuzichCoreBundle:Event e WHERE e.user = :uid AND e.type = :type' ) ->setParameters(array( 'uid' => $paul->getId(), 'type' => Event::TYPE_COMMENT_ADDED_ELEMENT )) ->getArrayResult() ; $this->assertEquals(count($result), 1); $this->assertEquals($result[0]['type'], Event::TYPE_COMMENT_ADDED_ELEMENT); // $this->assertEquals($result[0]['count'], 1); $this->assertEquals($result[0]['ids'], json_encode(array((string)$element->getId()))); $result = $this->getDoctrine()->getEntityManager() ->createQuery('SELECT e FROM MuzichCoreBundle:Event e WHERE e.user = :uid AND e.type = :type' ) ->setParameters(array( 'uid' => $joelle->getId(), 'type' => Event::TYPE_COMMENT_ADDED_ELEMENT )) ->getArrayResult() ; $this->assertEquals(count($result), 1); $this->assertEquals($result[0]['type'], Event::TYPE_COMMENT_ADDED_ELEMENT); // $this->assertEquals($result[0]['count'], 1); $this->assertEquals($result[0]['ids'], json_encode(array((string)$element->getId()))); // bux va envoyer un deuxième commentaire $this->crawler = $this->client->request( 'POST', $this->generateUrl('ajax_add_comment', array( 'element_id' => $element->getId(), 'token' => $bux->getPersonalHash() )), array( 'comment' => "un nouveau com" ), array(), array('HTTP_X-Requested-With' => 'XMLHttpRequest') ); $this->isResponseSuccess(); $response = json_decode($this->client->getResponse()->getContent(), true); $this->assertEquals($response['status'], 'success'); // Pas de mouvement coté événements $result_paul = $this->getDoctrine()->getEntityManager() ->createQuery('SELECT e FROM MuzichCoreBundle:Event e WHERE e.user = :uid AND e.type = :type' ) ->setParameters(array( 'uid' => $paul->getId(), 'type' => Event::TYPE_COMMENT_ADDED_ELEMENT )) ->getArrayResult() ; $this->assertEquals(count($result), 1); $this->assertEquals($result[0]['type'], Event::TYPE_COMMENT_ADDED_ELEMENT); // $this->assertEquals($result[0]['count'], 1); $this->assertEquals($result[0]['ids'], json_encode(array((string)$element->getId()))); $result_jo = $this->getDoctrine()->getEntityManager() ->createQuery('SELECT e FROM MuzichCoreBundle:Event e WHERE e.user = :uid AND e.type = :type' ) ->setParameters(array( 'uid' => $joelle->getId(), 'type' => Event::TYPE_COMMENT_ADDED_ELEMENT )) ->getArrayResult() ; $this->assertEquals(count($result), 1); $this->assertEquals($result[0]['type'], Event::TYPE_COMMENT_ADDED_ELEMENT); // $this->assertEquals($result[0]['count'], 1); $this->assertEquals($result[0]['ids'], json_encode(array((string)$element->getId()))); // Paul va aller consulter son event $this->disconnectUser(); $this->connectUser('paul', 'toor'); $url = $this->generateUrl('event_view_elements', array('event_id' => $result_paul[0]['id'])); // il le consulte $this->crawler = $this->client->request('GET', $url); $this->isResponseRedirection(); $this->followRedirection(); $this->isResponseSuccess(); // L'objet Event ne doit plus être en base maintenant qu'il a été vu $result = $this->getDoctrine()->getEntityManager() ->createQuery('SELECT e FROM MuzichCoreBundle:Event e WHERE e.user = :uid' ) ->setParameter('uid', $paul->getId()) ->getArrayResult() ; $this->assertEquals(count($result), 0); // paul désactive le fait qu'il veut être avertis $this->crawler = $this->client->request( 'POST', $this->generateUrl('ajax_add_comment', array( 'element_id' => $element->getId(), 'token' => $paul->getPersonalHash() )), array( 'comment' => "ze veux plus", 'follow' => false ), array(), array('HTTP_X-Requested-With' => 'XMLHttpRequest') ); $this->isResponseSuccess(); $response = json_decode($this->client->getResponse()->getContent(), true); $this->assertEquals($response['status'], 'success'); // On vérifie que paul fait bien partis des suiveurs $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element') ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)') ; $cm = new CommentsManager($element->getComments()); $this->assertFalse($cm->userFollow($paul->getId())); // au tour de joelle de consulter son event $this->disconnectUser(); $this->connectUser('joelle', 'toor'); $url = $this->generateUrl('event_view_elements', array('event_id' => $result_jo[0]['id'])); // il le consulte $this->crawler = $this->client->request('GET', $url); $this->isResponseRedirection(); $this->followRedirection(); $this->isResponseSuccess(); // L'objet Event ne doit plus être en base maintenant qu'il a été vu $result = $this->getDoctrine()->getEntityManager() ->createQuery('SELECT e FROM MuzichCoreBundle:Event e WHERE e.user = :uid' ) ->setParameter('uid', $joelle->getId()) ->getArrayResult() ; $this->assertEquals(count($result), 0); // joelle garde son follow sur cet élément // bux va de nouveau metre un commentaire $this->disconnectUser(); $this->connectUser('bux', 'toor'); $bux = $this->getUser(); // bux écrit un commentaire sur un des elements a bux $this->crawler = $this->client->request( 'POST', $this->generateUrl('ajax_add_comment', array( 'element_id' => $element->getId(), 'token' => $bux->getPersonalHash() )), array( 'comment' => "ce com va declencher un event chez joelle mais pas chez paul" ), array(), array('HTTP_X-Requested-With' => 'XMLHttpRequest') ); $this->isResponseSuccess(); $response = json_decode($this->client->getResponse()->getContent(), true); $this->assertEquals($response['status'], 'success'); // Paul et Joelle on maintenant des events $result = $this->getDoctrine()->getEntityManager() ->createQuery('SELECT e FROM MuzichCoreBundle:Event e WHERE e.user = :uid AND e.type = :type' ) ->setParameters(array( 'uid' => $paul->getId(), 'type' => Event::TYPE_COMMENT_ADDED_ELEMENT )) ->getArrayResult() ; $this->assertEquals(count($result), 0); $result = $this->getDoctrine()->getEntityManager() ->createQuery('SELECT e FROM MuzichCoreBundle:Event e WHERE e.user = :uid AND e.type = :type' ) ->setParameters(array( 'uid' => $joelle->getId(), 'type' => Event::TYPE_COMMENT_ADDED_ELEMENT )) ->getArrayResult() ; $this->assertEquals(count($result), 1); $this->assertEquals($result[0]['type'], Event::TYPE_COMMENT_ADDED_ELEMENT); // $this->assertEquals($result[0]['count'], 1); $this->assertEquals($result[0]['ids'], json_encode(array((string)$element->getId()))); } public function testFollowEvent() { $this->client = self::createClient(); $this->connectUser('bux', 'toor'); $bux = $this->getUser(); $bob = $this->getUser('bob'); // Actuellement il n'y a aucun event d'ouvert pour paul (fixtures) $result = $this->getDoctrine()->getEntityManager() ->createQuery('SELECT e FROM MuzichCoreBundle:Event e WHERE e.user = :uid' ) ->setParameter('uid', $bob->getId()) ->getArrayResult() ; $this->assertEquals(count($result), 0); // On tente de récupérer l'entité FollowUser $FollowUser = $this->getDoctrine()->getRepository('MuzichCoreBundle:FollowUser') ->findOneBy(array( 'follower' => $bux->getId(), 'followed' => $bob->getId() )) ; // Mais celle-ci doit-être innexistante $this->assertTrue(is_null($FollowUser)); // On va suivre bob $url_follow = $this->generateUrl('follow', array( 'type' => 'user', 'id' => $bob->getId(), 'token' => $bux->getPersonalHash() )); $this->crawler = $this->client->request('GET', $url_follow); $this->isResponseRedirection(); $this->followRedirection(); $this->isResponseSuccess(); // Désormais bob doit avoir un event $result = $this->getDoctrine()->getEntityManager() ->createQuery('SELECT e FROM MuzichCoreBundle:Event e WHERE e.user = :uid AND e.type = :type' ) ->setParameters(array( 'uid' => $bob->getId(), 'type' => Event::TYPE_USER_FOLLOW )) ->getArrayResult() ; $this->assertEquals(count($result), 1); $this->assertEquals($result[0]['type'], Event::TYPE_USER_FOLLOW); $this->assertEquals($result[0]['count'], 1); $this->assertEquals($result[0]['ids'], json_encode(array((string)$bux->getId()))); // On va se connecter avec bob $this->disconnectUser(); $this->connectUser('bob', 'toor'); // bob doit pouvoir voir dans la barre de droite l'event $this->exist('div#events div.follows a span.new_follows:contains("1")'); // Il y a d'ailleurs un lien pour les afficher $url = $this->generateUrl('mynetwork_index', array('event_id' => $result[0]['id'])); $this->exist('div#events div.follows a[href="'.$url.'"]'); // On se rend sur ce lien $this->crawler = $this->client->request('GET', $url); $this->isResponseSuccess(); // On peux voir le lien vers bux en class 'new' $this->exist('ul#followers_users li.new:contains(\'bux\')'); // L'event n'existe d'ailleurs plus en base $result = $this->getDoctrine()->getEntityManager() ->createQuery('SELECT e FROM MuzichCoreBundle:Event e WHERE e.user = :uid' ) ->setParameter('uid', $bob->getId()) ->getArrayResult() ; $this->assertEquals(count($result), 0); } }