Newer
Older
<?php
/**
* Copyright (c) 2012, Agence Française Informatique (AFI). All rights reserved.
*
* 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).
*
* 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
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
require_once 'AbstractControllerTestCase.php';
abstract class RechercheControllerNoticeTestCase extends AbstractControllerTestCase {
$this->fixture('Class_CodifAuteur',
['id' => 123,
'libelle' => 'Bernard Génin']);
$this->fixture('Class_CodifCentreInteret',
['id' => 2,
'libelle' => 'marionettes']);
$this->fixture('Class_CodifGenre',
['id' => 1,
'libelle' => 'spectacle']);
$this->fixture('Class_CodifTags',
['id' => 3,
'libelle' => 'enfants']);
$this->fixture('Class_CodifPcdm4',
['id' => 4,
'libelle' => 'rock']);
Class_Notice::beVolatile();
Class_Exemplaire::beVolatile();
$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 F2 G1 P4 Y2 B1 Lfre M1 Z3 D1',
'date_creation' => '2013-12-31',

efalcy
committed
'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))]);

Matthias Meusburger
committed
}
class RechercheControllerReseauTest extends RechercheControllerNoticeTestCase {
public function setUp() {
ZendAfi_View_Helper_ShareUrl::setDefaultWebClient(Storm_Test_ObjectWrapper::mock()

Ghislain Loas
committed
->whenCalled('open_url')
->answers(false));
$this->dispatch(sprintf('recherche/reseau/id_notice/%d/type_doc/1',
$this->notice->getId()),
ZendAfi_View_Helper_ShareUrl::setDefaultWebClient(null);
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",
class RechercheControllerViewNoticeBabelthequeTest extends RechercheControllerNoticeTestCase {
public function setUp() {
parent::setUp();
}
/** @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")]');
}
/** @test */
public function noticeShouldNotHaveTome() {
$this->notice->setClefChapeau("test")->save();
$this->dispatch(sprintf('recherche/viewnotice/id/%d', $this->notice->getId()), true);
$this->assertNotXPathContentContains('//div[@class="entete_notice"]',"Voir tous les tomes");
}

