<?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'; class CmsControllerRssNoProfileTest extends AbstractControllerTestCase { public function setUp() { parent::setUp(); Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Profil') ->whenCalled('find') ->answers(null); $this->dispatch('cms/rss'); } /** @test */ public function titleShouldBeFluxIndisponible() { $this->assertXPathContentContains('//channel/title', 'Flux indisponible'); } } class CmsControllerCalendarRssWithProfileAndArticleTest extends AbstractControllerTestCase { /** * @param Class_Profil $profil */ protected function _initProfilHook($profil) { $profil->setCfgAccueil( array( 'modules' => array( '1' => array( 'division' => '1', 'type_module' => 'NEWS', 'preferences' => array( 'titre' => 'Les dernières nouvelles', 'rss_avis' => true, 'type_aff' => 2, 'display_order' => 'Random', 'nb_aff' => 2, 'nb_analyse' => 5 ) ) ), 'options' => array() ) ); } public function setUp() { parent::setUp(); Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Article') ->whenCalled('getArticlesByPreferences') ->answers(array( Class_Article::getLoader() ->newInstanceWithId(1) ->setTitre('La fête de la banane') ->setContenu('Une fête qui glisse !<img src="'.BASE_URL.'/image/banane.jpg"/>') ->setDateMaj('2011-11-11 11:11:11'), Class_Article::getLoader() ->newInstanceWithId(2) ->setTitre('La fête de la frite') ->setContenu('Une fête qui sent !'), )); $this->dispatch('cms/calendarrss?id_profil=2&id_module=1'); } /** @test */ public function imgShouldBeDisplayWithAbsoluteUrl() { $this->assertXPathContentContains('//description', '<img src="http://localhost'.BASE_URL.'/image/banane.jpg"'); } /** @test */ public function channelTitleShouldBeLesDernieresNouvelles() { $this->assertXpathContentContains('//channel/title', 'Les dernières nouvelles'); } /** @test */ public function channelDescriptionShouldBeAgendaColonLesDerniereNouvelles() { $this->assertXpathContentContains('//channel/description', 'Agenda: Les dernières nouvelles'); } /** @test */ public function itemsCountShouldBeTwo() { $this->assertXpathCount('//channel/item', 2); } /** @test */ public function firstItemDateShouldBe11_11_2011() { $this->assertXpathContentContains('//channel/item/pubDate', '11 Nov 2011'); } } class CmsControllerRssWithProfileAndArticle extends AbstractControllerTestCase { /** * @param Class_Profil $profil */ protected function _initProfilHook($profil) { $profil->setCfgAccueil( array( 'modules' => array( '1' => array( 'division' => '1', 'type_module' => 'NEWS', 'preferences' => array( 'titre' => 'Les dernières nouvelles', 'rss_avis' => true, 'type_aff' => 2, 'display_order' => 'Random', 'nb_aff' => 2, 'nb_analyse' => 5 ) ) ), 'options' => array() ) ); } public function setUp() { parent::setUp(); Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Article') ->whenCalled('getArticlesByPreferences') ->answers(array( Class_Article::getLoader() ->newInstanceWithId(1) ->setTitre('La fête de la banane') ->setContenu('Une fête qui glisse !'), Class_Article::getLoader() ->newInstanceWithId(2) ->setTitre('La fête de la frite') ->setContenu('Une fête qui sent !'), )); $this->dispatch('cms/rss?id_profil=2&id_module=1'); } /** @test */ public function channelTitleShouldBeLesDernieresNouvelles() { $this->assertXpathContentContains('//channel/title', 'Les dernières nouvelles'); } /** @test */ public function feteDeLaBananeTitreShouldBePresent() { $this->assertXpathContentContains('//channel/item[1]/title', 'La fête de la banane'); } /** @test */ public function feteLeLaBananeDescriptionShouldBeQuiGlisse() { $this->assertXpathContentContains("//channel/item[1]/description", 'Une fête qui glisse !'); } /** @test */ public function feteDeLaFriteShouldBePresent() { $this->assertXpathContentContains('//channel/item[2]/title', 'La fête de la frite'); } /** @test */ public function feteLeLaFriteDescriptionShouldBeQuiSent() { $this->assertXpathContentContains('//channel/item[2]/description', 'Une fête qui sent !'); } /** @test */ public function firstLinkShouldContainsCmsArticleViewOne() { $this->assertXpathContentContains('//channel/item[1]/link', 'http://localhost/cms/articleview/id/1'); } /** @test */ public function secondLinkShouldContainsCmsArticleViewTwo() { $this->assertXpathContentContains('//channel/item[2]/link', 'http://localhost/cms/articleview/id/2'); } } abstract class AbstractCmsControllerArticleViewByDateTest extends AbstractControllerTestCase { protected $_article_loader; protected $display_mode = "Title"; protected $display_order = "EventDebut"; public function dispatchViewByDate() { Class_Profil::getCurrentProfil() ->setCfgAccueil( ['modules' => ['8' => ['division' => '0', 'type_module' => 'CALENDAR', 'preferences' => ['display_mode' => $this->display_mode, 'display_order' => $this->display_order]], 'options' =>[]]] ); Class_AdminVar::newInstanceWithId('WORKFLOW',['valeur' => '']); $articles = [ Class_Article::getLoader() ->newInstanceWithId(1) ->setTitre('La fête de la banane') ->setDateCreation('2011-01-15') ->setContenu('Pas qu\'à moitié {FIN} Une fête qui glisse !') ->setEventsDebut('2011-09-03') ->setEventsFin('2011-10-03') ->setCategorie( Class_ArticleCategorie::getLoader()->newInstanceWithId(1) ->setLibelle('Alimentaire') ->setBib(Class_Bib::getLoader() ->newInstanceWithId(1) ->setLibelle('Bonlieu'))), Class_Article::getLoader() ->newInstanceWithId(9) ->setTitre('La fête de la frite') ->setDateCreation('2011-01-20') ->setContenu('') ->setEventsDebut('2011-09-03') ->setEventsFin('2011-09-03') ->setCategorie( Class_ArticleCategorie::getLoader()->newInstanceWithId(1) ->setLibelle('Alimentaire') )]; $articles = Class_Article::getLoader()->sortArticles($articles, $this->display_order); $prefs_module_calendar = ['titre' => "Calendrier des animations", 'event_date' => '2011-09-03', 'id_bib' => null, 'id_categorie' => '', 'events_only' => true, 'published' => false, 'display_next_event' => 1, 'nb_events' => 3, 'display_mode' => $this->display_mode, 'display_order' => $this->display_order, 'display_cat_select' => false, 'display_event_info'=>false, 'rss_avis' => false, 'boite' => null ]; if ($this->display_mode == "Summary") $prefs_module_calendar['summary_content']="Summary"; $this->_article_loader = Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Article') ->whenCalled('getArticlesByPreferences') ->with($prefs_module_calendar) ->answers($articles) ->whenCalled('getArticlesByPreferences') ->with([ 'event_date' => '2011-09-03', 'events_only' => true, 'published' => false, 'id_bib' => null, 'display_mode' => $this->display_mode, 'display_order' => $this->display_order ]) ->answers($articles) ->whenCalled('getArticlesByPreferences') ->answers($articles); $this->dispatch('/cms/articleviewbydate?d=2011-09-03&id_module=8&id_profil=2&select_id_categorie=all', true); } } class CmsControllerArticleViewByDateTest extends AbstractCmsControllerArticleViewByDateTest { public function setUp() { parent::setUp(); $this->display_mode='Title'; $this->dispatchViewByDate(); } /** @test */ public function feteDeLaBananeTitleShouldBePresent() { $this->assertXpathContentContains('//ul//li//a', 'La fête de la banane'); } /** @test */ public function feteDeLaBananeAnchorShouldLinkToActionViewArticleOne() { $this->assertXpathContentContains('//ul//li//a[contains(@href, "cms/articleview/id/1")]', 'La fête de la banane'); } /** @test */ public function dateForFeteDeLaBananeShouldBePresent() { $this->assertXpathContentContains('//ul//li//span', 'Du 03 septembre au 03 octobre'); } /** @test */ public function feteDeLaFriteShouldBePresent() { $this->assertXpathContentContains('//ul//li//a', 'La fête de la frite'); } /** @test */ public function dateForFeteDeLaFriteShouldBePresent() { $this->assertXpathContentContains('//ul//li//span', 'Le 03 septembre'); } /** @test */ public function bibliothequeLibelleShouldBePresent() { $this->assertXpathContentContains('//h2', 'Bonlieu'); } /** @test */ public function emptyBibliothequeLibelleShouldBeDisplayedAsPortail() { $this->assertXpathContentContains('//h2', 'Portail'); } } class CmsControllerProfilDivisionTest extends AbstractCmsControllerArticleViewByDateTest { public function setUp() { parent::setUp(); $cfg_accueil_jeunesse = ['modules' => ['1' => ['division' => '4', 'type_module' => 'RECH_SIMPLE', 'preferences' => ['recherche_avancee' => "on", 'select_doc' => 'on', 'select_annexe' => 'on']], '10' => ['division' => '3', 'type_module' => 'NEWS', 'preferences' => ['titre' => 'Articles']], '11' => ['division' => '1', 'type_module' => 'LOGIN', 'preferences' => ['lien_connexion' => 'Par ici la connexion']], ]]; Class_Profil::getCurrentProfil()->setCfgAccueil($cfg_accueil_jeunesse); $this->dispatch('/cms/articleviewbydate?d=2011-09-03&id_module=8&id_profil=2&select_id_categorie=all', true); } /** @test */ public function boiteNewsShouldNotBeDisplayed() { $this->assertNotXPath("//div[contains(@class, 'colDroite')]//div[@class='boite news']",$this->_response->getBody()); } /** @test */ public function boiteLoginShouldBeDisplayedAtLeft() { $this->assertXPath("//div[contains(@class, 'colGauche')]//div[@id='boite_login']",$this->_response->getBody()); } /** @test */ public function boiteNewsShouldBeDisplayedIfDivisionThreeVisibleSelected() { $this->bootstrap(); Class_Profil::getCurrentProfil()->setDivisionThreeAlwaysVisible(true); $this->dispatch('/cms/articleviewbydate?d=2011-09-03&id_module=8&id_profil=2&select_id_categorie=all', true); $this->assertXPath("//div[contains(@class, 'colDroite')]//div[@class='boite news']"); } /** @test */ public function boiteLoginShouldBeDisplayedAtRightWhenReverseOrder() { $this->bootstrap(); Class_Profil::getCurrentProfil()->setOrdreDivisions(1); $this->dispatch('/cms/articleviewbydate?d=2011-09-03&id_module=8&id_profil=2&select_id_categorie=all', true); $this->assertXPath("//div[contains(@class, 'colDroite')]//div[@class='boite login']",$this->_response->getBody()); } /** @test */ public function boiteNewsShouldNotBeDisplayedWhenReverseOrder() { $this->bootstrap(); Class_Profil::getCurrentProfil()->setOrdreDivisions(1); $this->dispatch('/cms/articleviewbydate?d=2011-09-03&id_module=8&id_profil=2&select_id_categorie=all', true); $this->assertNotXPath("//div[contains(@class, 'colGauche')]//div[@class='boite news']",$this->_response->getBody()); } /** @test */ public function boiteNewsShouldBeDisplayedWhenReverseOrderAndDivisionThreeVisibleSelected() { $this->bootstrap(); Class_Profil::getCurrentProfil() ->setOrdreDivisions(1) ->setDivisionThreeAlwaysVisible(true); $this->dispatch('/cms/articleviewbydate?d=2011-09-03&id_module=8&id_profil=2&select_id_categorie=all', true); $this->assertXPath("//div[contains(@class, 'colGauche')]//div[@class='boite news']",$this->_response->getBody()); } } class CmsControllerCalendarDisplayOrderTest extends AbstractCmsControllerArticleViewByDateTest { public function setUp() { parent::setUp(); $this->display_mode = 'Title'; $this->display_order = 'DateCreationDesc'; $this->dispatchViewByDate(); } /** @test */ public function feteDeLaBananeArticleShouldBeTheFirstArticle() { $this->assertXpathContentContains('//div/ul/li/ul/li[1]/span/a','La fête de la frite'); } } class CmsControllerArticleViewByDateWithOnlyArticlePortailTest extends AbstractControllerTestCase { protected $_article_loader; public function setUp() { parent::setUp(); $this->_article_loader = Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Article') ->whenCalled('getArticlesByPreferences') ->answers([Class_Article::newInstanceWithId(1, ['titre' => 'La fête de la frite', 'content' => '', 'events_debut' => '2011-09-03', 'events_fin' => '2011-09-03', 'categorie' => Class_ArticleCategorie::newInstanceWithId(1, ['libelle' => 'Alimentaire'])]) ]); $this->dispatch('/cms/articleviewbydate?d=2011-09-03&id_module=8&id_profil=2&select_id_categorie=all', true); } /** @test */ public function emptyBibliothequeLibelleShouldNotBeDisplayedAsPortail() { $this->assertNotXpathContentContains('//h2', 'Portail'); } /** @test */ public function titreBoiteShouldBeCalendrier() { $this->assertXPathContentContains('//div[@class="titre"]', 'Calendrier'); } } class CmsControllerArticleViewByDateCategorie23AndNoProfilParamTest extends AbstractControllerTestCase { protected $_article_loader; public function setUp() { parent::setUp(); Class_Profil::getCurrentProfil() ->setCfgModules(['cms' => ['articleviewbydate' => ['titre' => 'Agenda de la bib']]]); $this->_article_loader = Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Article') ->whenCalled('getArticlesByPreferences') ->answers(array()) ->getWrapper(); $this->dispatch('/cms/articleviewbydate?d=2011-09-03&id_module=8&select_id_categorie=23', true); } /** @test */ function byPeferencesParamShouldContainsIdCategorie23() { $prefs = $this->_article_loader->getFirstAttributeForLastCallOn('getArticlesByPreferences'); $this->assertEquals(23, $prefs['id_categorie']); } /** @test */ function contenuShouldContainsAucunContenu() { $this->assertXPathContentContains('//div', 'Aucun contenu'); } /** @test */ public function titreBoiteShouldBeAgendaDeLaBib() { $this->assertXPathContentContains('//div[@class="titre"]', 'Agenda de la bib'); } } class CmsControllerArticleViewByDateWitoutEventDateTest extends AbstractControllerTestCase { protected $_article_loader; public function setUp() { Class_AdminVar::set('WORKFLOW',''); parent::setUp(); $this->_article_loader = Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Article') ->whenCalled('getArticlesByPreferences') ->with([ 'event_date' => null, 'id_bib' => null, 'events_only' => true, 'published' => true, 'display_mode' => 'Title']) ->answers([Class_Article::newInstanceWithId(1) ->setTitre('Corrige le clic sur le bandeau de la boite calendrier qui affichait les articles non publiés') ->setCategorie(Class_ArticleCategorie::getLoader()->newInstanceWithId(1) ->setLibelle('Bugs') ->setBib(Class_Bib::newInstanceWithId(1)->setLibelle('Annecy'))) ]); $this->dispatch('/cms/articleviewbydate/id_module/8/id_profil/2'); } /** @test */ public function articleCorrigeCalendirerShouldBePresent() { $this->assertXpathContentContains('//ul//li//a', 'Corrige le clic'); } } class CmsControllerArticleViewByDateWithRadioSummarySelectedTest extends AbstractCmsControllerArticleViewByDateTest { protected $_article_loader; public function setUp() { parent::setUp(); $this->display_mode="Summary"; Class_AdminVar::newInstanceWithId('ID_READ_SPEAKER', ['valeur' => '1234']); $this->dispatchViewByDate(); } /** @test */ public function articleSummaryLaFeteDeLaBananeShouldBePresent() { $this->assertXpathContentContains('//div[@class="titre"]//h1//a[contains(@href, "/cms/articleview/id/1")]', 'La fête de la banane'); } /** @test */ public function articleTextLaFeteDeLaBananeShouldContainsSummary() { $this->assertXpathContentContains('//article/div[@class="article_content"]', 'Pas qu\'à moitié'); } /** @test */ public function articleTextLaFeteDeLaBananeShouldNotContainsFullArticle() { $this->assertNotXpathContentContains('//article', ' Une fête qui glisse !'); } /** @test */ public function speakStartMarkerShouldBePresent() { $this->assertXpathContentContains('//article[@class="auto_resize article"]', '<!-- RSPEAK_START -->'); } /** @test */ public function speakStopMarkerShouldBePresent() { $this->assertXpathContentContains('//article[@class="auto_resize article"]', '<!-- RSPEAK_STOP -->'); } /** @test **/ public function headerShouldBePresent() { $this->assertXPath('//article/header'); } /** @test **/ public function pContentShouldBePresent() { $this->assertXPath('//article/div[@class="article_content"]'); } /** @test **/ public function fotterShouldBePresent() { $this->assertXPath('//article/footer'); } /** @test */ public function readSpeakerLinkShouldBePresent() { $this->assertXPath('//a[@class="readspeaker"][contains(@onclick, "/cms/articleread?id=1")]', $this->_response->getBody()); } /** @test */ public function linkLireArticleCompleShouldBePresent() { $this->assertXPathContentContains('//a[contains(@href, "/cms/articleview/id/1")]', "Lire l'article complet"); } } class CmsControllerArticleViewByDateWithRadioFullArticleSelectedTest extends AbstractCmsControllerArticleViewByDateTest { protected $_article_loader; public function setUp() { parent::setUp(); $this->display_mode="FullArticle"; $this->dispatchViewByDate(); } /** @test */ public function articleFullTextResumeLaFeteDeLaBananeShouldContainsLaFeteDeLaBanane() { $this->assertXpathContentContains('//h1', 'La fête de la banane'); } /** @test */ public function articleFullTextLaFeteDeLaBananeShouldContainsUneFeteQuiGlisse() { $this->assertXpathContentContains('//div', 'Une fête qui glisse !'); } } abstract class CmsControllerWithFeteDeLaFriteTestCase extends AbstractControllerTestCase { public function setUp() { parent::setUp(); Class_AdminVar::newInstanceWithId('MODO_AVIS_BIBLIO') ->setValeur(0); Class_AdminVar::newInstanceWithId('MODO_AVIS') ->setValeur(0); $bonlieu = $this->fixture('Class_Bib', ['id' => 1, 'libelle' => 'Bonlieu']); $annecy = $this->fixture('Class_Lieu', ['id' => '4156465', 'libelle' => 'Annecy', 'adresse' => 'Rue des tomates', 'code_postal' => '74000']); $alimentaire = $this->fixture ( 'Class_ArticleCategorie', ['id' => 1, 'libelle' => 'Alimentaire', 'bib' => $bonlieu ]); $avis_mimi = $this->fixture('Class_Avis' , ['id' => 34, 'auteur' => $this->fixture('Class_Users' , ['id'=> 98, 'pseudo' => 'Mimi', 'password' => 'toto', 'login' => 'mimi']), 'date_avis' => '2012-02-05', 'note'=>4, 'entete' => "Hmmm", 'avis'=> 'ça a l\'air bon' ]); $avis_mimi->beWrittenByAbonne(); $avis_florence = $this->fixture('Class_Avis' , ['id' => 35, 'auteur' => $this->fixture('Class_Users' , ['id'=> 123, 'pseudo' => 'Florence', 'password' => 'toto', 'login' => 'florence']), 'date_avis' => '2012-02-05', 'note'=>2, 'entete' => "Argg", 'avis'=> 'ça ne me tente pas']); $avis_florence->beWrittenByBibliothecaire(); $avis_anonyme = $this->fixture('Class_Avis' , ['id' => 38, 'auteur' => null, 'date_avis' => '2012-02-05', 'note'=>2, 'entete' => "Anonyme", 'avis'=> 'vous ne savez pas qui je suis']); $avis_anonyme->beWrittenByBibliothecaire(); $article= $this->fixture('Class_Article', ['id' =>224, 'titre' => 'La fête de la frite', 'contenu' => '<div>Une fête appétissante</div>', 'events_debut' => '2011-09-03 12:00', 'events_fin' => '2011-10-05 16:00', 'tags' => 'Tout public;Concert', 'lieu' => $annecy, 'categorie' =>$alimentaire, 'avis' => 1, 'avis_users' => [$avis_mimi,$avis_florence,$avis_anonyme]]); $article_en = $this->fixture('Class_Article', ['id' => 2241, 'langue' => 'en', 'parent_id' => 224, 'titre' => 'Feast of fried', 'contenu' => '<div>an appetizing feast</div>']); $this->fixture('Class_CmsRank',['id' => 987, 'article' => $article]); } } class CmsControllerArticleViewTest extends CmsControllerWithFeteDeLaFriteTestCase { protected function _loginHook($account) { $account->ROLE_LEVEL = ZendAfi_Acl_AdminControllerRoles::ABONNE_SIGB; $account->PSEUDO = "admin"; } public function setUp() { parent::setUp(); Class_AdminVar::newInstanceWithId('ID_READ_SPEAKER', ['valeur' => '1234']); $this->dispatch('/cms/articleview/id/224', true); } /** * @test * @group pagetitles */ public function pageArticleviewBarreNavShouldBeFeteDeLaFrite() { $this->assertXPathContentContains('//div[@class="barre_nav"]/span','La fête de la frite',$this->_response->getBody()); } /** * @test * @group pagetitles */ public function pageArticleviewBarreNavShouldContainsLinkToCurrentProfil() { $this->assertXPathContentContains('//div[@class="barre_nav"]/span/a[contains(@href,"/index/index?id_profil=1")]','Accueil'); } /** @test */ public function titleShouldBeFeteDeLaFrite() { $this->assertXpathContentContains('//h1', 'La fête de la frite',$this->_response->getBody()); } /** @test */ public function pageTitleShouldContainsLaFeteDeLaFrite() { $this->assertXpathContentContains('//title', 'La fête de la frite'); } /** @test **/ public function articleInfoListShouldBeDisplay() { $this->assertXPath('//dl[@class="article_info"]'); } /** @test **/ public function articleInfoShouldContainsHeureDebut() { $this->assertXPathContentContains('//dl[@class="article_info"]/dd[@class="event_start_hour"]','12h', $this->_response->getBody()); } /** @test **/ public function articleInfoShouldContainsHeureFin() { $this->assertXPathContentContains('//dl[@class="article_info"]/dd[@class="event_end_hour"]','16h'); } /** @test **/ public function articleInfoShouldContainsLieu() { $this->assertXPathContentContains('//dl[@class="article_info"]/dd[@class="event_localisation"]','Annecy',$this->_response->getBody()); } /** @test **/ public function articleInfoShouldContainsTagToutPublic() { $this->assertXPathContentContains('//dl[@class="article_info"]/dd[@class="event_tag"]','Tout public'); } /** @test **/ public function articleInfoShouldContainsTagConcert() { $this->assertXPathContentContains('//dl[@class="article_info"]/dd[@class="event_tag"]','Concert'); } /** @test **/ public function articleInfoShouldContainsDateDebut() { $this->assertXPathContentContains('//dl[@class="article_info"]/dd[@class="event_start_date"]','sam 3 sept.',$this->_response->getbody()); } /** @test **/ public function articleInfoShouldContainsDateFin() { $this->assertXPathContentContains('//dl[@class="article_info"]/dd[@class="event_end_date"]','mer 5 oct.',$this->_response->getBody()); } /** @test **/ public function articleInfoShouldContainsCatPublic() { $this->assertXPathContentContains('//dl[@class="article_info"]/dd[@class="event_cat"]','Alimentaire',$this->_response->getBody()); } /** @test **/ public function articleInfoShouldContainsBibPortail() { $this->assertXPathContentContains('//dl[@class="article_info"]/dd[@class="event_bib"]','Bonlieu',$this->_response->getBody()); } /** @test */ public function calendarDateShouldBeDu3SeptembreAu5Octobre() { $this->assertXpathContentContains('//span[@class="calendar_event_date"]', 'Du 03 septembre au 05 octobre'); } /** @test */ public function socialNetworksContainerShouldBePresent() { //on garde le @id="reseaux-sociaux-224" pour la compatibilité avec les persos graphiques $this->assertXpath('//div[@class="reseaux-sociaux"][contains(@data-article-url, "cms/reseau/id_article/224")]/img[contains(@src, "patience.gif")]'); } /** @test */ public function initializeResauxSociauxScriptShouldBePresent() { $this->assertXPathContentContains('//script', "initializeReseauxSociaux"); } /** @test */ public function contentShouldBePresent() { $this->assertXpathContentContains('//div[@class="contenu"]', 'Une fête appétissante'); } /** @test */ function withLanguageEnShouldReturnEnglishTranslation() { $this->bootstrap(); $this->dispatch('/cms/articleview/id/224/language/en'); $this->assertXpathContentContains('//h1', 'Feast of fried'); } /** @test */ function withLanguageEnEventDateShouldBeTranslated() { $this->bootstrap(); $this->dispatch('/cms/articleview/id/224/language/en'); $this->assertXpathContentContains('//span[@class="calendar_event_date"]', 'From 03 September to 05 October 2011', $this->_response->getBody()); } /** @test */ function withCurrentLocaleEnShouldReturnEnglishTranslation() { $this->bootstrap(); Zend_Registry::get('session')->language = 'en'; $this->dispatch('/cms/articleview/id/224'); $this->assertXpathContentContains('//h1', 'Feast of fried'); } /** @test */ public function avisArgShouldNotHaveLinkForDeletion() { $this->assertNotXPath('//a[contains(@href, "admin/modo/delete-cms-avis/id/35")]'); } /** @test */ function divShouldContainsAdresseBonlieu() { $this->assertXPathContentContains('//div[@class="lieu"]', 'Annecy'); } /** @test */ function divShouldContainsGoogleMap() { $this->assertXPath('//div[@class="lieu"]//img[contains(@src,"http://maps.googleapis.com/maps")]'); } /** @test */ public function readSpeakerLinkShouldBePresent() { $this->assertXPath('//a[@class="readspeaker"][contains(@onclick, "/cms/articleread?id=224")]', $this->_response->getBody()); } /** @test */ public function speakStartMarkerShouldBePresent() { $this->assertXpathContentContains('//article[@class="auto_resize article"]', '<!-- RSPEAK_START -->'); } /** @test */ public function speakStopMarkerShouldBePresent() { $this->assertXpathContentContains('//article[@class="auto_resize article"]', '<!-- RSPEAK_STOP -->'); } } class CmsControllerArticleViewArticleArchivedWithWorkflowTest extends CmsControllerWithFeteDeLaFriteTestCase { protected function _loginHook($account) { $account->ROLE_LEVEL = ZendAfi_Acl_AdminControllerRoles::ABONNE_SIGB; $account->PSEUDO = "admin"; } public function setUp() { parent::setUp(); Class_AdminVar::newInstanceWithId('WORKFLOW', ['valeur' => '1']); Class_Article::find(224)->beArchived()->assertSave(); $this->dispatch('/cms/articleview/id/224'); } /** @test */ public function responseShouldBeA404NotFound() { $this->assertResponseCode(404); } /** @test */ public function pageShouldContainsH1WithNotFound() { $this->assertXPathContentContains('//h1', 'Désolé, cette page n\'existe pas'); } /** @test */ public function articleTitleShouldNotBeVisible() { $this->assertNotXPathContentContains('//h1', 'frite'); } } class CmsControllerArticleViewArticleArchivedWithWorkflowAsModoBibTest extends CmsControllerWithFeteDeLaFriteTestCase { protected function _loginHook($account) { $account->ROLE_LEVEL = ZendAfi_Acl_AdminControllerRoles::MODO_BIB; $account->PSEUDO = "redac"; } public function setUp() { parent::setUp(); Class_AdminVar::newInstanceWithId('WORKFLOW', ['valeur' => '1']); Class_Article::find(224)->beArchived()->assertSave(); $this->dispatch('/cms/articleview/id/224'); } /** @test */ public function responseShouldNotBeA404NotFound() { $this->assertNotResponseCode(404); } /** @test */ public function articleTitleShouldBeVisible() { $this->assertXPathContentContains('//h1', 'frite'); } } class CmsControllerArticleViewAsAdminTest extends CmsControllerWithFeteDeLaFriteTestCase { protected function _loginHook($account) { $account->ROLE_LEVEL = ZendAfi_Acl_AdminControllerRoles::ADMIN_PORTAIL; $account->PSEUDO = "admin"; } public function setUp() { parent::setUp(); $this->dispatch('/cms/articleview/id/224', true); } /** @test */ public function avisShouldContainsEnteteArgg() { $this->assertXPathContentContains('//table[@class="avis"]//td', 'Argg',$this->_response->getBody()); } /** @test */ public function avisFlorenceShouldHaveParFlorence() { $this->assertXPathContentContains('//div', 'par : <b>Florence</b>'); } /** @test */ public function avisShouldContainsEnteteHmmm() { $this->assertXPathContentContains('//table[@class="avis"]//td', 'Hmmm'); } /** @test */ public function avisShouldContainsEnteteAnonyme() { $this->assertXPathContentContains('//table[@class="avis"]//td', 'Anonyme'); } /** @test */ public function avisHmmShouldHaveLinkForDeletion() { $this->assertXPath('//table[@class="avis"]//td[contains(text(), "Hmmm")]//a[contains(@href, "admin/modo/delete-cms-avis/id/34")]'); } /** @test */ public function avisArgShouldHaveLinkForDeletion() { $this->assertXPath('//table[@class="avis"]//td[contains(text(), "Argg")]//a[contains(@href, "admin/modo/delete-cms-avis/id/35")]'); } /** @test */ public function tagEditArticleShouldBeVisible() { $this->assertXPath('//a[contains(@href, "/admin/cms/newsedit/id/224")]'); } } class CmsControllerArticleViewWithModoTest extends CmsControllerWithFeteDeLaFriteTestCase { public function setUp() { parent::setUp(); Class_AdminVar::getLoader() ->newInstanceWithId('MODO_AVIS_BIBLIO') ->setValeur(1); Class_AdminVar::getLoader() ->newInstanceWithId('MODO_AVIS') ->setValeur(1); $this->dispatch('/cms/articleview/id/224', true); } /** @test */ public function avisNotShouldContainsEnteteArgg() { $this->assertNotXPathContentContains('//table[@class="avis"]//td', 'Argg'); } /** @test */ public function avisNotShouldContainsEnteteHmmm() { $this->assertNotXPathContentContains('//table[@class="avis"]//td', 'Hmmm'); } } class CmsControllerArticleReadTest extends CmsControllerWithFeteDeLaFriteTestCase { public function setUp() { parent::setUp(); $this->dispatch('/cms/articleread/id/224', true); } /** @test */ public function speakStartMarkerShouldBePresent() { $this->assertXpathContentContains('//article[@class="auto_resize article"]', '<!-- RSPEAK_START -->'); } /** @test */ public function speakStopMarkerShouldBePresent() { $this->assertXpathContentContains('//article[@class="auto_resize article"]', '<!-- RSPEAK_STOP -->'); } /** @test */ function withLanguageEnArticleReadShouldReturnEnglishTranslation() { $this->bootstrap(); $this->dispatch('/cms/articleread/id/224/language/en', true); $this->assertXpathContentContains('//h1', 'Feast of fried'); } } abstract class CmsControllerListTestCase extends AbstractControllerTestCase { /** * @return array */ protected function _createFeteDeLaFriteAndMatsumotoArticles() { return array( Class_Article::newInstanceWithId(224) ->setTitre('La fête de la frite') ->setDescription('Ce soir ça frite !') ->setContenu('<div>Une fête appétissante</div>'), Class_Article::newInstanceWithId(225) ->setTitre('Dédicaces de Leiji Matsumoto sama') ->setContenu('<div>Albaaaaaator, albaaaator</div>') ); } /** * Used to choose which action to dispatch */ protected function _dispatchHook() {} public function setUp() { parent::setUp(); Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Article') ->whenCalled('getArticlesByPreferences') ->answers($this->_createFeteDeLaFriteAndMatsumotoArticles()) ->getWrapper() ->whenCalled('filterByLocaleAndWorkflow') ->with($this->_createFeteDeLaFriteAndMatsumotoArticles()) ->answers($this->_createFeteDeLaFriteAndMatsumotoArticles()); $this->_dispatchHook(); } /** @test */ public function feteDeLaFriteShouldBePresent() { $this->assertXpathContentContains('//h1', 'La fête de la frite'); } /** @test */ public function dedicaceMatsumotoShouldBePresent() { $this->assertXpathContentContains('//h1', 'Dédicaces de Leiji Matsumoto sama'); } /** @test */ public function workflowAndTranslationFilterShouldBeCalled() { $this->assertTrue( Class_Article::getLoader()->methodHasBeenCalled('filterByLocaleAndWorkflow') ); } } class CmsControllerArticleViewRecentTest extends CmsControllerListTestCase { protected function _dispatchHook() { $this->dispatch('/cms/articleviewrecent/nb/2'); } } class CmsControllerViewSummaryTest extends CmsControllerListTestCase { protected function _dispatchHook() { $this->dispatch('/cms/viewsummary'); } } class CmsControllerArticleViewSelectionTest extends CmsControllerListTestCase { protected function _dispatchHook() { $this->dispatch('/cms/articleviewselection'); } public function setUp() { parent::setUp(); $this->preferences = Class_Article::getLoader()->getFirstAttributeForLastCallOn('getArticlesByPreferences'); } /** @test */ public function nbAffShouldBeThirty() { $this->assertEquals(30, $this->preferences['nb_aff']); } /** @test */ public function orderShouldBeDatePublicationDesc() { $this->assertEquals('DateCreationDesc', $this->preferences['display_order']); } } class CmsControllerArticleViewSelectionFromHorizontalMenuBoxTest extends AbstractControllerTestCase { public function setUp() { parent::setUp(); $cfg_menus = ['H' => ['libelle' => 'Menu horizontal', 'picto' => 'vide.gif', 'menus' => [['type_menu' => 'MENU', 'libelle' => 'Pratique', 'picto' => 'bookmark.png', 'preferences' => [], 'sous_menus' => [ ['type_menu' => 'NEWS', 'libelle' => 'Nouvelles', 'picto' => 'vide.gif', 'preferences' => ['titre' => 'Nouvelles', 'id_items' => 2, 'display_order' => 'Selection']] ] ]] ]]; $this->fixture('Class_Profil', ['id' => 3, 'libelle' => 'Concerts', 'cfg_menus' => $cfg_menus])->beCurrentProfil(); $article = $this->fixture('Class_Article', ['id' => 2, 'titre' => 'Ibrahim Maalouf', 'contenu' => 'En concert !']); Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Article') ->whenCalled('getArticlesByPreferences') ->with(['titre' => 'Nouvelles', 'id_items' => 2, 'display_order' => 'Selection', 'nb_aff' => 30]) ->answers([$article]); $this->dispatch('/cms/articleviewselection/id_module/1/id_menu/H', true); } /** @test */ public function pageShouldRenderArticleIbrahimMaalouf() { $this->assertXPathContentContains('//div', 'Ibrahim Maalouf'); } } class CmsControllerArticleViewPreferencesBySelectionTest extends CmsControllerListTestCase { protected function _dispatchHook() { $this->dispatch('/cms/articleviewpreferences?id_items=1-3&display_order=Selection'); } public function setUp() { parent::setUp(); $this->preferences = Class_Article::getLoader()->getFirstAttributeForLastCallOn('getArticlesByPreferences'); } /** @test */ public function itemsShouldBeOneAndThree() { $this->assertEquals('1-3', $this->preferences['id_items']); } /** @test */ public function orderShouldBeDatePublicationDesc() { $this->assertEquals('Selection', $this->preferences['display_order']); } /** @test */ public function aDivShouldContainsUneFeteAppetissante() { $this->assertXPathContentContains('//div', 'Une fête appétissante'); } /** @test */ public function noDivShouldContainsCeSoirCaFrite() { $this->assertNotXPathContentContains('//div', 'Ce soir ça frite !'); } } class CmsControllerArticleViewPreferencesSummaryTest extends CmsControllerListTestCase { protected function _dispatchHook() { $this->dispatch('/cms/articleviewpreferences?id_items=1-3&display_order=Selection&display_mode=Summary&summary_content=Summary'); } /** @test */ public function noDivShouldContainsUneFeteAppetissante() { $this->assertNotXPathContentContains('//div', 'Une fête appétissante'); } /** @test */ public function aDivShouldContainsCeSoirCaFrite() { $this->assertXPathContentContains('//div', 'Ce soir ça frite !'); } /** @test */ public function linkLireArticleCompleShouldBePresent() { $this->assertXPathContentContains('//a[contains(@href, "/cms/articleview/id/224")]', "Lire l'article complet"); } } class CmsControllerArticleViewPreferencesSummaryWithoutDisplayModeTest extends CmsControllerListTestCase { protected function _dispatchHook() { $this->dispatch('/cms/articleviewpreferences?id_items=1-3&display_order=Selection&summary_content=Summary'); } /** @test */ public function aDivShouldContainsUneFeteAppetissante() { $this->assertXPathContentContains('//div', 'Une fête appétissante'); } /** @test */ public function noDivShouldContainsCeSoirCaFrite() { $this->assertNotXPathContentContains('//div', 'Ce soir ça frite !'); } } class CmsControllerCategorieViewTest extends CmsControllerListTestCase { protected function _dispatchHook() { $this->dispatch('/cms/categorieview'); } }