Skip to content
Snippets Groups Projects
CmsControllerTest.php 41.3 KiB
Newer Older
llaffont's avatar
llaffont committed
<?php
/**
 * Copyright (c) 2012, Agence Française Informatique (AFI). All rights reserved.
 *
Laurent's avatar
Laurent committed
 * BOKEH is free software; you can redistribute it and/or modify
llaffont's avatar
llaffont committed
 * 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).
 *
Laurent's avatar
Laurent committed
 * BOKEH is distributed in the hope that it will be useful,
llaffont's avatar
llaffont committed
 * 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
Laurent's avatar
Laurent committed
 * along with BOKEH; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
require_once 'application/modules/opac/controllers/CmsController.php';
llaffont's avatar
llaffont committed
class CmsControllerRssNoProfileTest extends AbstractControllerTestCase {
	public function setUp() {
		parent::setUp();

		Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Profil')
			->whenCalled('find')
			->answers(null);

		$this->dispatch('cms/rss');
	}

llaffont's avatar
llaffont committed
	/** @test */
	public function titleShouldBeFluxIndisponible() {
		$this->assertXPathContentContains('//channel/title', 'Flux indisponible');
	}
}

class CmsControllerdCalendarRssWithProfileAndArticleTest
llaffont's avatar
llaffont committed
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
llaffont's avatar
llaffont committed
				'options' => 	array()
