Skip to content
Snippets Groups Projects
CmsControllerTest.php 27.5 KiB
Newer Older
llaffont's avatar
llaffont committed
<?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
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ête de la banane')
									->setContenu('Une fête qui glisse !')
									->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 !'),
									));
llaffont's avatar
llaffont committed

		$this->dispatch('cms/calendarrss?id_profil=2&id_module=1');

	}

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


class AbstractCmsControllerArticleViewByDateTest extends AbstractControllerTestCase {
llaffont's avatar
llaffont committed
	protected $_article_loader;
	protected $display_mode = "Title";
	protected $display_order = "EventDebut";
	protected function _initProfilHook($profil) {
		$profil->setCfgAccueil(
			['modules' => 
			 ['8' => ['division'	=> '1',
								'type_module' => 'CALENDAR',
								'preferences' => ['display_mode' => $this->display_mode,
																	'display_order' => $this->display_order]],
llaffont's avatar
llaffont committed
	public function setUp() {
		Class_AdminVar::set('WORKFLOW','');
llaffont's avatar
llaffont committed
		parent::setUp();
	 
		$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,
															'events_only' => true,
															'published' => false,
															'display_next_event' => 1,
															'nb_events' => 3,
															'display_mode' => $this->display_mode,
															'display_order' => $this->display_order,
															'id_categorie' => '',
															'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);
		$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() {
		$this->display_mode='Title';
		parent::setUp();
	}
llaffont's avatar
llaffont committed
	/** @test */
	public function feteDeLaBananeTitleShouldBePresent() {
		$this->assertXpathContentContains('//ul//li//a', 'La fête de la banane',$this->_response->getBody());
llaffont's avatar
llaffont committed
	/** @test */
	public function feteDeLaBananeAnchorShouldLinkToActionViewArticleOne() {
		$this->assertXpathContentContains('//ul//li//a[contains(@href, "cms/articleview/id/1")]', 
																			'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');
	}

llaffont's avatar
llaffont committed
	/** @test */
	function byPreferencesParamShouldNotContainsIdCategory() {
llaffont's avatar
llaffont committed
		$this->assertFalse(array_key_exists("id_categorie", 
																				$this->_article_loader->getFirstAttributeForLastCallOn('getArticlesByPreferences'))); 
	}
}

class CmsControllerCalendarDisplayOrderTest extends AbstractCmsControllerArticleViewByDateTest {
	
	public function setUp() {
		$this->display_mode = 'Title';
		$this->display_order = 'DateCreationDesc';
		parent::setUp();
	}
	
	/** @test */
	public function feteDeLaBananeArticleShouldBeTheFirstArticle() {
		$this->assertXpathContentContains('//div/ul/li/ul/li[1]/span/a','La fête de la frite',$this->_response->getBody());
	}



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', $this->_response->getBody());
	}


	/** @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', $this->_response->getBody());


	/** @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,
							'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', $this->_response->getBody());
 class CmsControllerArticleViewByDateWithRadioSummarySelectedTest extends AbstractCmsControllerArticleViewByDateTest {
		$this->display_mode="Summary";
	/** @test */
	public function articleSummaryLaFeteDeLaBananeShouldBePresent() {
		$this->assertXpathContentContains('//h1', 'La fête de la banane',$this->_response->getBody());
	}

	/** @test */
	public function articleTextLaFeteDeLaBananeShouldContainsSummary() {
		$this->assertXpathContentContains('//div', 'Pas qu\'à moitié',$this->_response->getBody());
	}

	/** @test */
	public function articleTextLaFeteDeLaBananeShouldNotContainsFullArticle() {
		$this->assertNotXpathContentContains('//div', '	Une fête qui glisse !',$this->_response->getBody());
	}

}


class CmsControllerArticleViewByDateWithRadioFullArticleSelectedTest extends AbstractCmsControllerArticleViewByDateTest {
	protected $_article_loader;
	
	public function setUp() {
		$this->display_mode="FullArticle";
		parent::setUp();
	public function articleFullTextResumeLaFeteDeLaBananeShouldContainsLaFeteDeLaBanane() {
		$this->assertXpathContentContains('//h1', 'La fête de la banane',$this->_response->getBody());
	}

		/** @test */
	public function articleFullTextLaFeteDeLaBananeShouldContainsUneFeteQuiGlisse() {
		$this->assertXpathContentContains('//div', 'Une fête qui glisse !',$this->_response->getBody());
	}
llaffont's avatar
llaffont committed
abstract class CmsControllerWithFeteDeLaFriteTestCase extends AbstractControllerTestCase {
	public function setUp() {
		parent::setUp();

		Class_AdminVar::getLoader()
			->newInstanceWithId('MODO_AVIS_BIBLIO')
			->setValeur(0);

		Class_AdminVar::getLoader()
			->newInstanceWithId('MODO_AVIS')
			->setValeur(0);


		Class_Article::newInstanceWithId(224)
			->setTitre('La fête de la frite')
			->setContenu('<div>Une fête appétissante</div>')
			->setEventsDebut('2011-09-03')
			->setEventsFin('2011-10-05')
			->setTraductions(array(Class_Article::getLoader()
														 ->newInstanceWithId(2241)
														 ->setLangue('en')
														 ->setParentId(224)
														 ->setTitre('Feast of fried')
														 ->setContenu('<div>an appetizing feast</div>')))
			->setAvis(1)
			->setLieu(Class_Lieu::newInstanceWithId(3)
								->setLibelle('Bonlieu')
								->setAdresse('1, rue Jean Jaures')
								->setCodePostal('74000')
								->setVille('Annecy')
								->setPays('France'))
			->setAvisUsers([$avis_mimi = Class_Avis::getLoader()
											->newInstanceWithId(34)
											->setAuteur(Class_Users::getLoader()
																	->newInstanceWithId(98)
																	->setPseudo('Mimi'))
											->setDateAvis('2012-02-05')
											->setNote(4)
											->setEntete('Hmmm')
											->setAvis('ça a l\'air bon')
											->beWrittenByAbonne(),

											$avis_florence = Class_Avis::getLoader()
											->newInstanceWithId(35)
											->setAuteur(Class_Users::getLoader()
																	->newInstanceWithId(123)
																	->setPseudo('Florence'))
											->setDateAvis('2012-12-05')
											->setNote(2)
											->setEntete('Argg')
											->setAvis('ça ne me tente pas')
											->beWrittenByBibliothecaire(),

											$avis_anonyme = Class_Avis::getLoader()
											->newInstanceWithId(38)
											->setAuteur(null)
											->setDateAvis('2012-12-12')
											->setNote(2)
											->setEntete('Anonyme')
											->setAvis('vous ne savez pas qui je suis')
											->beWrittenByBibliothecaire()]);
llaffont's avatar
llaffont committed

		Storm_Test_ObjectWrapper::onLoaderOfModel('Class_CmsRank')
			->whenCalled('findFirstBy')
			->answers(null)
			
			->whenCalled('findFirstBy')
			->with(array('id_cms' => 224))
			->answers(Class_CmsRank::getLoader()->newInstanceWithId(987));
      

llaffont's avatar
llaffont committed
		Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Avis')
			->whenCalled('findAllBy')
llaffont's avatar
llaffont committed
			->with(array(
							 'id_cms' => 224,
							 'order' => 'date_avis desc',
							 'abon_ou_bib' => 0))
llaffont's avatar
llaffont committed
			->answers(array($avis_mimi))


			->whenCalled('findAllBy')
			->with(array(
							 'id_cms' => 224,
							 'order' => 'date_avis desc',
							 'abon_ou_bib' => 1))
			->answers(array($avis_florence, $avis_anonyme));
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
		$this->dispatch('/cms/articleview/id/224', true);
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');
	}


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() {
		$this->assertXpath('//div[@id="reseaux-sociaux-224"]');
	}

llaffont's avatar
llaffont committed
	/** @test */
	public function contentShouldBePresent() {
		$this->assertXpathContentContains('//div', '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');
	}
llaffont's avatar
llaffont committed
	/** @test */
	public function avisArgShouldNotHaveLinkForDeletion() {
		$this->assertNotXPath('//a[contains(@href, "admin/modo/delete-cms-avis/id/35")]');
	}


	/** @test */
	function divShouldContainsAdresseBonlieu() {
		$this->assertXPathContentContains('//div[@class="lieu"]', 'Bonlieu');
	}


	/** @test */
	function divShouldContainsGoogleMap() {
		$this->assertXPath('//div[@class="lieu"]//img[contains(@src,"http://maps.googleapis.com/maps")]');
	}
llaffont's avatar
llaffont committed
}




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


	/** @test */
	public function avisFlorenceShouldHaveParFlorence() {
		$this->assertXPathContentContains('//div', 'par : <b>Florence</b>');
	}

llaffont's avatar
llaffont committed

	/** @test */
	public function avisShouldContainsEnteteHmmm() {
llaffont's avatar
llaffont committed
		$this->assertXPathContentContains('//table[@class="avis"]//td', 'Hmmm');
	}


	/** @test */
	public function avisShouldContainsEnteteAnonyme() {
		$this->assertXPathContentContains('//table[@class="avis"]//td', 'Anonyme');
	}



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

}




llaffont's avatar
llaffont committed
class CmsControllerArticleReadTest extends CmsControllerWithFeteDeLaFriteTestCase {
	public function setUp() {
		parent::setUp();
llaffont's avatar
llaffont committed
		$this->dispatch('/cms/articleread/id/224', true);
llaffont's avatar
llaffont committed
	}

	/** @test */
	public function speakStartMarkerShouldBePresent() {
		$this->assertXpathContentContains('//body', '<!-- RSPEAK_START -->');
	}

	/** @test */
	public function speakStopMarkerShouldBePresent() {
		$this->assertXpathContentContains('//body', '<!-- RSPEAK_STOP -->');
	}


	/** @test */
	function withLanguageEnArticleReadShouldReturnEnglishTranslation() {
		$this->bootstrap();
llaffont's avatar
llaffont committed
		$this->dispatch('/cms/articleread/id/224/language/en', true);
llaffont's avatar
llaffont committed
		$this->assertXpathContentContains('//h1', 'Feast of fried');
	}
}



llaffont's avatar
llaffont committed

llaffont's avatar
llaffont committed
abstract class CmsControllerListTestCase extends AbstractControllerTestCase {
	/**
	 * @return array
	 */
	protected function _createFeteDeLaFriteAndMatsumotoArticles() {
		return array(
			Class_Article::getLoader()
			->newInstanceWithId(224)
			->setTitre('La fête de la frite')
			->setDescription('Ce soir ça frite !')
			->setContenu('<div>Une fête appétissante</div>'),
			Class_Article::getLoader()
			->newInstanceWithId(225)
			->setTitre('Dédicaces de Leiji Matsumoto sama')
			->setContenu('<div>Albaaaaaator, albaaaator</div>')
llaffont's avatar
llaffont committed

	/**
	 * 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')
llaffont's avatar
llaffont committed
class CmsControllerArticleViewRecentTest extends CmsControllerListTestCase {
	protected function _dispatchHook() {
		$this->dispatch('/cms/articleviewrecent/nb/2');
	}
}

llaffont's avatar
llaffont committed
class CmsControllerViewSummaryTest extends CmsControllerListTestCase {
	protected function _dispatchHook() {
		$this->dispatch('/cms/viewsummary');
	}
}

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




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 !');
	}
llaffont's avatar
llaffont committed
class CmsControllerCategorieViewTest extends CmsControllerListTestCase {
	protected function _dispatchHook() {