Matthias Meusburger
committed
class RechercheControllerPagerTest extends RechercheControllerNoticeTestCase {
/** @test */
public function urlPage2ShouldBeWithListeFormatParameter() {
$notice = $this->fixture('Class_Notice', ['id' => 34, 'clef_oeuvre' => '']);
$this->onLoaderOfModel('Class_Notice')
->whenCalled('findAllByRequeteRecherche')
->with("Select id_notice, MATCH(alpha_titre) AGAINST(' POMME') as rel1, MATCH(alpha_auteur) AGAINST(' POMME') as rel2 from notices Where MATCH(titres, auteurs, editeur, collection, matieres, dewey) AGAINST('+(POMME POMMES POM)' IN BOOLEAN MODE) and MATCH(facettes) AGAINST('+T3' IN BOOLEAN MODE) order by (rel1 * 1.5) + (rel2) desc",

Matthias Meusburger
committed
10, 1)
->answers([$notice])
->whenCalled('find')->with(34)->answers($notice)
->beStrict();
$mock_sql = $this->mock()
->whenCalled('fetchOne')
->with("Select count(*) from notices Where MATCH(titres, auteurs, editeur, collection, matieres, dewey) AGAINST('+(POMME POMMES POM)' IN BOOLEAN MODE) and MATCH(facettes) AGAINST('+T3' IN BOOLEAN MODE)")

Matthias Meusburger
committed
->answers(45)
->whenCalled('fetchAll')
->with("Select id_notice, type_doc, facettes from notices Where MATCH(titres, auteurs, editeur, collection, matieres, dewey) AGAINST('+(POMME POMMES POM)' IN BOOLEAN MODE) and MATCH(facettes) AGAINST('+T3' IN BOOLEAN MODE) limit 15000")

Matthias Meusburger
committed
->answers([])
->beStrict();

Matthias Meusburger
committed
Zend_Registry::set('sql', $mock_sql);

Ghislain Loas
committed
$this->dispatch('/recherche/simple/expressionRecherche/pomme/tri/*/facette/T3/liste_format/4', true);
$this->assertXPath('//a[contains(@href, "/liste_format/4")][contains(@href,"/page/2")]',$this->_response->getBody());

Matthias Meusburger
committed
}
}
class RechercheControllerViewNoticeWithPreferencesTest extends RechercheControllerNoticeTestCase {
public function setUp() {
parent::setUp();
$time_source = new TimeSourceForTest('2013-12-27 09:00:00');
Class_Notice::setTimeSource($time_source);
Class_AdminVar::newInstanceWithId('FACETTE_GENRE_LIBELLE', ['valeur' => 'GENRES']);
Class_AdminVar::newInstanceWithId('FACETTE_DEWEY_LIBELLE', ['valeur' => 'Classification']);
Class_AdminVar::newInstanceWithId('FACETTE_PCDM4_LIBELLE', ['valeur' => 'Classification']);

efalcy
committed
$this->notice->setClefChapeau('Gallimard serie');
$this->notice->set_subfield('461','t', 'Gallimard serie');
$preferences = [

Ghislain Loas
committed
'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]]);

llaffont
committed
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');

efalcy
committed
/** @test */
public function enteteShouldDisplayDocumentDeLaMemeSerie() {
$this->assertXPathContentContains('//div//a[contains(@href,"Gallimard+serie")]', 'Voir tous les tomes de Gallimard serie',$this->_response->getBody());

efalcy
committed
}
/** @test */
public function enteteShouldDisplayDocumentLinkOrderByDateNouveaute() {
$this->assertXPathContentContains('//div//a[contains(@href,"Gallimard+serie/tri/date_creation+desc")]', 'Voir tous les tomes de',$this->_response->getBody());

efalcy
committed
}
/** @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 (Auteur)', $this->_response->getBody());
/** @test */
public function enteteShouldDisplayRebondInterestMarionettes() {
$this->assertXPathContentContains('//dl//a[contains(@href, "recherche/simple/id/345/code_rebond/F2")]', 'marionettes', $this->_response->getBody());
}
/** @test */
public function enteteShouldDisplayRebondTagEnfants() {
$this->assertXPathContentContains('//dl//a[contains(@href, "recherche/simple/id/345/code_rebond/Z3")]', 'enfants', $this->_response->getBody());
/** @test */
public function enteteShouldDisplayRebondPcdm4Rock() {
$this->assertXPathContentContains('//dl//a[contains(@href, "recherche/simple/id/345/code_rebond/P4")]', 'rock', $this->_response->getBody());
/** @test */
public function enteteShouldDisplayRebondGenreSpectacle() {
$this->assertXPathContentContains('//dl//a[contains(@href, "recherche/simple/id/345/code_rebond/G1")]', 'spectacle');
}
/** @test */
public function enteteLibelleGenreShouldBeGENRES() {
$this->assertXPathContentContains('//dl//dt', 'GENRES');
}
/** @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',

efalcy
committed
"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() {

efalcy
committed
$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');
}

llaffont
committed
/** @test */
public function vignetteShouldBeGenerated() {
$this->assertXPath('//div[@class="nothumbnail type_doc_1"]');

llaffont
committed
}
/** @test */
public function vignetteForZoomShouldNotBeGenerated() {
$this->assertNotXPath('//a[@id="vignette"]');

llaffont
committed
}

llaffont
committed
/** @test */
public function divViewNoticeShouldHaveClassTypeDocOne() {
$this->assertXPath('//div[@class="view_notice type_doc_1"]');
}
/** @test */
public function tabTitleShouldContainTitle() {
$this->assertXPath('//div[contains(@class, "titre_onglet") and h2]');
}
/** @test */
public function pageShouldBeHTML5Valid() {
$this->assertHTML5();
}
*/
public function trackEventShouldContainsNoticeTitreAuteur() {
$this->assertEquals(['recherche',
'notice',
'"titre: Gallimard serie<br /> Cinéma d\'animation","auteur: Bernard Génin","editeur: Gallimard","tome: ","support: livres","ressource: http://localhost'.BASE_URL.'/recherche/viewnotice/id/345"',
$this->_web_analytics_client->getAttributesForLastCallOn('trackEvent'));
}
public function barreNavShouldContainsCinemaAnimation() {
$this->assertXPathContentContains('//div[@class="barre_nav"]//span', 'Cinéma d\'animation');
}
/** @test */
public function deweyAndPcdm4WithSameLibelleShouldBePresent() {
$this->assertXPathContentContains('//div[@class="entete_notice"]//dt[contains(@class, "classification")]', 'Classification');
$this->assertXPathContentContains('//div[@class="entete_notice"]//dt[contains(@class, "classification")]/following::dd', 'Philosophie et disciplines connexes');
$this->assertXPathContentContains('//div[@class="entete_notice"]//dt[contains(@class, "classification")]', 'Classification');
$this->assertXPathContentContains('//div[@class="entete_notice"]//dt[contains(@class, "classification")]/following::dd', 'rock');
}
}
class RechercheControllerViewNoticeTest extends RechercheControllerNoticeTestCase {
public function setUp() {
parent::setUp();
$this->dispatch('recherche/viewnotice/id/345', true);
}
public function titleShouldBeDisplayed() {
array_first(explode('<br />', $this->notice->getTitrePrincipal())),
$this->_response->getBody());
/** @test */
public function pageShouldContainsOnlyTwoH1() {
$this->assertXPathCount('//h1', 2, $this->_response->getBody());
}
/** @test */
public function pageShouldContainsH1WithTitleAndAuthor() {
$this->assertXPath('//h1//span[contains(text(), "Cinéma d\'animation")][following-sibling::span[text()="Bernard Génin"]]');
}
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 RechercheControllerViewNoticeMetasTest extends AbstractControllerTestCase {
public function setUp() {
parent::setUp();
$this->fixture('Class_Notice',
['id' => 345,
'titre_principal' => 'Cinéma d\'animation<br/>3D',
'auteur_principal' => 'Bernard Génin',
'annee' => 2002,
'editeur' => 'Gallimard',
'isbn' => '1-234-56789-0',
'type_doc' => Class_TypeDoc::LIVRE,
'url_vignette' => 'http://linux.org',
'url_image' => 'http://linux.org',
'facettes' => 'A123 F2 G1 P4 Y2 B1 Lfre M1 Z3 D1',
'date_creation' => '2013-12-31']);
$this->dispatch('recherche/viewnotice/id/345', true);
/** @test */
public function pageShouldContainTitleMeta() {
$this->assertXPathContentContains('//meta[@property="og:title"]/@content', 'Cinéma d\'animation br/ 3D - Bernard Génin', $this->_response->getBody());
/** @test */
public function pageShouldContainImageMeta() {
$this->assertXPathContentContains('//meta[@property="og:image"]/@content', 'http://linux.org');
/** @test */
public function pageShouldContainDescriptionMeta() {
$this->assertXPath('//meta[@property="og:description"]/@content');
class RechercheControllerViewNoticeClefAlphaTest extends RechercheControllerNoticeTestCase {
public function setUp() {
parent::setUp();
->whenCalled('execute')->answers('')
->whenCalled('fetchOne')->answers(null)
->with("Select count(*) from notices Where MATCH(titres, auteurs, editeur, collection, matieres, dewey) AGAINST('+(MILLENIUM MILLENIUMS MILENIUM)' IN BOOLEAN MODE)")
->answers(7);
Zend_Registry::set('sql', $mock_sql);
Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Notice')
->whenCalled('findAllBy')
->with(['clef_alpha' => 'TESTINGALPHAKEY---101'])
->answers([$this->notice])
->whenCalled('getNoticeIdsByRequeteRecherche')
->answers([10,99,88, $this->notice->getId() ,2,34,4]);
$this->dispatch('recherche/viewnotice/clef/TESTINGALPHAKEY---101/expressionRecherche/Millenium', true);
}
/** @test */

llaffont
committed
public function retourListeShouldLinkToRechercheSimpleWithHashTagIdNotice() {
$this->assertXPathContentContains('//div/a[@class="retour"][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')

llaffont
committed
->setFacettes('')
->setUrlVignette('NO')
->setUrlImage('NO'),
Class_Notice::newInstanceWithId(1)
->setTitrePrincipal('Twilight 2')
->setClefAlpha('TWILIGHT--SLADED-3-M6VIDEO-2010-4')
->setFacettes('')

llaffont
committed
->setUrlVignette('')
->setUrlImage('')

Ghislain Loas
committed
]);
/** @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');
}
}

llaffont
committed
class RechercheControllerUploadVignetteTest extends RechercheControllerNoticeTestCase {

llaffont
committed
public function setUp() {
parent::setUp();
Class_CodifTypeDoc::beVolatile();
Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Notice')
->whenCalled('getNoticeIdsByRequeteRecherche')
->answers([]);

llaffont
committed
$this->notice->setTypeDoc(5);
}

llaffont
committed
/** @test */

llaffont
committed
public function linkToUploadVignetteShouldNotBePresentForAbonneSIGB() {
Class_Users::getIdentity()->beAbonneSIGB();

llaffont
committed
$this->dispatch(sprintf('recherche/viewnotice/id/%d', $this->notice->getId()), true);
$this->assertNotXPathContentContains('//a', 'Modifier la vignette');
}

llaffont
committed
/** @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');
}

llaffont
committed
}
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")]');

llaffont
committed
/** @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');
}
}
abstract class RechercheAvanceeControllerSimpleActionTestCase extends AbstractControllerTestCase {
public function setUp() {
parent::setUp();
Class_AdminVar::newInstanceWithId('FACETTE_TYPE_DOC_LIBELLE', ['valeur' => 'Type de document']);
}
}
class RechercheAvanceeControllerSimpleActionWithDefaultConfigTest extends RechercheAvanceeControllerSimpleActionTestCase {
public function setUp() {
parent::setUp();
Class_Profil::getCurrentProfil()->setCfgModules([]);
Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Notice')
->whenCalled('findAllByRequeteRecherche')
->answers([$this->fixture('Class_Notice', ['id' => 8])]);
Class_MoteurRecherche::setInstance(Storm_Test_ObjectWrapper::mock()
->whenCalled('lancerRecherche')
->answers(['req_liste' => '',
'nombre' => 1,
'req_facettes' => ''])
->whenCalled('getFacettes')
->answers(['facettes' => '',
'tags' => [
1=>[
"id" => "M1355",
"libelle" => "CD",
"nombre" => 10],
2=>[
"id" => "M12",
"libelle" => "DVD",
"nombre" => 5],
]]));
$this->dispatch('/recherche/simple?rech_titres=maupassant',true);
public function tagsCloudLevel5ShouldBePresent() {
$this->assertXPath('//a[contains(@class,"nuage_niveau5")]', $this->_response->getBody());
}
/** @test */
public function tagsCloudLevel10ShouldBePresent() {
$this->assertXPath('//a[contains(@class,"nuage_niveau10")]', $this->_response->getBody());
}
}

llaffont
committed
abstract class RechercheControllerSimpleActionTestCase extends AbstractControllerTestCase {
public function setUp() {
parent::setUp();
Class_AdminVar::newInstanceWithId('FACETTE_TYPE_DOC_LIBELLE', ['valeur' => 'Type de document']);
}

llaffont
committed
}

llaffont
committed
class RechercheControllerSimpleActionWithDefaultConfigTest extends RechercheControllerSimpleActionTestCase {
public function setUp() {
parent::setUp();

llaffont
committed
Class_Profil::getCurrentProfil()->setCfgModules([]);
$this->dispatch('/recherche/simple/expressionRecherche/pomme/tri/alpha_auteur',true);

llaffont
committed

llaffont
committed
public function pommeShouldBePresentInRedirectedPageAsResultatInSession() {
$this->assertXPathContentContains('//div', 'pomme');
}
/** @test */
public function pageShouldContainsLinkToSuggestionAchats() {
$this->assertXPathContentContains('//a[contains(@href, "/abonne/suggestion-achat")]',
'Suggérer un achat');
}
public function selectedTriShouldBeAlphaAuteur() {
$this->assertXPath('//select[@name="tri"]//option[@value="alpha_auteur"][@selected="selected"]');
/** @test */
public function facetteWidgetTitleShouldBeAsExpected() {
$this->assertXPathContentContains('//div[@class="facette_outer"]/h2', 'Affiner le résultat...');
}
/** @test */
public function tagsCloudWidgetTitleShouldBeAsExpected() {
$this->assertXPathContentContains('//div[contains(@class,"nuage_outer")]/h2', 'Elargir la recherche...');
}
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 {

llaffont
committed
public function setUp() {
parent::setUp();

llaffont
committed
Class_Profil::getCurrentProfil()->setCfgModules(['recherche' => ['resultatsimple' => ['suggestion_achat' => 0,

Ghislain Loas
committed
'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);

llaffont
committed
}
/** @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")]');
}

llaffont
committed
}
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 RechercheControllerSimpleActionListeFormatTestCase extends RechercheControllerSimpleActionTestCase {

llaffont
committed
protected $_liste_format;
public function setUp() {
parent::setUp();

llaffont
committed
Class_Profil::getCurrentProfil()
->setCfgModules(['recherche' => ['resultatsimple' => [

Ghislain Loas
committed
'liste_format' => $this->_liste_format ,
'liste_codes' => "TANECR"]]])

llaffont
committed
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']);

llaffont
committed
}
}
class RechercheControllerSimpleActionWithListeFormatMurTest extends RechercheControllerSimpleActionListeFormatTestCase {

llaffont
committed
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);
}

llaffont
committed
/** @test **/
public function resumeNoticeLinkShouldBeReset() {
$this->assertXPathContentContains('//head/script', "/noticeajax/resumenotice';", $this->_response->getBody());

llaffont
committed
/** @test */
public function pageShouldContainsDivNotice() {
$this->assertXPath('//div[@class="liste_mur"]//div[@class="notice"]');

llaffont
committed
}
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"]');
public function pageResultatMurShouldBeHTML5Valid() {
$this->assertHTML5();
}

llaffont
committed
}
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,

Ghislain Loas
committed
['clef_alpha'=>'Nouvelle année',
'clef_oeuvre' =>'NA',
'url_vignette'=>'no',
'url_image'=>'no',
'date_creation'=> '2013-12-30']),