llaffont's avatar
llaffont committed
	}

	public function setUp() {
		parent::setUp();
		CmsController::setTimeSource(new TimeSourceForTest('2014-12-01 14:00:00'));
		Class_Calendar::setTimeSource(new TimeSourceForTest('2014-12-01 14:00:00'));
		$fete =$this->fixture('Class_Article',
									 ['id' => 1,
										'titre' => 'La fête de la banane',
										'contenu' => 'Une fête qui glisse !<img src="'.BASE_URL.'/image/banane.jpg"/>'])
				 ->setDateMaj('2011-11-11 11:11:11')
								->setEventsDebut('2009-09-09 09:09:09');
		$fete_frite=$this->fixture('Class_Article',
									 ['id' => 2,
										'titre' => 'La fête de la frite',
										'contenu' => 'Une fête qui sent !',
										'debut' => '2012-12-12 12:12:12']);

llaffont's avatar
llaffont committed
		Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Article')
			->whenCalled('getArticlesByPreferences')
			->with(['titre' => 'Les dernières nouvelles',
							'type_aff' => 2,
							'id_categorie' => '',
							'id_items' => '',
							'nb_aff' => 2,
							'nb_analyse' => 5,
							'display_order' => 'Random',
							'display_titles_only' => false,
							'rss_avis' => 1,
							'op_largeur_img' => 200,
							'op_hauteur_boite' => 400,
							'boite' => null,
							'id_module' => 1,
							'event_end_after' => "2014-12-01",
							'events_only' => true,
							'published' => true])
			->answers([
			->beStrict();

		$this->dispatch('cms/calendarrss?id_profil=2&id_module=1', true);
	/** @test */
	public function imgShouldBeDisplayWithAbsoluteUrl() {
		$this->assertXPathContentContains('//description',
																			'<img src="http://localhost'.BASE_URL.'/image/banane.jpg"');
llaffont's avatar
llaffont committed
	/** @test */
	public function channelTitleShouldBeLesDernieresNouvelles() {
		$this->assertXpathContentContains('//channel/title',
																			'Les dernières nouvelles');
llaffont's avatar
llaffont committed
	/** @test */
	public function channelDescriptionShouldBeAgendaColonLesDerniereNouvelles() {
		$this->assertXpathContentContains('//channel/description',
																			'Agenda: Les dernières nouvelles');
llaffont's avatar
llaffont committed
	/** @test */
	public function itemsCountShouldBeTwo() {
		$this->assertXpathCount('//channel/item', 2);
	}

llaffont's avatar
llaffont committed
	/** @test */
	public function firstItemDateShouldBe09_09_2009() {
		$this->assertXpathContentContains('//channel/item[1]/pubDate',
																			'09 Sep 2009',
																			$this->_response->getBody());
	}


		/** @test */
	public function secondItemDateShouldBe12_12_2012() {
		$this->assertXpathContentContains('//channel/item[2]/pubDate',
																			'12 Dec 2012',
																			$this->_response->getBody());
llaffont's avatar
llaffont committed
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
llaffont's avatar
llaffont committed
				'options' => 	array()
llaffont's avatar
llaffont committed

	}

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

		Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Article')
			->whenCalled('getArticlesByPreferences')
			->answers(array(
									Class_Article::getLoader()
									->newInstanceWithId(1)
									->setTitre('La f&ecirc;te de la banane')
									->setContenu('Une f&ecirc;te qui glisse !'),
									Class_Article::getLoader()
									->newInstanceWithId(2)
									->setTitre('La fête de la frite')
									->setContenu('Une fête qui sent !'),
									));
llaffont's avatar
llaffont committed

		$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() {
llaffont's avatar
llaffont committed
		$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 {
llaffont's avatar
llaffont committed
	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' =>[]]]
				);
llaffont's avatar
llaffont committed

		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(
llaffont's avatar
llaffont committed
										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(
llaffont's avatar
llaffont committed
										Class_ArticleCategorie::getLoader()->newInstanceWithId(1)
		$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();
llaffont's avatar
llaffont committed

llaffont's avatar
llaffont committed
	/** @test */
	public function feteDeLaBananeTitleShouldBePresent() {
		$this->assertXpathContentContains('//ul//li//a', 'La fête de la banane');
llaffont's avatar
llaffont committed
	/** @test */
	public function feteDeLaBananeAnchorShouldLinkToActionViewArticleOne() {
		$this->assertXpathContentContains('//ul//li//a[contains(@href, "cms/articleview/id/1")]',
llaffont's avatar
llaffont committed
																			'La fête de la banane');
	}

llaffont's avatar
llaffont committed
	/** @test */
	public function dateForFeteDeLaBananeShouldBePresent() {
		$this->assertXpathContentContains('//ul//li//span', 'Du 03 septembre au 03 octobre');
	}

llaffont's avatar
llaffont committed
	/** @test */
	public function feteDeLaFriteShouldBePresent() {
		$this->assertXpathContentContains('//ul//li//a', 'La fête de la frite');
	}

llaffont's avatar
llaffont committed
	/** @test */
	public function dateForFeteDeLaFriteShouldBePresent() {
		$this->assertXpathContentContains('//ul//li//span', 'Le 03 septembre');
	}

llaffont's avatar
llaffont committed
	/** @test */
	public function bibliothequeLibelleShouldBePresent() {
		$this->assertXpathContentContains('//h2', 'Bonlieu');
	}

llaffont's avatar
llaffont committed
	/** @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']],
																									 'type_module' => 'NEWS',
																									 'preferences' => ['titre' => 'Articles']],
efalcy's avatar
efalcy committed
																									 '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());
efalcy's avatar
efalcy committed
	/** @test */
	public function boiteLoginShouldBeDisplayedAtLeft() {
		$this->assertXPath("//div[contains(@class, 'colGauche')]//div[@id='boite_login']",$this->_response->getBody());
	}

	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']");
efalcy's avatar
efalcy committed
	/** @test */
	public function boiteLoginShouldBeDisplayedAtRightWhenReverseOrder() {
efalcy's avatar
efalcy committed
		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());
efalcy's avatar
efalcy committed

	}

	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());
	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,
									]);

		$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 {
llaffont's avatar
llaffont committed
	protected $_article_loader;

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

		Class_Profil::getCurrentProfil()
			->setCfgModules(['cms' =>	['articleviewbydate' => ['titre' => 'Agenda de la bib']]]);

llaffont's avatar
llaffont committed
		$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);
llaffont's avatar
llaffont committed
	}


	/** @test */
	function byPeferencesParamShouldContainsIdCategorie23() {
		$prefs = $this->_article_loader->getFirstAttributeForLastCallOn('getArticlesByPreferences');
		$this->assertEquals(23,	$prefs['id_categorie']);
llaffont's avatar
llaffont committed
	/** @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')
			->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', true);
	}


	/** @test */
	public function articleCorrigeCalendirerShouldBePresent() {
		$this->assertXpathContentContains('//ul//li//a', 'Corrige le clic', $this->_response->getBody());
class CmsControllerArticleViewByDateWithRadioSummarySelectedTest extends AbstractCmsControllerArticleViewByDateTest {
		parent::setUp();
		$this->display_mode="Summary";
llaffont's avatar
llaffont committed
		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")]',
	}

	/** @test */
	public function articleTextLaFeteDeLaBananeShouldContainsSummary() {
gloas's avatar
gloas committed
		$this->assertXpathContentContains('//article/div[@class="article_content"]', 'Pas qu\'à moitié');

	/** @test */
	public function articleTextLaFeteDeLaBananeShouldNotContainsFullArticle() {
gloas's avatar
gloas committed
		$this->assertNotXpathContentContains('//article', '	Une fête qui glisse !');

	/** @test */
	public function speakStartMarkerShouldBePresent() {
gloas's avatar
gloas committed
		$this->assertXpathContentContains('//article[@class="auto_resize article"]', '<!-- RSPEAK_START -->');
	}

	/** @test */
	public function speakStopMarkerShouldBePresent() {
gloas's avatar
gloas committed
		$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();
	public function articleFullTextResumeLaFeteDeLaBananeShouldContainsLaFeteDeLaBanane() {
		$this->assertXpathContentContains('//h1', 'La fête de la banane');
	/** @test */
	public function articleFullTextLaFeteDeLaBananeShouldContainsUneFeteQuiGlisse() {
		$this->assertXpathContentContains('//div', 'Une fête qui glisse !');
llaffont's avatar
llaffont committed
abstract class CmsControllerWithFeteDeLaFriteTestCase extends AbstractControllerTestCase {
	public function setUp() {
		parent::setUp();

efalcy's avatar
efalcy committed
		Class_AdminVar::newInstanceWithId('MODO_AVIS_BIBLIO')
efalcy's avatar
efalcy committed
		Class_AdminVar::newInstanceWithId('MODO_AVIS')
efalcy's avatar
efalcy committed
		$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']);

efalcy's avatar
efalcy committed
		$alimentaire = $this->fixture (	'Class_ArticleCategorie', ['id' => 1,
																															 'libelle' => 'Alimentaire',
																															 'bib' => $bonlieu ]);
efalcy's avatar
efalcy committed
		$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'
																	]);
efalcy's avatar
efalcy committed
		$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><img src="userfiles/image/foo.jpg" /><p>Une fête appétissante</p></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>']);
efalcy's avatar
efalcy committed
		$this->fixture('Class_CmsRank',['id' => 987,
																		'article' => $article]);
llaffont's avatar
llaffont committed

class CmsControllerViewNoticeMetasTest extends CmsControllerWithFeteDeLaFriteTestCase {
	public function setUp() {
		parent::setUp();
		$this->dispatch('/cms/articleview/id/224', true);
	}


	/** @test */
	public function pageShouldContainTitleMeta() {
		$this->assertXPathContentContains('//meta[@property="og:title"]/@content', 'La fête de la frite', $this->_response->getBody());
	}

	/** @test */
	public function pageShouldContainDescriptionMeta() {
		$this->assertXPath('//meta[@property="og:description"][@content="Une fête appétissante"]');

	/** @test */
	public function pageShouldContainImageMeta() {
		$this->assertXPath('//meta[@property="og:image"][@content="' . ROOT_URL . BASE_URL . '/userfiles/image/foo.jpg"]');
	}

class CmsControllerArticleViewInEnglishTest extends CmsControllerWithFeteDeLaFriteTestCase {
	/** @test */
	function withLanguageEnShouldReturnEnglishTranslation() {
		$this->dispatch('/cms/articleview/id/224/language/en');
		$this->assertXpathContentContains('//h1', 'Feast of fried');
	}


	/** @test */
	function withLanguageEnEventDateShouldBeTranslated() {
		$this->dispatch('/cms/articleview/id/224/language/en', true);
		$this->assertXpathContentContains('//span[@class="calendar_event_date"]',
																			'From 03 September to 05 October 2011',
																			$this->_response->getBody());
	}


	/** @test */
	function withCurrentLocaleEnShouldReturnEnglishTranslation() {
		Zend_Registry::get('session')->language = 'en';
		$this->dispatch('/cms/articleview/id/224');
		$this->assertXpathContentContains('//h1', 'Feast of fried');
	}
}


llaffont's avatar
llaffont committed
class CmsControllerArticleViewTest extends CmsControllerWithFeteDeLaFriteTestCase {
	protected function _loginHook($account) {
		$account->ROLE_LEVEL = ZendAfi_Acl_AdminControllerRoles::ABONNE_SIGB;
		$account->PSEUDO = "admin";
	}

llaffont's avatar
llaffont committed
	public function setUp() {
		parent::setUp();
llaffont's avatar
llaffont committed

		Class_AdminVar::newInstanceWithId('ID_READ_SPEAKER', ['valeur' => '1234']);

llaffont's avatar
llaffont committed
		$this->dispatch('/cms/articleview/id/224', true);
llaffont's avatar
llaffont committed
	 * @group pagetitles
llaffont's avatar
llaffont committed
	 */
	public function pageArticleviewBarreNavShouldBeFeteDeLaFrite() {
	  $this->assertXPathContentContains('//div[@class="barre_nav"]/span','La fête de la frite',$this->_response->getBody());
llaffont's avatar
llaffont committed
	 * @group pagetitles
llaffont's avatar
llaffont committed
	 */
	public function pageArticleviewBarreNavShouldContainsLinkToCurrentProfil() {
	  $this->assertXPathContentContains('//div[@class="barre_nav"]/span/a[contains(@href,"/index/index?id_profil=1")]','Accueil');
llaffont's avatar
llaffont committed
	/** @test */
	public function titleShouldBeFeteDeLaFrite() {
		$this->assertXpathContentContains('//h1', 'La fête de la frite');
	/** @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');
	}


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


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


	/** @test **/
	public function articleInfoShouldContainsDateFin() {
		$this->assertXPathContentContains('//dl[@class="article_info"]/dd[@class="event_end_date"]','mer 5 oct.');
	}


	/** @test **/
	public function articleInfoShouldContainsCatPublic() {
		$this->assertXPathContentContains('//dl[@class="article_info"]/dd[@class="event_cat"]','Alimentaire');
	}


	/** @test **/
	public function articleInfoShouldContainsBibPortail() {
		$this->assertXPathContentContains('//dl[@class="article_info"]/dd[@class="event_bib"]','Bonlieu');
llaffont's avatar
llaffont committed
	/** @test */
	public function calendarDateShouldBeDu3SeptembreAu5Octobre() {
		$this->assertXpathContentContains('//span[@class="calendar_event_date"]', 'Du 03 septembre au 05 octobre');
	}

llaffont's avatar
llaffont committed
	/** @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")]');
llaffont's avatar
llaffont committed
	public function initializeResauxSociauxScriptShouldBePresent() {
		$this->assertXPathContentContains('//script',
llaffont's avatar
llaffont committed
																			"initializeReseauxSociaux");
llaffont's avatar
llaffont committed
	/** @test */
	public function contentShouldBePresent() {
		$this->assertXpathContentContains('//div[@class="contenu"]', 'Une fête appétissante');
llaffont's avatar
llaffont committed
	/** @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"]',
llaffont's avatar
llaffont committed
																			'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');