client = self::createClient(); $this->connectUser('bux', 'toor'); // On va cliquer sur le lien 'Mes favoris' $this->exist('a[href="'.($url = $this->generateUrl('favorites_my_list')).'"]'); $link = $this->selectLink('a[href="'.$url.'"]'); // On clique dessus $this->clickOnLink($link); $this->isResponseSuccess(); $elements = $this->getDoctrine()->getEntityManager()->createQuery(" SELECT e FROM MuzichCoreBundle:Element e LEFT JOIN e.elements_favorites ef WHERE ef.user = :uid ")->setParameter('uid', $this->getUser()->getId()) ->getResult() ; $this->assertTrue(!is_null($elements)); if (count($elements)) { foreach ($elements as $element) { $this->exist('li:contains("'.$element->getName().'")'); } } } /** * Test de la page listant les favoris d'un utilisateur */ public function testHisFavorites() { $this->client = self::createClient(); $this->connectUser('bob', 'toor'); $bux = $this->getDoctrine()->getRepository('MuzichCoreBundle:User') ->findOneByUsername('bux') ; // On se rend sur sa page des favoris de bux $this->crawler = $this->client->request('GET', $this->generateUrl('favorite_user_list', array('slug' => 'bux'))); $elements = $this->getDoctrine()->getEntityManager()->createQuery(" SELECT e FROM MuzichCoreBundle:Element e LEFT JOIN e.elements_favorites ef WHERE ef.user = :uid ")->setParameter('uid', $bux->getId()) ->getResult() ; $this->assertTrue(!is_null($elements)); if (count($elements)) { foreach ($elements as $element) { $this->exist('li:contains("'.$element->getName().'")'); } } } /** * Test d'ajout en favori un element, puis son retrait * Ce test dépend actuellement du fait que l'élément testé se truove sur la * page du groupe en question */ public function testFavoritesManagement() { $this->client = self::createClient(); $this->connectUser('bob', 'toor'); // On se rend sur la page du groupe Dudeldrum $DUDELDRUM = $this->getDoctrine()->getRepository('MuzichCoreBundle:Group') ->findOneBySlug('dudeldrum') ->getSingleResult() ; $element_DUDELDRUM = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element') ->findOneByName('DUDELDRUM') ; // En base l'enregistrement n'existe pas encore $favorite = $this->getDoctrine()->getRepository('MuzichCoreBundle:UsersElementsFavorites')->findOneBy(array( 'user' => $this->getUser()->getId(), 'element' => $element_DUDELDRUM->getId() )); $this->assertTrue(is_null($favorite)); $this->crawler = $this->client->request( 'GET', $this->generateUrl('show_group', array('slug' => $DUDELDRUM->getSlug())) ); $this->isResponseSuccess(); // Controle de l'évolution du score de joelle $joelle = $this->getUser('joelle'); $this->assertEquals($joelle->getReputation(), 2); // L'élément est présent sur la page $this->exist('li:contains("DUDELDRUM")'); $this->exist('a[href="'.($url = $this->generateUrl('favorite_add', array( 'id' => $element_DUDELDRUM->getId(), 'token' => $this->getUser()->getPersonalHash() ))).'"]'); $link = $this->selectLink('a[href="'.$url.'"]'); $this->clickOnLink($link); $this->isResponseRedirection(); $this->followRedirection(); $this->isResponseSuccess(); // Le lien pour ajouter aux favoris a disparus $this->exist('li:contains("DUDELDRUM")'); $this->notExist('a[href="'.$url.'"]'); // Il a laissé place aux lien pour le retirer $this->exist('a[href="'.($url_rm = $this->generateUrl('favorite_remove', array( 'id' => $element_DUDELDRUM->getId(), 'token' => $this->getUser()->getPersonalHash() ))).'"]'); // En base l'enregistrement existe $favorite = $this->getDoctrine()->getRepository('MuzichCoreBundle:UsersElementsFavorites')->findOneBy(array( 'user' => $this->getUser()->getId(), 'element' => $element_DUDELDRUM->getId() )); $this->assertTrue(!is_null($favorite)); // Controle de l'évolution du score de joelle $joelle = $this->getUser('joelle'); $this->assertEquals($joelle->getReputation(), 7); // On se rend sur la page de ses favoris $this->crawler = $this->client->request('GET', $this->generateUrl('favorites_my_list')); $this->exist('li:contains("DUDELDRUM")'); // On va maintenant le retirer de nox favoris $this->exist('a[href="'.$url_rm.'"]'); $link = $this->selectLink('a[href="'.$url_rm.'"]'); $this->clickOnLink($link); $this->isResponseRedirection(); $this->followRedirection(); $this->isResponseSuccess(); $this->NotExist('li:contains("DUDELDRUM")'); // En base l'enregistrement a été supprimé $favorite = $this->getDoctrine()->getRepository('MuzichCoreBundle:UsersElementsFavorites')->findOneBy(array( 'user' => $this->getUser()->getId(), 'element' => $element_DUDELDRUM->getId() )); $this->assertTrue(is_null($favorite)); // Controle de l'évolution du score de joelle $joelle = $this->getUser('joelle'); $this->assertEquals($joelle->getReputation(), 2); } public function testAjax() { $this->client = self::createClient(); $this->connectUser('bux', 'toor'); $bux = $this->getUser(); $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element') ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)') ; // Controle de l'évolution du score de joelle $bux = $this->getUser('bux'); $this->assertEquals($bux->getReputation(), 22); // Ajout d'un élément en favoris // Il ajoute cet élément en favoris $url = $this->generateUrl('favorite_add', array( 'id' => $element->getId(), 'token' => $bux->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' => $bux->getId(), 'element' => $element->getId() )); $this->assertTrue(!is_null($fav)); // Controle de l'évolution du score de joelle $bux = $this->getUser('bux'); $this->assertEquals($bux->getReputation(), 22); // On enlève des favoris $url = $this->generateUrl('favorite_remove', array( 'id' => $element->getId(), 'token' => $bux->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' => $bux->getId(), 'element' => $element->getId() )); $this->assertTrue(is_null($fav)); // Controle de l'évolution du score de joelle $bux = $this->getUser('bux'); $this->assertEquals($bux->getReputation(), 22); } /** * Test de la fonction ajax de récupération de plus de favoris */ public function testFilterElements() { $this->client = self::createClient(); $this->connectUser('paul', 'toor'); $paul = $this->getUser(); $hardtek_id = $this->getDoctrine()->getRepository('MuzichCoreBundle:Tag')->findOneByName('Hardtek')->getId(); $tribe_id = $this->getDoctrine()->getRepository('MuzichCoreBundle:Tag')->findOneByName('Tribe')->getId(); // Ouverture de la page favoris $this->crawler = $this->client->request('GET', $this->generateUrl('favorites_my_list')); // On doit voir deux elements pour paul $this->exist('span.element_name:contains("All Is Full Of Pain")'); $this->exist('span.element_name:contains("Heretik System Popof - Resistance")'); // Récupération de la liste avec la kekete ajax pour Tribe $url = $this->generateUrl('favorite_get', array( 'user_id' => $paul->getId(), // Utilisateur pour lequel on demande les favoris 'tags_ids_json' => json_encode(array($tribe_id)) )); $this->crawler = $this->client->request('GET', $url, array(), array(), array( 'HTTP_X-Requested-With' => 'XMLHttpRequest', )); $response_content = json_decode($this->client->getResponse()->getContent(), true); $html = $response_content['html']; $this->isResponseSuccess(); $this->assertTrue(strpos($html, 'All Is Full Of Pain') !== false); $this->assertTrue(strpos($html, 'Heretik System Popof - Resistance') === false); // Récupération de la liste avec la kekete ajax pour Hardtek $url = $this->generateUrl('favorite_get', array( 'user_id' => $paul->getId(), // Utilisateur pour lequel on demande les favoris 'tags_ids_json' => json_encode(array($hardtek_id)) )); $this->crawler = $this->client->request('GET', $url, array(), array(), array( 'HTTP_X-Requested-With' => 'XMLHttpRequest', )); $this->isResponseSuccess(); $response_content = json_decode($this->client->getResponse()->getContent(), true); $html = $response_content['html']; $this->isResponseSuccess(); $this->assertTrue(strpos($html, 'All Is Full Of Pain') !== false); $this->assertTrue(strpos($html, 'Heretik System Popof - Resistance') !== false); // Récupération de la liste avec la kekete ajax pour Tribe + Hardtek $url = $this->generateUrl('favorite_get', array( 'user_id' => $paul->getId(), // Utilisateur pour lequel on demande les favoris 'tags_ids_json' => json_encode(array($hardtek_id, $tribe_id)) )); $this->crawler = $this->client->request('GET', $url, array(), array(), array( 'HTTP_X-Requested-With' => 'XMLHttpRequest', )); $this->isResponseSuccess(); $response_content = json_decode($this->client->getResponse()->getContent(), true); $html = $response_content['html']; $this->isResponseSuccess(); $this->assertTrue(strpos($html, 'All Is Full Of Pain') !== false); $this->assertTrue(strpos($html, 'Heretik System Popof - Resistance') !== false); } }