<?php /** * Copyright (c) 2012, Agence Française Informatique (AFI). All rights reserved. * * AFI-OPAC 2.0 is free software; you can redistribute it and/or modify * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by * the Free Software Foundation. * * There are special exceptions to the terms and conditions of the AGPL as it * is applied to this software (see README file). * * AFI-OPAC 2.0 is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU AFFERO GENERAL PUBLIC LICENSE for more details. * * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE * along with AFI-OPAC 2.0; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ require_once 'AbstractControllerTestCase.php'; abstract class RechercheControllerNoticeTestCase extends AbstractControllerTestCase { public function setUp() { parent::setUp(); $this->notice = Class_Notice::newInstanceWithId(345, ['annee' => 2002, 'editeur' => 'Gallimard', 'isbn' => '1-234-56789-0', 'type_doc' => Class_TypeDoc::LIVRE, 'url_vignette' => 'NO', 'url_image' => 'NO', 'facettes' => 'A123', 'date_creation' => '2013-12-31', 'unimarc' => "01570nam0 2200325 450 0010007000000100033000070200017000400210027000571000041000841010008001251020007001331050018001401060006001582000106001642100075002702150044003452250023003893000125004123000020005373000137005573300265006943450018009594100051009775120027010286060033010556060060010886760012011487000045011608010039012052218529 a2-86642-370-4bbr.d8,95 EUR aFRb00347575 aFRbDLE-20031204-51138 a20031107d2003 m h0frey0103 ba| afre aFR ay z 000y| ar1 aCinéma d'animationbTexte impriméedessin animé, marionnettes, images de synthèsefBernard Génin a[Paris]c\"Cahiers du cinéma\"cSCEREN-CNDPdcop. 2003gimpr. en Italie a95 p.cill., couv. ill. en coul.d19 cm2 aLes petits cahiers aLa couv. porte en plus : \"du crayon à l'ordinateur, pour ou contre Disney, Europe-Japon : le dessin animé aujourd'hui\" aBibliogr. p. 93 aSCEREN = Services, cultures, éditions, ressources pour l'éducation nationale. CNDP = Centre national de documentation pédagogique aPrésente un historique du cinéma d'animation, un survol des différentes productions nationales à travers le monde (Etats-Unis, Japon, France, Canada), les techniques du volume animé, l'image de synthèse, mais aussi l'oeuvre de Disney et le film d'auteur. b9782866423704 032525826tLes Petits cahiers (Paris)x1633-90531 aLe cinéma d'animation| 31053394aAnimation (cinéma)| 31031625aDessins animés32195497xHistoire et critique a791.431 |32547161aGéninbBernardf1946-....4070 0aFRbBNFc20031107gAFNOR2intermrc"])->setExemplaires([Class_Exemplaire::getLoader()->newInstanceWithId(34) ->setIdBib('456') ->setIdOrigine('12') ->setCodeBarres('12256663233656') ->setSigbExemplaire(Storm_Test_ObjectWrapper::mock() ->whenCalled('isReservable') ->answers(true))]); } } class RechercheControllerReseauTest extends RechercheControllerNoticeTestCase { public function setUp() { Class_WebService_ReseauxSociaux::setDefaultWebClient(Storm_Test_ObjectWrapper::mock() ->whenCalled('open_url') ->answers(false)); parent::setUp(); $this->dispatch(sprintf('recherche/reseau/id_notice/%d/type_doc/1', $this->notice->getId()), true); } public function tearDown() { parent::tearDown(); Class_WebService_ReseauxSociaux::setDefaultWebClient(null); } /** @test */ public function getResauShouldContainsTwitterGif() { $this->assertXPath('//img[contains(@src, "twitter.gif")]'); } /** @test */ public function getResauShouldContainsTwitterLink() { $this->assertContains("$.getScript('/social-network/share/id_notice/345/type_doc/1/on/twitter/url", $this->_response->getBody()); } } class RechercheControllerViewNoticeBabelthequeTest extends RechercheControllerNoticeTestCase { /** @test */ public function withoutBabelthequeJSShouldNotBeLoaded() { Class_AdminVar::newInstanceWithId('BABELTHEQUE_JS')->setValeur(''); $this->dispatch(sprintf('recherche/viewnotice/id/%d', $this->notice->getId()), true); $this->assertNotXpath('//script[contains(@src, "babeltheque.js")]'); } /** @test */ public function withBabelthequeJSShouldBeLoadedWithRightId() { Class_AdminVar::newInstanceWithId('BABELTHEQUE_JS')->setValeur('http://www.babeltheque.com/bw_666.js'); $this->dispatch(sprintf('recherche/viewnotice/id/%d', $this->notice->getId()), true); $this->assertXpath('//script[contains(@src, "babeltheque.js?bwid=666")]'); } } class RechercheControllerViewNoticeWithPreferencesTest extends RechercheControllerNoticeTestCase { protected $_web_analytics_client; public function setUp() { parent::setUp(); $time_source = new TimeSourceForTest('2013-12-27 09:00:00'); Class_Notice::setTimeSource($time_source); $this->notice->setClefChapeau('Gallimard serie'); $preferences = [ 'barre_nav' => 'Document', 'entete' =>"ABCDEFGIKLMNOPRSTtYZ8v9", 'onglets' => [ 'detail' => ['titre' => 'Details', 'aff' => '1', 'ordre' => 1, 'largeur' => 10], 'avis' => ['titre' => 'avis', 'aff' => '1', 'ordre' => 2, 'largeur' => 10], 'exemplaires' => ['titre' => 'exemplaires', 'aff' => '2', 'ordre' => 3, 'largeur' => 10], 'resume' => ['titre' => 'resume', 'aff' => '2', 'ordre' => 4, 'largeur' => 10], 'tags' => ['titre' => 'tags', 'aff' => '2', 'ordre' => 5, 'largeur' => 10], 'biographie' => ['titre' => 'biographie', 'aff' => '2', 'ordre' => 6, 'largeur' => 10], 'similaires' => ['titre' => 'similaires', 'aff' => '2', 'ordre' => 7, 'largeur' => 10], 'bibliographie' => ['titre' => 'bibliographie','aff' => '3', 'ordre' => 7, 'largeur' => 10], 'morceaux' => ['titre' => 'morceaux', 'aff' => '3', 'ordre' => 8, 'largeur' => 10], 'bandeAnnonce' => ['titre' => 'bande annonce','aff' => '3', 'ordre' => 9, 'largeur' => 10], 'photos' => ['titre' => 'photos', 'aff' => '3', 'ordre' => 14, 'largeur' => 10], 'videos' => ['titre' => 'videos', 'aff' => '3', 'ordre' => 11, 'largeur' => 10], 'resnumeriques' => ['titre' => 'ressources n', 'aff' => '3', 'ordre' => 12, 'largeur' => 10], 'babeltheque' => ['titre' => 'babeltheque', 'aff' => '3', 'ordre' => 13, 'largeur' => 10], 'frbr' => ['titre' => 'frbr', 'aff' => '0', 'ordre' => 10, 'largeur' => 10], 'serie' => ['titre' => 'serie', 'aff' => '0', 'ordre' => 11, 'largeur' => 10]], 'boite' => null]; Class_Profil::getCurrentProfil() ->setBarreNavOn(true) ->setCfgModules(['recherche' => ['viewnotice1' => $preferences]]); Class_CodifAuteur::newInstanceWithId(123, ['libelle' => 'Bernard Génin']); Class_TypeDoc::find(Class_TypeDoc::LIVRE)->setLabel('livres'); $this->_web_analytics_client = Storm_Test_ObjectWrapper::mock() ->whenCalled('trackEvent') ->answers(true); ZendAfi_Controller_Action_Helper_TrackEvent::setDefaultWebAnalyticsClient($this->_web_analytics_client); $this->dispatch('recherche/viewnotice/id/345', true); } /** @test **/ public function enteteShouldDisplayNouveaute(){ $this->assertXPathContentContains('//dl//dt[contains(@class,"nouveaute")]/following-sibling::dd','Oui',$this->_response->getBody()); } /** @test **/ public function noticeHtmlShouldContainsDivNoticeFlagWithSpanNouveaute(){ $this->assertXpath('//div[@class="flags_notice"]//span[@class="nouveaute"]'); } /** @test */ public function enteteShouldDisplayAnnee2002() { $this->assertXPathContentContains('//dl//dd', '2002'); } /** @test */ public function enteteShouldDisplayDocumentDeLaMemeSerie() { $this->assertXPathContentContains('//div//a[contains(@href,"Gallimard+serie")]', 'Voir tous les tomes de Cinéma d\'animation',$this->_response->getBody()); } /** @test */ public function enteteShouldDisplayDocumentLinkOrderByDateNouveaute() { $this->assertXPathContentContains('//div//a[contains(@href,"Gallimard+serie/tri/date_creation+desc")]', 'Voir tous les tomes de',$this->_response->getBody()); } /** @test */ public function enteteShouldDisplayDtEditeur() { $this->assertXPathContentContains('//dl//dt', 'Editeur'); } /** @test */ public function enteteShouldDisplayEditeurGallimard() { $this->assertXPathContentContains('//dl//dd', 'Gallimard'); } /** @test */ public function enteteShouldDisplayRebondAuteurBernardGenin() { $this->assertXPathContentContains('//dl//dd[contains(@class, "first")]/a[contains(@href, "recherche/simple/id/345/code_rebond/A123")]', 'Bernard Génin', $this->_response->getBody()); } /** @test */ public function enteteShouldDisplayDtDdCollectionWithClassSecond() { $this->assertXPathContentContains('//dl//dt[contains(@class, "second")]', 'Collection',$this->_response->getBody()); } /** @test */ public function detailsBlocShouldHaveIdBloc_345_0() { $this->assertXPathContentContains('//div[@id="bloc_345_0"][@class="notice_bloc_titre"]', 'Details'); } /** @test */ public function javascriptShouldOpenFirstBlocDetails() { $this->assertXPathContentContains('//script', "infos_bloc(\"bloc_345_0\",'1-234-56789-0','detail',0,'',0, 'http://localhost".BASE_URL."/noticeajax/detail/id/345')",$this->_response->getBody()); } /** @test */ public function javascriptShouldOpenSecondBlocAvis() { $this->assertXPathContentContains('//script', "infos_bloc(\"bloc_345_1\",'1-234-56789-0','avis',0,'',1, 'http://localhost".BASE_URL."/noticeajax/avis/id/345')"); } /** @test */ public function noJavascriptShouldOpenThirdBlocExemplaires() { $this->assertNotXPathContentContains('//script', "infos_bloc(\"bloc_345_2\"",$this->_response->getBody()); } /** @test */ public function bibliographieOngletShouldHaveIdSet345_onglet_0() { $this->assertXPathContentContains('//div[@id="set345_onglet_0"][@class="titre_onglet"]', 'bibliographie'); } /** @test */ public function javascriptShouldOpenFirstOngletBibliographie() { $this->assertXPathContentContains('//script', "infos_onglet('set345_onglet_0','1-234-56789-0','bibliographie',0,'',0, 'http://localhost".BASE_URL."/noticeajax/bibliographie/id/345')"); } /** @test */ public function videosOngletShouldHaveIdSet345_onglet_3() { $this->assertXPathContentContains('//div[@id="set345_onglet_3"][@class="titre_onglet"]', 'videos',$this->_response->getBody()); } /** @test */ public function noJavascriptShouldOpenSecondOnglet() { $this->assertNotXPathContentContains('//script', "infos_onglet('set345_onglet_1')"); } /** @test */ public function linkReserverShouldBeDisplayed() { $this->assertXPathContentContains('//a[contains(@onclick, "openDialogExemplaires")]', 'Réserver'); } /** @test */ public function vignetteShouldBeGenerated() { $this->assertXPath('//div[@class="nothumbnail type_doc_1"]'); } /** @test */ public function vignetteForZoomShouldNotBeGenerated() { $this->assertNotXPath('//a[@id="vignette"]'); } /** @test */ public function divViewNoticeShouldHaveClassTypeDocOne() { $this->assertXPath('//div[@class="view_notice type_doc_1"]'); } /** @test */ public function pageShouldBeHTML5Valid() { $this->assertHTML5(); } /** * @test */ public function trackEventShouldContainsNoticeTitreAuteur() { $this->assertEquals(['recherche', 'notice', '"titre: Cinéma d\'animation","auteur: Bernard Génin","editeur: Gallimard","tome: ","support: livres","ressource: http://localhost'.BASE_URL.'/recherche/viewnotice/id/345/clef/"', 345], $this->_web_analytics_client->getAttributesForLastCallOn('trackEvent')); } /** * @test * @group pagetitles */ public function barreNavShouldContainsCinemaAnimation() { $this->assertXPathContentContains('//div[@class="barre_nav"]//span', 'Cinéma d\'animation'); } } abstract class RechercheControllerViewNoticeTestCase extends RechercheControllerNoticeTestCase { /** @test */ public function titleShouldBeDisplayed() { $this->assertXPathContentContains('//h1', array_first(explode('<br />', $this->notice->getTitrePrincipal())), $this->_response->getBody()); } /** @test */ public function tagReseauSociauxShouldBePresent() { $this->assertXPath('//div[@id="reseaux-sociaux"]'); } /** @test */ public function headShouldContainsRechercheJS() { $this->assertXPath('//head//script[contains(@src,"public/opac/js/recherche.js")]'); } } class RechercheControllerViewNoticeClefAlphaTest extends RechercheControllerViewNoticeTestCase { public function setUp() { parent::setUp(); Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Notice') ->whenCalled('findAllBy') ->with(['clef_alpha' => 'TESTINGALPHAKEY---101']) ->answers([$this->notice]); $this->dispatch('recherche/viewnotice/clef/TESTINGALPHAKEY---101/expressionRecherche/Millenium', true); } /** @test */ public function retourListeShouldLinkToRechercheSimpleWithHashTagIdNotice() { $this->assertXPathContentContains('//div/a[contains(@href, "/recherche/simple/expressionRecherche/Millenium#345")]', 'Retour à la liste'); } /** @test */ public function resultatSuivantShouldLinkToNavigationSuivant() { $this->assertXPathContentContains('//div//a[contains(@href, "recherche/viewnotice/clef/TESTINGALPHAKEY---101/expressionRecherche/Millenium/navigation/suivant")]', 'Document suivant', $this->_response->getBody()); } /** @test */ public function resultatPrecedentShouldLinkToNavigationPrecedent() { $this->assertXPathContentContains('//div//a[contains(@href, "recherche/viewnotice/clef/TESTINGALPHAKEY---101/expressionRecherche/Millenium/navigation/precedent")]', 'Document précédent', $this->_response->getBody()); } } class RechercheControllerViewNoticeClefAlphaWithDoublonsTest extends RechercheControllerNoticeTestCase { public function setUp() { parent::setUp(); Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Notice') ->whenCalled('findAllBy') ->with(['clef_alpha' => 'TWILIGHT--SLADED-3-M6VIDEO-2010-4']) ->answers([Class_Notice::newInstanceWithId($this->notice->getId()) ->setTitrePrincipal('Twilight 1') ->setClefAlpha('TWILIGHT--SLADED-3-M6VIDEO-2010-4') ->setFacettes('') ->setUrlVignette('NO') ->setUrlImage('NO'), Class_Notice::newInstanceWithId(1) ->setTitrePrincipal('Twilight 2') ->setClefAlpha('TWILIGHT--SLADED-3-M6VIDEO-2010-4') ->setFacettes('') ->setUrlVignette('') ->setUrlImage('') ->setDateCreation('') ]); } /** @test */ public function withOnlyClefResponseShouldRedirectToRechercheTWILIGHT_SLADED() { $this->dispatch('recherche/viewnotice/clef/'.urlencode('TWILIGHT--SLADED-3-M6VIDEO-2010-4'), true); $this->assertRedirectTo('/opac/recherche?q=TWILIGHT+SLADED'); } /** @test */ public function withClefAndIdResponseShouldRenderTwilight2() { $this->dispatch('recherche/viewnotice/clef/'.urlencode('TWILIGHT--SLADED-3-M6VIDEO-2010-4').'/id/1', true); $this->assertXPathContentContains('//div[contains(@class, "view_notice")]//h1', 'Twilight 2'); } } class RechercheControllerUploadVignetteTest extends RechercheControllerNoticeTestCase { public function setUp() { parent::setUp(); Class_CodifTypeDoc::beVolatile(); Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Notice') ->whenCalled('getNoticeIdsByRequeteRecherche') ->answers([]); $this->notice->setTypeDoc(5); } /** @test */ public function linkToUploadVignetteShouldNotBePresentForAbonneSIGB() { Class_Users::getIdentity()->beAbonneSIGB(); $this->dispatch(sprintf('recherche/viewnotice/id/%d', $this->notice->getId()), true); $this->assertNotXPathContentContains('//a', 'Modifier la vignette'); } /** @test */ public function linkToUploadVignetteShouldBePresentForModoBib() { Class_Users::getIdentity()->changeRoleTo(ZendAfi_Acl_AdminControllerRoles::MODO_BIB); $this->dispatch(sprintf('recherche/viewnotice/id/%d', $this->notice->getId()), true); $this->assertXPathContentContains('//a', 'Modifier la vignette'); } /** @test */ public function linkToUploadVignetteShouldNotBePresentForTypeDocMoreThanFive() { Class_Users::getIdentity()->beAdminPortail(); $this->notice->setTypeDoc(6); $this->dispatch(sprintf('recherche/viewnotice/id/%d', $this->notice->getId()), true); $this->assertNotXPathContentContains('//a', 'Modifier la vignette'); } /** @test */ public function linkToUploadVignetteShouldBePresentForTypeDocThanFiveWhenInKnownFamille() { Class_Users::getIdentity()->beAdminPortail(); $this->notice->setTypeDoc(Class_TypeDoc::EPUB); $this->fixture('Class_CodifTypeDoc', ['id' => Class_TypeDoc::EPUB, 'famille_id' => Class_CodifTypeDoc::LIVRE]); $this->dispatch(sprintf('recherche/viewnotice/id/%d', $this->notice->getId()), true); $this->assertXPathContentContains('//a', 'Modifier la vignette'); } } class RechercheControllerViewNoticeAsAdminTest extends RechercheControllerNoticeTestCase { public function setUp() { parent::setUp(); $this->notice->setTypeDoc(5); Class_Users::getIdentity()->beAdminPortail(); $this->dispatch(sprintf('recherche/viewnotice/id/%d', $this->notice->getId()), true); } /** @test */ public function linkToUploadVignetteShouldBePresent() { $this->assertXPathContentContains('//a', 'Modifier la vignette',$this->_response->getBody()); } /** @test */ public function linkToConfigModulesRechercheShouldHaveActionViewNotice() { $this->assertXPath('//img[contains(@onclick, "admin/modules/recherche?config=site&type_module=recherche&id_profil=2&action1=viewnotice&action2=5")]'); } /** @test */ public function pageShouldBeHTML5Valid() { $this->assertHTML5(); } } class RechercheControllerReadNoticeTest extends RechercheControllerNoticeTestCase { public function setUp() { parent::setUp(); $this->dispatch(sprintf('recherche/readnotice/id/%d', $this->notice->getId()), true); } /** @test */ public function titreShouldBeDisplayed() { $this->assertXPathContentContains('//p', 'Titre: Cinéma d\'animation'); } /** @test */ public function auteurShouldBeDisplayed() { $this->assertXPathContentContains('//p', 'Auteur: Bernard Génin'); } /** @test */ public function anneeShouldBe2002() { $this->assertXPathContentContains('//p', 'Année: 2002'); } } class RechercheControllerReservationPickupAjaxActionTest extends AbstractControllerTestCase { protected $_json, $_xpath; public function setUp() { parent::setUp(); Storm_Test_ObjectWrapper::onLoaderOfModel('Class_CodifAnnexe') ->whenCalled('findAllBy') ->with(array('no_pickup' => '0', 'order' => 'libelle')) ->answers(array(Class_CodifAnnexe::getLoader()->newInstanceWithId(2) ->setLibelle('Annecy') ->setCode('ANN'), Class_CodifAnnexe::getLoader()->newInstanceWithId(3) ->setLibelle('Cran') ->setCode('CRN'))); Class_CosmoVar::newInstanceWithId('site_retrait_resa', ['valeur'=>1]); $this->dispatch('recherche/reservation-pickup-ajax?id_bib=2&id_origine=12&code_annexe=ANN',true); $this->_json = json_decode($this->_response->getBody()); $this->_xpath = new Storm_Test_XPath(); } /** @test */ public function shouldRenderAnnecyCheckedRadio() { $this->_xpath->assertXPath($this->_json->content, '//input[@name="code_annexe"][@value="ANN"][@checked="checked"]',$this->_json->content); } /** @test */ public function shouldRenderCranRadio() { $this->_xpath->assertXPath($this->_json->content, '//input[@name="code_annexe"][@value="CRN"]'); } /** @test */ public function layoutShouldBeEmpty() { $this->_xpath->assertNotXPath($this->_json->content, '//div[@id="banniere"]'); } } abstract class RechercheControllerSimpleActionTestCase extends AbstractControllerTestCase { public function setUp() { parent::setUp(); Class_AdminVar::newInstanceWithId('FACETTE_TYPE_DOC_LIBELLE', ['valeur' => 'Type de document']); } } class RechercheControllerSimpleActionWithDefaultConfigTest extends RechercheControllerSimpleActionTestCase { public function setUp() { parent::setUp(); Class_Profil::getCurrentProfil()->setCfgModules([]); $this->dispatch('/recherche/simple/expressionRecherche/pomme/tri/alpha_auteur',true); } /** @test */ public function pommeShouldBePresentInRedirectedPageAsResultatInSession() { $this->assertXPathContentContains('//div', 'pomme'); } /** @test */ public function pageShouldContainsLinkToSuggestionAchats() { $this->assertXPathContentContains('//a[contains(@href, "/abonne/suggestion-achat")]', 'Suggérer un achat'); } /** @test */ public function selectedTriShouldBeAlphaAuteur() { $this->assertXPath('//select[@name="tri"]//option[@value="alpha_auteur"][@selected="selected"]'); } } class RechercheControllerIndexActionTestWithParamQ extends RechercheControllerSimpleActionTestCase { public function setUp() { parent::setUp(); $this->dispatch('/recherche/index?q=pomme',true); } /** @test */ public function pommeShouldBePresentInResult() { $this->assertXPathContentContains('//div', 'pomme'); } } class RechercheControllerSimpleActionWithConfigWithoutSuggestionAchatAsAdminTest extends RechercheControllerSimpleActionTestCase { public function setUp() { parent::setUp(); Class_Profil::getCurrentProfil()->setCfgModules(['recherche' => ['resultatsimple' => ['suggestion_achat' => 0, 'liste_format' => 3]]]); $_SESSION['recherche'] = ['selection' => ['expressionRecherche' => 'potter', 'mode' => 'simple'], 'resultat' => ['req_liste' => "select id_notice,MATCH(alpha_titre) AGAINST(' (POMME POMMES POM)' ) as rel1, MATCH(alpha_auteur) AGAINST(' (POMME POMMES POM)' ) as rel2 from notices Where MATCH(titres,auteurs,editeur,collection,matieres,dewey) AGAINST('+(POMME POMMES POM)' IN BOOLEAN MODE) order by (rel1 * 1.5)+(rel2) desc", 'req_facettes' => "select id_notice,type_doc,facettes from notices Where MATCH(titres,auteurs,editeur,collection,matieres,dewey) AGAINST('+(POMME POMMES POM)' IN BOOLEAN MODE) limit 15000", 'nombre' => 5, 'facettes' => [], 'tags' => []]]; Class_Users::getIdentity()->beAdminPortail(); $this->dispatch('/recherche/simple', true); } /** @test */ public function pageShouldNotContainsLinkToSuggestionAchats() { $this->assertNotXPath('//a[contains(@href, "/abonne/suggestion-achat")]'); } /** @test */ public function linkToConfigModulesRechercheShouldHaveActionResultatAction2Simple() { $this->assertXPath('//img[contains(@onclick, "admin/modules/recherche?config=site&type_module=recherche&id_profil=2&action1=resultat&action2=simple")]'); } } class RechercheControllerSimpleActionWithWrongParametersTest extends RechercheControllerSimpleActionTestCase { public function setUp() { parent::setUp(); $this->dispatch('/recherche/simple/expressionRecherche/pomme/tri/zork', true); } /** @test */ public function pageShouldDisplayResults() { $this->assertXPathContentContains('//div', 'pomme'); } } class RechercheControllerSimpleActionWithEmptyExpressionTest extends RechercheControllerSimpleActionTestCase { public function setUp() { parent::setUp(); $this->dispatch('/recherche/simple/expressionRecherche/%', true); } /** @test */ public function pageShouldDisplayAucunMotSignificatif() { $this->assertXPathContentContains('//div//div//h2', 'Aucun résultat trouvé', $this->_response->getBody()); } } abstract class RechercheControllerSimpleActionhListeFormatTestCase extends RechercheControllerSimpleActionTestCase { protected $_liste_format; public function setUp() { parent::setUp(); Class_Profil::getCurrentProfil() ->setCfgModules(['recherche' => ['resultatsimple' => [ 'liste_format' => $this->_liste_format , 'liste_codes' => "TANECR"]]]) ->setSelTypeDoc('1;2;3;4;5'); Class_IntBib::newInstanceWithId(1, ['nom_court' => 'Annecy']); $bib_mock = Storm_Test_ObjectWrapper::mock() ->whenCalled('getSigbExemplaire')->answers(false) ->whenCalled('getId')->answers(1) ->whenCalled('getLibelle')->answers('Tombouctou'); Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Bib')->whenCalled('find')->answers($bib_mock); Class_TypeDoc::newInstanceWithId(1, ['label' => 'Livres']); Class_TypeDoc::newInstanceWithId(2, ['label' => 'Périodique']); } } class RechercheControllerSimpleActionWithListeFormatMurTest extends RechercheControllerSimpleActionhListeFormatTestCase { protected $_liste_format = Class_Systeme_ModulesAppli::LISTE_FORMAT_MUR; public function setUp() { parent::setUp(); $this->dispatch('/recherche/simple/expressionRecherche/potter/facettes/T1/facette/B1/page/2', true); } /** @test */ public function pageShouldContainsDivNotice() { $this->assertXPath('//div[@class="liste_mur"]//div[@class="notice"]'); } /** @test */ public function urlForSousFacettesShouldContainsFacettesT1AndB1() { $this->assertXPath('//div[@class="facette"]//a[contains(@href,"/facettes/T1-B1")]'); } /** @test */ public function urlForSousFacettesShouldNotContainsPage() { $this->assertNotXPath('//div[@class="facette"]//a[contains(@href,"/page/2")]'); } /** @test */ public function criteresRechercheShouldContainsBibAnnecy() { $this->assertXPathContentContains('//div[@class="criteres_recherche"]//div[2]', 'Bibliothèque: Annecy', $this->_response->getBody()); } /** @test */ public function facetteBibAnnecyShouldHaveLinkToRemove() { $this->assertXPath('//div[@class="criteres_recherche"]//div[2]//a[@href="/recherche/simple/expressionRecherche/potter/facettes/T1"]'); } /** @test */ public function criteresRechercheShouldContainsTypeDocLivre() { $this->assertXPathContentContains('//div[@class="criteres_recherche"]//div', 'Type de document: Livre'); } /** @test */ public function iconeSupportShouldHaveTitleLivres() { $this->assertXPath('//img[@class="icone_support"][@title="Livres"]'); } /** @test */ public function pageResultatMurShouldBeHTML5Valid() { $this->assertHTML5(); } } class RechercheControllerListeCodeWithNouveauteTest extends AbstractControllerTestCase { protected $_liste_format = Class_Systeme_ModulesAppli::LISTE_FORMAT_MUR; public function setUp() { parent::setUp(); $time_source = new TimeSourceForTest('2013-12-14 09:00:00'); Class_Notice::setTimeSource($time_source); Class_Notice::beVolatile(); Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Notice') ->whenCalled('findAllBy') ->answers([Class_Notice::newInstanceWithId(8, ['clef_alpha'=>'Nouvelle année', 'clef_oeuvre' =>'NA', 'url_vignette'=>'no', 'url_image'=>'no', 'date_creation'=> '2013-12-30']), Class_Notice::newInstanceWithId(9, ['clef_alpha'=>'New Year', 'clef_oeuvre' =>'NY', 'url_vignette'=>'no', 'url_image'=>'no', 'date_creation'=> '2013-12-30'])]); Class_Profil::getCurrentProfil() ->setCfgModules(['recherche' => ['resultatsimple' => [ 'liste_format' => $this->_liste_format , 'liste_codes' => "TAN9"]]]); $this->dispatch('/recherche/simple/expressionRecherche/hello/tri/%2A/facette/T1', true); } /** @test **/ public function pageShouldContainsNoticeWithDivNouveauté() { $this->assertXPathContentContains('//div[@class="liste_mur"]//div[@class="notice"]//span[@class="notice_nouveaute"]','Nouveauté',$this->_response->getBody()); } } class RechercheControllerFacetteSelectedTest extends AbstractControllerTestCase { protected $_liste_format = Class_Systeme_ModulesAppli::LISTE_FORMAT_MUR; public function setUp() { parent::setUp(); Class_Profil::getCurrentProfil() ->setCfgModules(['recherche' => ['resultatsimple' => [ 'liste_format' => $this->_liste_format , 'liste_codes' => "TANECR"]]]) ->setSelTypeDoc('1;2;3;4;5'); $this->dispatch('/recherche/simple/expressionRecherche/hello/tri/%2A/facette/T1', true); } /** @test */ public function pageShouldContainsDivNotice() { $this->assertXPath('//div[@class="liste_mur"]//div[@class="notice"]', $this->_response->getBody()); } /** @test */ public function pageShouldContainsFacettes() { $this->assertXPath('//div[@class="facette"]'); } /** @test */ public function facetteLivresShouldBeChecked() { $this->assertXPath('//div[@class="facette"]//li[contains(@class,"selected")]',$this->_response->getBody()); } /** @test */ public function liFacetteLivresShouldHaveSiblingsAWidthHrefRemoveFacetteLivre() { $this->assertXPath('//div[@class="facette"]//li[contains(@class,"selected")]/a[@href="/recherche/simple/expressionRecherche/hello/tri/%2A"]',$this->_response->getBody()); } } class RechercheControllerSimpleActionLibelleFacetteTest extends AbstractControllerTestCase { protected $_liste_format = Class_Systeme_ModulesAppli::LISTE_FORMAT_MUR; public function setup() { parent::setup(); Class_AdminVar::newInstanceWithId('FACETTE_AUTEUR_LIBELLE', ['valeur' => 'Les super auteurs']); Class_AdminVar::newInstanceWithId('FACETTE_DEWEY_LIBELLE', ['valeur' => 'DEWEY ?!@']); $this->dispatch('/recherche/simple/?'. 'operateur_titres=and'. '&rech_titres='. '&operateur_auteurs=and'. '&rech_auteurs=musso'. '&operateur_matieres=and'. '&rech_matieres='. '&operateur_dewey=and'. '&rech_dewey=pomme'. '&operateur_editeur=and'. '&rech_editeur='. '&operateur_collection=and'. '&rech_collection='. '&type_recherche=fulltext'. '&tri=*'. '&annee_debut='. '&annee_fin='. '&nouveaute='. '&annexe='. '§ion=', true); } /** @test */ public function criteresRechercheShouldContainsLesAuteurs() { $this->assertXPathContentContains('//div[@class="criteres_recherche"]//div', 'Les super auteurs',$this->_response->getBody()); } /** @test */ public function criteresRechercheShouldContainsDEWEY() { $this->assertXPathContentContains('//div[@class="criteres_recherche"]//div', 'DEWEY ?!@',$this->_response->getBody()); } } class RechercheControllerSimpleActionWithListeFormatVignettesTest extends RechercheControllerSimpleActionhListeFormatTestCase { protected $_liste_format = Class_Systeme_ModulesAppli::LISTE_FORMAT_VIGNETTES; public function setUp() { parent::setUp(); $this->dispatch('/recherche/simple/expressionRecherche/potter/facettes/T1/facette/B1/page/2', true); } /** @test */ public function pageShouldContainsDivListeVignette() { $this->assertXPath('//div[@class="liste_vignettes"]'); } /** @test */ public function pageShouldContainsTdAnnee() { $this->assertXPathContentContains('//div[@class="liste_vignettes"]//dt', 'Année'); } /** @test */ public function pageShouldContainsTdEditeur() { $this->assertXPathContentContains('//div[@class="liste_vignettes"]//dt', 'Editeur'); } /** @test */ public function pageShouldContainsTdCollection() { $this->assertXPathContentContains('//div[@class="liste_vignettes"]//dt', 'Collection'); } /** @test */ public function pageShouldContainsTdResume() { $this->assertXPathContentContains('//div[@class="liste_vignettes"]//dt', 'Résumé'); } /** @test */ public function pageResultatVignetteShouldBeHtml5Valid() { $this->assertHTML5(); } } class RechercheControllerSimpleActionWithListeFormatChronoTest extends RechercheControllerSimpleActionhListeFormatTestCase { protected $_liste_format = Class_Systeme_ModulesAppli::LISTE_FORMAT_CHRONO; public function setUp() { parent::setUp(); $this->dispatch('/recherche/simple/expressionRecherche/potter/facettes/T1/facette/B1/page/2', true); } /** @test */ public function pageShouldContainsDivListeChrono() { $this->assertXPath('//div[@class="liste_chrono"][@id="liste_chrono_1"]'); } /** @test */ public function timelineJSShouldBeLoaded() { $this->assertXPath('//script[contains(@src, "public/opac/TimelineJS-2.25/compiled/js/storyjs-embed.js")]'); } /** @test */ public function createStoryJSFunctionShouldBeIncluded() { $this->assertXPathContentContains('//script', 'createStoryJS'); $this->assertXPathContentContains('//script', '"embed_id":"liste_chrono_3"', $this->_response->getBody()); } /** @test */ public function withListeFormat3InUrlShouldDisplayWithModeVignettes() { $this->bootstrap(); $this->dispatch('/recherche/simple/expressionRecherche/potter/facettes/T1/facette/B1/page/2/liste_format/3', true); $this->assertXPath('//div[@class="liste_vignettes"]'); } } class RechercheControllerSimpleActionWithListeFormatAccordeonTest extends RechercheControllerSimpleActionhListeFormatTestCase { protected $_liste_format = Class_Systeme_ModulesAppli::LISTE_FORMAT_ACCORDEON; public function setUp() { parent::setUp(); $this->dispatch('/recherche/simple/expressionRecherche/potter/facettes/T1/facette/B1/page/2', true); } /** @test */ public function ajaxToGetNotice() { $this->assertXPath('//img[contains(@onclick, "getNoticeAjax")]'); } } class RechercheControllerSimpleActionWithListeFormatTableauTest extends RechercheControllerSimpleActionhListeFormatTestCase { protected $_liste_format = Class_Systeme_ModulesAppli::LISTE_FORMAT_TABLEAU; public function setUp() { parent::setUp(); $this->dispatch('/recherche/simple/expressionRecherche/potter/facettes/T1/facette/B1/page/2', true); } /** @test */ public function pageShouldContainsTdWithListeTitres() { $this->assertXPath('//td[@class="listeTitre"]'); } } class RechercheControllerSimpleByISBNActionTest extends RechercheControllerSimpleActionTestCase { public function setUp() { parent::setUp(); $this->dispatch('/recherche/simple/expressionRecherche/2-203-00119-4', true); } /** @test */ public function pageResultatRechecheShouldBeDisplayed() { $this->assertXPathContentContains('//span', '2-203-00119-4',$this->_response->getBody()); } } class RechercheControllerAvanceeActionTest extends AbstractControllerTestCase { public function setUp() { parent::setUp(); $this->dispatch('/recherche/simple/tri/alpha_titre', true); } /** @test */ public function pageRechercheAvanceeShouldBeDisplayed() { $this->assertXPathContentContains('//h1', 'recherche'); } /** @test */ public function selectTriShouldHaveAlphaTitreSelected() { $this->assertXPath('//select[@name="tri"]//option[@value="alpha_titre"][@selected="selected"]',$this->_response->getBody()); } /** @test */ public function urlPage2ShouldBeWithTriParameter() { $this->assertXPath('//a[contains(@href,"/tri/alpha_titre/page/2")]',$this->_response->getBody()); } } class RechercheControllerPostReservationAction extends AbstractControllerTestCase { protected $_sent_mails; public function setUp() { parent::setUp(); $_SESSION["captcha_code"] = '1234'; $mock_transport = new MockMailTransport(); Zend_Mail::setDefaultTransport($mock_transport); Class_Bib::getLoader()->newInstanceWithId(4)->setLibelle('Astrolabe'); Class_Notice::newInstanceWithId(4, ['unimarc' => "01570nam0 2200325 450 0010007000000100033000070200017000400210027000571000041000841010008001251020007001331050018001401060006001582000106001642100075002702150044003452250023003893000125004123000020005373000137005573300265006943450018009594100051009775120027010286060033010556060060010886760012011487000045011608010039012052218529 a2-86642-370-4bbr.d8,95 EUR aFRb00347575 aFRbDLE-20031204-51138 a20031107d2003 m h0frey0103 ba| afre aFR ay z 000y| ar1 aCinéma d'animationbTexte impriméedessin animé, marionnettes, images de synthèsefBernard Génin a[Paris]c\"Cahiers du cinéma\"cSCEREN-CNDPdcop. 2003gimpr. en Italie a95 p.cill., couv. ill. en coul.d19 cm2 aLes petits cahiers aLa couv. porte en plus : \"du crayon à l'ordinateur, pour ou contre Disney, Europe-Japon : le dessin animé aujourd'hui\" aBibliogr. p. 93 aSCEREN = Services, cultures, éditions, ressources pour l'éducation nationale. CNDP = Centre national de documentation pédagogique aPrésente un historique du cinéma d'animation, un survol des différentes productions nationales à travers le monde (Etats-Unis, Japon, France, Canada), les techniques du volume animé, l'image de synthèse, mais aussi l'oeuvre de Disney et le film d'auteur. b9782866423704 032525826tLes Petits cahiers (Paris)x1633-90531 aLe cinéma d'animation| 31053394aAnimation (cinéma)| 31031625aDessins animés32195497xHistoire et critique a791.431 |32547161aGéninbBernardf1946-....4070 0aFRbBNFc20031107gAFNOR2intermrc"]); $this->postDispatch('/recherche/reservation', array('id_notice' => 4, 'id_bib' => 4, 'mail_bib' => 'zork@gloub.fr', 'user_name' => 'nanuk', 'demande' => 'je veux le livre', 'user_mail' => 'nanuk@gloub.com', 'code_saisi' => '1234', 'cote' => 'XYZ'), true); $this->_sent_mails = $mock_transport->getSentMails(); } /** @test */ public function twoMailsShouldHaveBeenSent() { $this->assertEquals(2, count($this->_sent_mails)); } /** @test */ public function firstMailFromShouldBeNanuk() { $this->assertEquals('nanuk@gloub.com', array_first($this->_sent_mails)->getFrom()); } /** @test */ public function firstMailSubjectShouldBeDemandeDeReservation() { $this->assertContains('Demande de réservation de document', quoted_printable_decode(array_first($this->_sent_mails)->getSubject())); } /** @test */ public function firstMailToShouldBeZork() { $this->assertContains('zork@gloub.fr', array_first($this->_sent_mails)->getRecipients()); } /** @test */ public function secondMailFromShouldBeNobody() { $this->assertEquals('nobody@noreply.fr', array_last($this->_sent_mails)->getFrom()); } /** @test */ public function secondMailToShouldBeNanuk() { $this->assertContains('nanuk@gloub.com', array_last($this->_sent_mails)->getRecipients()); } } class RechercheControllerRebondTest extends AbstractControllerTestCase { public function setUp() { parent::setUp(); $facettes = Class_Notice::findFirstBy(['where' => 'facettes>""'])->getFacettes(); $code_rebond = explode(' ', trim($facettes))[0]; $this->dispatch('/recherche/simple/expressionRecherche/Potter/code_rebond/'.$code_rebond.'/tri/alpha_titre', true); } /** @test */ public function comboTriShouldHaveAnneePublicationSelected() { $this->assertXPathContentContains('//select[@id="tri"]//option[@value="alpha_titre"][@selected="selected"]', 'Titre',$this->_response->getBody()); } /** @test */ public function lienRetourRechercheInitialeShouldBeRechercheSimple() { $this->assertXPathContentContains('//a[@href="/recherche/saisie/expressionRecherche/Potter/tri/alpha_titre"]', 'Retour', $this->_response->getBody()); } /** @test */ public function lienNouvelleRechercheShouldBeRechercheSimple() { $this->assertXPathContentContains('//a[@href="/recherche/saisie"]', 'Nouvelle recherche', $this->_response->getBody()); } } class RechercheControllerRebondWithFacettesTest extends AbstractControllerTestCase { public function setUp() { parent::setUp(); $this->dispatch('/recherche/simple/expressionRecherche/france/facette/T1/tri/alpha_titre/page/2', true); } /** @test */ public function rebondUrlShouldNotContainsFacettesAndPage() { $this->assertXPath("//div[@class=\"nuage\"]//a[contains(@href,'/recherche/simple/expressionRecherche/france/tri/alpha_titre/code_rebond/')]", $this->_response->getBody()); } } class RechercheControllerGuideeTest extends AbstractControllerTestCase { public function setUp() { parent::setUp(); $this->mock_sql = Storm_Test_ObjectWrapper::mock(); Zend_Registry::set('sql', $this->mock_sql); $this->mock_sql ->whenCalled('fetchAll') ->with('select * from codif_dewey where LENGTH(id_dewey)=1 order by id_dewey') ->answers([ ['id_dewey'=>66, 'libelle' => 'Generalites', 'nb_notices'=>1], ['id_dewey'=>77, 'libelle' => 'Arts', 'nb_notices' => 0]] )->beStrict(); Class_CodifDewey::newInstanceWithId(66, ['libelle' => 'Generalites']); Class_CodifDewey::newInstanceWithId(77, ['libelle' => 'Arts']); Class_AdminVar::newInstanceWithId('FACETTE_DEWEY_LIBELLE', ['valeur' => 'Bouquins']); $this->dispatch('/recherche/simple/rubrique/X1/fil/;X1', true); } /** @test */ public function indiceShouldBeDisplayed() { $this->assertXPathContentContains("//a[contains(@href,'recherche/simple/rubrique/X1')]", 'Bouquins', $this->_response->getBody()); } /** @test */ public function generalitesShouldBeDisplayed() { $this->assertXPathContentContains("//a[contains(@href,'recherche/simple/rubrique/D66')]", 'Generalites'); } /** @test */ public function artsShouldBeDisplayed() { $this->assertXPathContentContains("//a[contains(@href,'recherche/simple/rubrique/D77')]", 'Arts'); } } class RechercheControllerGuideeHomePageTest extends AbstractControllerTestCase { public function setUp() { parent::setUp(); $this->mock_sql = Storm_Test_ObjectWrapper::mock(); Zend_Registry::set('sql', $this->mock_sql); $this->mock_sql ->whenCalled('fetchAll') ->with('select * from codif_dewey where LENGTH(id_dewey)=1 order by id_dewey') ->answers([[ 'id_dewey'=>66, 'libelle' => 'Generalites', 'nb_notices'=>1], [ 'id_dewey'=>77, 'libelle' => 'Arts', 'nb_notices' => 0]] )->beStrict(); $this->mock_sql ->whenCalled('fetchOne') ->with('select libelle from codif_dewey where id_dewey=\'66\'') ->answers( 'Generalites')->beStrict(); $this->mock_sql ->whenCalled('fetchOne') ->with('select libelle from codif_dewey where id_dewey=\'77\'') ->answers('Arts')->beStrict(); Class_AdminVar::newInstanceWithId('FACETTE_DEWEY_LIBELLE', ['valeur' => 'Bouquins']); Class_AdminVar::newInstanceWithId('FACETTE_PCDM4_LIBELLE', ['valeur' => 'Zic']); $this->dispatch('/recherche/guidee', true); } /** @test */ public function x1ShouldBeDisplayedWithLibelleBouquins() { $this->assertXPathContentContains("//a[contains(@href,'recherche/simple/rubrique/X1')]", 'Bouquins'); } /** @test */ public function x2ShouldBeDisplayedWithLibelleZic() { $this->assertXPathContentContains("//a[contains(@href,'recherche/simple/rubrique/X2')]", 'Zic'); } } abstract class RechercheControllerSearchResultGuideeFixtures extends AbstractControllerTestCase { public function setUp() { parent::setUp(); $this->mock_sql = Storm_Test_ObjectWrapper::mock(); $this->mock_moteur_recherche = Storm_Test_ObjectWrapper::mock(); $this->mock_codif = Storm_Test_ObjectWrapper::mock(); $this->mock_moteur_recherche ->whenCalled('getFacettes') ->answers([ "facettes" => [ "T" => [ "titre" => "Type de document", 1 => [ "id" => "D3", "libelle" => "disques", "nombre" =>"2", "url" => "/une/url/Bidon"] ]] , "tags" => [ 1=>[ "id" => "M1355", "libelle" => "CD", "nombre" => 2]], "url_facette" => "/recherche/simple/facettes/" ] ); Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Notice') ->whenCalled('findAllByRequeteRecherche') ->answers([Class_Notice::newInstanceWithId(8), Class_Notice::newInstanceWithId(9)]); $this->mock_codif ->whenCalled('getNomFacette') ->answers('nom de la facette'); $this->mock_codif ->whenCalled('getLibelleFacette') ->answers('facette'); $this->mock_codif ->whenCalled('getNomChamp') ->answers('champ'); $this->mock_moteur_recherche ->whenCalled('lancerRecherche') ->answers([ "req_liste" => "select" , "nombre" => 10, "req_facettes" => "select", 'facettes' => 'M123-A989' ]); Class_Codification::setInstance($this->mock_codif); Class_MoteurRecherche::setInstance($this->mock_moteur_recherche); $this->mock_sql ->whenCalled('fetchOne') ->with('select libelle from codif_dewey where id_dewey=\'66\'') ->answers( 'Generalites')->beStrict(); $this->mock_sql ->whenCalled('fetchOne') ->with('select libelle from codif_dewey where id_dewey=\'77\'') ->answers('Arts')->beStrict(); Zend_Registry::set('sql', $this->mock_sql); } } class RechercheControllerGuideeWithFiltersSelectedTest extends RechercheControllerSearchResultGuideeFixtures { public function setUp() { parent::setUp(); $this->dispatch('/recherche/simple/rubrique/D66/facette/A19684', true); } /** @test */ public function facettesShouldBeRemovedInRetirerUrl() { $this->assertXPathContentContains("//a[contains(@href,'recherche/simple/rubrique/D66')]", "suppression",$this->_response->getBody()); } } class RechercheControllerWithPanierTest extends RechercheControllerNoticeTestCase { protected $_original_sql; public function setUp() { parent::setUp(); Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Notice') ->whenCalled('findAllByRequeteRecherche') ->answers([Class_Notice::newInstanceWithId(1, ['clef_alpha'=>'COMBAT ORDINAIRE']), Class_Notice::newInstanceWithId(12, ['clef_alpha'=>'tarzan'])]); Class_Profil::getCurrentProfil() ->setCfgModules(['recherche' => ['resultatsimple' => ['liste_nb_par_page' => 1]]]); $this->_original_sql = Zend_Registry::get('sql'); $mock_sql = Storm_Test_ObjectWrapper::mock(); Zend_Registry::set('sql', $mock_sql); $mock_sql ->whenCalled('fetchOne') ->with("Select count(*) from notices Where notices.clef_alpha in('COMBAT ORDINAIRE','BLACKSAD')") ->answers(2) ->whenCalled('fetchAll') ->with("Select id_notice,type_doc,facettes from notices Where notices.clef_alpha in('COMBAT ORDINAIRE','BLACKSAD') limit 15000") ->answers([ ['id_notice' => 1, 'type_doc' => 1, 'facettes' => ''], ['id_notice' => 12, 'type_doc' => 1, 'facettes' => '']]) ->beStrict(); $this->panier_bd = Class_PanierNotice::newInstanceWithId(2, ['id_panier' => 1, 'libelle' => 'Mes BD', 'date_maj' => '10/02/2011', 'notices' => 'COMBAT ORDINAIRE;BLACKSAD']); $this->dispatch('/recherche/simple/id_panier/2/retour_panier/2', true); } public function tearDown() { Zend_Registry::set('sql', $this->_original_sql); parent::tearDown(); } /** @test */ public function retourRechercheInitialeShouldLinkToPanierAbonne() { $this->assertXPath('//a[contains(@href, "/panier/index/id_panier/2")]'); } /** @test **/ public function MesBDLibelleShouldBeDisplay() { $this->assertXPathContentContains('//span', "Mes BD"); } /** @test */ public function urlPage2ShouldBeRechercheSimpleWithIdPanerAndRetourAndPage2() { $this->assertXPath('//a[contains(@href,"/recherche/simple/id_panier/2/retour_panier/2/page/2")]', $this->_response->getBody()); } } class RechercheControllerSimpleActionWithCatalogueAndParentsTest extends RechercheControllerSimpleActionTestCase { public function setUp() { parent::setUp(); Class_CodifThesaurus::beVolatile(); Class_MoteurRecherche::setInstance(Storm_Test_ObjectWrapper::mock() ->whenCalled('lancerRecherche') ->answers(['req_liste' => '', 'nombre' => 0, 'req_facettes' => '', 'statut' => 'erreur']) ->whenCalled('getFacettes') ->answers(['facettes' => '']) ); $this->fixture('Class_Catalogue', ['id'=>4, 'libelle' => 'A', 'domaine_parent' => $this->fixture('Class_Catalogue', ['id'=>3, 'libelle' => 'Nouveautés'])]); $this->dispatch('/recherche/simple/id_catalogue/3/parents/4', true); } /** @test **/ public function catalogueLibelleShouldBeDisplay() { $this->assertXPathContentContains('//span[@class="expression-recherche"]', "Nouveautés",$this->_response->getBody()); } /** @test */ public function catalogueBreadcrumbShouldDisplay() { $this->assertXPath('//div[@class="liste_mur breadcrumb_domains"]//div//a[@href="/domains/browse/id/3/parents/4"]', $this->_response->getBody()); } } class RechercheControllerSimpleActionWithCatalogueAndNoParentsTest extends RechercheControllerSimpleActionTestCase { public function setUp() { parent::setUp(); Class_CodifThesaurus::beVolatile(); Class_MoteurRecherche::setInstance(Storm_Test_ObjectWrapper::mock() ->whenCalled('lancerRecherche') ->answers(['req_liste' => '', 'nombre' => 0, 'req_facettes' => '', 'statut' => 'erreur']) ->whenCalled('getFacettes') ->answers(['facettes' => '']) ); $this->fixture('Class_Catalogue', ['id'=>4, 'libelle' => 'A', 'domaine_parent' => $this->fixture('Class_Catalogue', ['id'=>3, 'libelle' => 'Nouveautés'])]); $this->dispatch('/recherche/simple/id_catalogue/3', true); } /** @test **/ public function catalogueLibelleShouldBeDisplay() { $this->assertXPathContentContains('//span[@class="expression-recherche"]', "Nouveautés",$this->_response->getBody()); } /** @test */ public function catalogueBreadcrumbShouldNotDisplay() { $this->assertNotXPath('//div[@class="liste_mur breadcrumb_domains"]'); } } class RechercheControllerActionSimpleWithResetTest extends AbstractControllerTestCase { /** @test */ public function responseShouldRedirectToActionSaisie() { $this->dispatch('/recherche/simple/statut/reset', true); $this->assertRedirectTo('/opac/recherche/saisie'); } } class RechercheControllerGuideeThesaurusTest extends RechercheControllerGuideeHomePageTest{ public function setUp() { parent::setUp(); $this->mock_sql = Storm_Test_ObjectWrapper::mock(); Storm_Test_ObjectWrapper::onLoaderOfModel('Class_CodifThesaurus') ->whenCalled('findByIdOrigineAndCode') ->answers([Class_CodifThesaurus::newInstanceWithId(59, ['id_thesaurus'=>'59','libelle' => 'Generalites','libelle_facette'=>null])]) ->whenCalled('findFirstBy') ->answers(Class_CodifThesaurus::newInstanceWithId(59, ['id_thesaurus'=>'59','libelle' => 'Generalites','libelle_facette'=>null])) ; Zend_Registry::set('sql', $this->mock_sql); $this->mock_sql ->whenCalled('fetchAll') ->with('select * from codif_dewey where LENGTH(id_dewey)=1 order by id_dewey') ->answers([ ['id_dewey'=>66, 'libelle' => 'Generalites', 'nb_notices'=>1], ['id_dewey'=>77, 'libelle' => 'Arts', 'nb_notices' => 0]] )->beStrict(); $this->mock_sql ->whenCalled('fetchOne') ->with('select libelle from codif_thesaurus where id_thesaurus=\'59\'') ->answers( 'Generalites') ->whenCalled('fetchOne') ->with("Select count(*) from notices Where MATCH(facettes) AGAINST('+H59*' IN BOOLEAN MODE)") ->answers('10'); Class_Profil::getCurrentProfil() ->setCfgModules(['recherche' => ['resultatsimple' => [ 'liste_format' => $this->_liste_format , 'liste_codes' => "TANECRH"]]]) ->setSelTypeDoc('1;2;3;4;5'); $this->dispatch('/recherche/simple/rubrique/H59', true); } /** @test */ public function generaliteThesaurusShouldBeDisplayed() { $this->assertXPathContentContains("//a[contains(@href,'recherche/simple/rubrique/H59')]", 'Generalites', $this->_response->getBody()); } } class RechercheControllerAjoutNoticePanierUrlWithMurConfigTest extends RechercheControllerSimpleActionhListeFormatTestCase { protected $_liste_format = Class_Systeme_ModulesAppli::LISTE_FORMAT_MUR; public function setUp() { parent::setUp(); $this->dispatch('/recherche/simple/expressionRecherche/potter/facettes/T1/facette/B1/page/2', true); ZendAfi_Auth::getInstance()->clearIdentity(); Class_Profil::getCurrentProfil()->setCfgModules([]); $this->dispatch('/recherche/simple/expressionRecherche/pomme/tri/alpha_auteur/ajoutPanier/702167',true); } /** @test */ public function pommeShouldBePresentInRedirectedPageAsResultatInSession() { $this->assertXPathContentContains('//div', 'pomme'); } /** @test */ public function pageShouldContainsLinkToSuggestionAchats() { $this->assertXPathContentContains('//a[contains(@href, "/abonne/suggestion-achat")]', 'Suggérer un achat'); } /** @test */ public function selectedTriShouldBeAlphaAuteur() { $this->assertXPath('//select[@name="tri"]//option[@value="alpha_auteur"][@selected="selected"]'); } /** @test */ public function withOutLoggedUserPopupLoginShouldBeInitialized() { $this->assertXPathContentContains('//script', 'initializePopups', $this->_response->getBody()); } /** @test */ public function linksAjoutPanierShouldHaveDataPopupTrue() { $this->assertXPath('//a[contains(@href, "/panier/ajout-ajax/id_notice/")][@data-popup="true"]'); } /** @test **/ public function permalinkShouldBeDisplay() { $this->assertXPath('//input[contains(@value,"recherche/viewnotice/expressionRecherche/")]'); } } class RechercheControllerNavigationTest extends RechercheControllerNoticeTestCase { public function setUp(){ parent::setUp(); $batman = Class_Notice::newInstanceWithId(1, ['clef_alpha'=>'batman']); $tarzan = Class_Notice::newInstanceWithId(12, ['clef_alpha'=>'tarzan']); $batman = Class_Notice::newInstanceWithId(28, ['clef_alpha'=>'musso']); $tarzan = Class_Notice::newInstanceWithId(99, ['clef_alpha'=>'lesarbres']); Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Notice') ->whenCalled('getNoticeIdsByRequeteRecherche') ->with('Select id_notice from notices order by alpha_titre') ->answers([28,12,345,1,99]); } /** @test */ public function navigationSuivantShouldRedirectToBatmanViewnotice() { $this->dispatch('/recherche/viewnotice/id/345/tri/alpha_titre/navigation/suivant',true); $this->assertRedirectRegex('|/recherche/viewnotice/id/1/tri/alpha_titre/clef/batman|'); } /** @test */ public function navigationPrecedentShouldRedirectToTarzanViewnotice() { $this->dispatch('/recherche/viewnotice/id/345/tri/alpha_titre/navigation/precedent',true); $this->assertRedirectRegex('|/recherche/viewnotice/id/12/tri/alpha_titre/clef/tarzan|'); } /** @test */ public function navigationPrecedentOnTheFirstNoticeMussoOfResultatRechercheShouldRedirectToMusso() { $this->dispatch('/recherche/viewnotice/id/28/tri/alpha_titre/navigation/precedent',true); $this->assertRedirectRegex('|/recherche/viewnotice/id/28/tri/alpha_titre/clef/musso|'); } /** @test */ public function navigationSuivantOnTheLastNoticeLesArbresOfResultatRechercheShouldRedirectToLesarbres() { $this->dispatch('/recherche/viewnotice/id/99/tri/alpha_titre/navigation/suivant',true); $this->assertRedirectRegex('|/recherche/viewnotice/id/99/tri/alpha_titre/clef/lesarbres|'); } /** @test */ public function navigationSuivantOnTheFirstNoticeMussoOfResultatRechercheShouldRedirectToTarzan() { $this->dispatch('/recherche/viewnotice/id/28/tri/alpha_titre/navigation/suivant',true); $this->assertRedirectRegex('|/recherche/viewnotice/id/12/tri/alpha_titre/clef/tarzan|'); } /** @test */ public function navigationPrecedentOnTheLastNoticeLesarbresOfResultatRechercheShouldRedirectToBatman() { $this->dispatch('/recherche/viewnotice/id/99/tri/alpha_titre/navigation/precedent',true); $this->assertRedirectRegex('|/recherche/viewnotice/id/1/tri/alpha_titre/clef/batman|'); } /** @test */ public function navigationSuivantOnNoticeLesarbresWhenResultatRechercheIsEmptyShouldRedirectToCurrentNoticeLsearbres() { Class_Notice::whenCalled('getNoticeIdsByRequeteRecherche') ->with('Select id_notice from notices order by alpha_titre') ->answers([]); $this->dispatch('/recherche/viewnotice/id/99/tri/alpha_titre/navigation/suivant',true); $this->assertRedirectRegex('|/recherche/viewnotice/id/99/tri/alpha_titre/clef/lesarbres|'); } /** @test */ public function navigationSuivantOnNoticeLesarbresWhenResultatRechercheAsMussoResultShouldRedirectToCurrentNoticeMusso() { Class_Notice::whenCalled('getNoticeIdsByRequeteRecherche') ->with('Select id_notice from notices order by alpha_titre') ->answers([28]); $this->dispatch('/recherche/viewnotice/id/28/tri/alpha_titre/navigation/suivant',true); $this->assertRedirectRegex('|/recherche/viewnotice/id/28/tri/alpha_titre/clef/musso|'); } } class RechercheControllerAvanceeTest extends AbstractControllerTestCase { public function setUp() { parent::setUp(); $this->dispatch('/recherche/avancee', true); } /** @test */ public function formActionShouldBeRechercheSimple() { $this->assertXPath('//form[@action="/recherche/simple"]'); } /** @test **/ public function formShouldContainTagListCocheGenre() { $this->assertXPath('//form//input[@id="genre"][following-sibling::div[@class="tag_selection"]]'); } /** @test **/ public function scriptControlMajShouldNotBePresent() { $this->assertNotXPath('//script[contains(@src,"controle_maj")]'); } /** @test **/ public function scriptTagSlectionShouldBePresent() { $this->assertXPath('//script[contains(@src,"/admin/js/tag_selection")]'); } } class RechercheControllerViewNoticeWichIsInMyPanier extends AbstractControllerTestCase { public function setup() { parent::setup(); parent::setUp(); Class_Users::beVolatile(); Class_Notice::beVolatile(); Class_PanierNotice::beVolatile(); Class_PanierNoticeCatalogue::beVolatile(); $this->user = Class_Users::newInstanceWithId(23, ['pseudo' => 'Pioup', 'nom' => 'Jojo', 'login' => 'Super', 'password' => '123789']); $this->user->save(); ZendAfi_Auth::getInstance()->logUser($this->user); $this->panier_bd = Class_PanierNotice::newInstanceWithId(2, ['id_panier' => 1, 'libelle' => 'Mes BD', 'date_maj' => '10/02/2011', 'notices' => 'POMME;POIRE', 'user' => $this->user]); $this->panier_bd->save(); $this->panier_bd_2 = Class_PanierNotice::newInstanceWithId(3, ['id_panier' => 1, 'libelle' => 'Mes BD 2', 'date_maj' => '10/02/2011', 'notices' => 'POIRE', 'user' => $this->user]); $this->panier_bd_2->save(); $pomme = Class_Notice::newInstanceWithId(10, ['titre_principal' => 'Le combat des pommes', 'clef_alpha' => 'POMME', 'date_creation' => '2010-01']); $poire = Class_Notice::newInstanceWithId(12, ['titre_principal' => 'Le combat des poires', 'clef_alpha' => 'POIRE', 'date_creation' => '2010-01']); $this->panier_loader = Storm_Test_ObjectWrapper::onLoaderOfModel('Class_PanierNotice') ->whenCalled('save')->answers(true) ->whenCalled('delete')->answers(true) ->whenCalled('findAll')->answers([$this->panier_bd]) ->whenCalled('findAllBy') ->with(['role' => 'user', 'model' => $this->user]) ->answers([$this->panier_bd]); } /** @test **/ public function viewNoticePommeShouldContainsLinkAddToPanier() { $this->dispatch('recherche/viewnotice/id/10',true); $this->assertXpath('//div[@class="navigation"]/a[@class="panier dans_panier"]',$this->_response->getBody()); } /** @test **/ public function viewnoticeLinkAddToPanierTitleShouldBeDansBd() { $this->dispatch('recherche/viewnotice/id/10',true); $this->assertXpath('//div[@class="navigation"]/a[@class="panier dans_panier"][@title="Dans le panier Mes BD"]',$this->_response->getBody()); } /** @test **/ public function viewNoticePommeShouldContainsTagDansPanierBd() { $this->dispatch('recherche/viewnotice/id/10',true); $this->assertXpath('//div[@class="flags_notice"]/span[@class="dans_panier"][@title="Dans le panier Mes BD"]',$this->_response->getBody()); } /** @test **/ public function viewNoticePoireShouldContainsTagDansPanierBdEtBd2() { $this->dispatch('recherche/viewnotice/id/12',true); $this->assertXpath('//div[@class="flags_notice"]/span[@class="dans_panier"][@title="Dans les paniers Mes BD 2 - Mes BD"]',$this->_response->getBody()); } /** @test **/ public function withOutLoggedUserFlagsNoticeShouldNotContainsDansPanier() { ZendAfi_Auth::getInstance()->clearIdentity(); $this->dispatch('recherche/viewnotice/id/12',true); $this->assertNotXpath('//div[@class="flags_notice"]/span[@class="dans_panier"]',$this->_response->getBody()); } } class RechercheControllerSimpleActionWithCvsActivatedTest extends RechercheControllerSimpleActionTestCase { protected $_cvs; public function setUp() { parent::setUp(); $this->dispatch('/recherche/simple/expressionRecherche/potter/facettes/T1/facette/B1/page/2', true); Class_Profil::getCurrentProfil() ->setCfgModules(['recherche' => ['resultatsimple' => [ 'cvs_autres_resultats' => 'Results from opac', 'cvs_resultat_titre' => 'CVS Ressources', 'cvs_nb_result' => '5', 'cvs_display_position' => '1']]]); RessourcesNumeriquesFixtures::activateCVS(); $group_cvs = $this->fixture('Class_UserGroup', ['id' => 20 , 'libelle' => 'CVS acces', 'rights_token' => Class_UserGroup::RIGHT_ACCES_CVS]); $polo = $this->fixture('Class_Users', ['id' => 15, 'login' => 'polo', 'password' => '456', 'pseudo' => 'polo', 'date_fin' => '2025-04-26']) ->beAbonneSIGB() ->setUserGroups([$group_cvs]); ZendAfi_Auth::getInstance()->logUser($polo); $record = $this->fixture('Class_Notice',['id'=> 10, 'titre_principal' => 'Le photographe', 'auteur_principal' => 'Guibert']); $this->_cvs = Class_CVSLink::forUser($record); $http_client = Storm_Test_ObjectWrapper::mock(); Class_CVSLink::setDefaultHttpClient($http_client); Class_Xml::setDefaultHttpClient($http_client); RessourcesNumeriquesFixtures::activateCVS(); $http_client ->whenCalled('postData') ->answers($this->_returnedXML()); $this->dispatch('/recherche/simple/expressionRecherche/pomme/tri/alpha_auteur',true); } protected function _returnedXML() { $xml = file_get_contents(realpath(dirname(__FILE__)). '/../../../../fixtures/cvs_search_ecole.xml'); return $xml; } /** @test **/ public function titleResultFromOpacShouldBeDiplay() { $this->assertXPathContentContains('//h1','Results from opac'); } /** @test */ public function simpleContentShouldContainsCVSDiv() { $this->assertXPath('//div[@class="conteneur_simple"]//div[contains(@class,"cvs_container")]', $this->_response->getBody()); } /** @test **/ public function cvsBoiteShouldHaveTitreCVSRessources() { $this->assertXPathContentContains('//div[@class="conteneur_simple"]//div[contains(@class,"cvs_container")]//h1', 'CVS Ressources', $this->_response->getBody()); } /** @test **/ public function cvsBoiteClassShouldHavePosition1() { $this->assertXPath('//div[@class="conteneur_simple"]//div[@class="cvs_container position_1"]', $this->_response->getBody()); } } class RechercheControllerSimpleActionWithCvsActivatedAndPreferencesHiddenTest extends RechercheControllerSimpleActionTestCase { public function setUp() { parent::setUp(); Class_Profil::getCurrentProfil() ->setCfgModules(['recherche' => ['resultatsimple' => [ 'cvs_display_position' => '0']]]); $zork = $this->fixture('Class_Users', ['id' => 4, 'login' => 'zork_sigb', 'role_level' => 2, 'idabon' => '98475', 'id_site' => 2, 'password' => 'xzy']); $group_multimedia = Class_UserGroup::newInstanceWithId('20', ['libelle' => 'Multimedia', 'rights_token' => Class_UserGroup::RIGHT_ACCES_CVS]); $zork->beAbonneSIGB() ->setUserGroups([$this->group_multimedia]) ->save(); ZendAfi_Auth::getInstance()->logUser($zork); RessourcesNumeriquesFixtures::activateCVS(); $this->dispatch('/recherche/simple/expressionRecherche/pomme/tri/alpha_auteur',true); } /** @test */ public function simpleContentShouldNotContainsCVSDiv() { $this->assertNotXPath('//div[@class="conteneur_simple"]//div[contains(@class,"cvs_container")]', $this->_response->getBody()); } } ?>