Skip to content
Snippets Groups Projects
JavaControllerTest.php 7.98 KiB
Newer Older
<?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
 * 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,
 * 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
class JavaControllerWidthDefaultKiosqueTest extends AbstractControllerTestCase {
		$cfg_accueil = ['modules' => ['1' => ['division' => 1,
																					'type_module' => 'KIOSQUE']],
										'options' => 	[]];
		$this->profil_cache = Class_Profil::getLoader()->newInstanceWithId(5345)
																									 ->setBrowser('opac')
																									 ->setLibelle('Profil cache')
																									 ->setCfgAccueil($cfg_accueil);

		Class_Profil::setCurrentProfil(Class_Profil::getLoader()->newInstanceWithId(2)
																	 ->setLibelle('Accueil'));
		$_SESSION['id_profil'] = 2;

		$this->dispatch('java/kiosque?id_module=1&id_profil=5345', true);
	}


	/** @test */
	public function sessionIdProfilShouldBeProfil2() {
		$this->assertEquals(2, $_SESSION['id_profil']);
	}


	/** @test */
	public function vueShouldDefaultsToDiaporama() {
		$this->assertXPath('//script[contains(@src, "diaporama")]');
	}
}


class JavaControllerCarrouselHorizontalTest extends AbstractControllerTestCase {
	public function setUp() {
		parent::setUp();
		$this->fixture('Class_Profil',
									 ['id' => 3,
										'browser' => 'opac',
										'libelle' => 'kiosque test',
										'cfg_accueil' => ['modules' => ['1' => ['division' => 1,
																														'type_module' => 'KIOSQUE',
																														'titre' => '',
Laurent's avatar
Laurent committed
																														'vue' => 'mycarousel_horizontal',
																														'preferences' => ['op_speed' => 400]]],
																			'options' => 	[]]])
				 ->beCurrentProfil();

		Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Catalogue')
			->whenCalled('getNoticesByPreferences')
			->answers([
								 ['id_notice' => 4,
									'titre' => 'Madagascar',
									'vignette' => 'http://thumbnail.com/madagascar.jpg'
		$this->dispatch('java/kiosque/id_module/1/titre/title+%2F+with+some+%2F+slashes/vue/mycarousel_horizontal', true);
	}


	/** @test */
	public function titleShouldBeRemovedBecauseOfPossibleApacheMisconfigurationOfAllowEncodedSlashes() {
		$this->assertXPath('//div[@class="jMyCarousel"]//a[@href="/recherche/viewnotice/id_module/1/vue/mycarousel_horizontal/id/4"]');
	}

	/** @test */
	public function jMyCarouselShouldBeLoaded() {
		$this->assertContains('jMyCarousel', $this->_response->getBody());
class JavaControllerWithKiosqueMurPageTest extends AbstractControllerTestCase {
	public function setUp() {
		parent::setUp();
gloas's avatar
gloas committed

		$cfg_accueil = ['modules' => ['1' => ['division' => 1,
																					'type_module' => 'KIOSQUE',
																					'preferences' => 	['style_liste' => 'mur',
																														 'nb_notices' => 10,
																														 'nb_analyse' => 50,
																														 'only_img' => 0]]]];

		Class_Profil::getCurrentProfil()->setCfgAccueil($cfg_accueil);

		$this->dispatch('java/page/no/2/id_module/1', true);
	}


	/** @test */
	public function firstControlShouldLinkToPageOne() {
		$this->assertXPath('//div[@class="controls"]/a[1][contains(@href, "java/page/no/1/id_module/1")]', $this->_response->getBody());
	}


	/** @test */
	public function lastControlShouldLinkToPageThree() {
		$this->assertXPath('//div[@class="controls"]/a[2][contains(@href, "java/page/no/3/id_module/1")]');
	}
}




class JavaControllerWithKiosqueMurAndPanierDeletedTest extends AbstractControllerTestCase {
	public function setUp() {
		parent::setUp();
		$cfg_accueil = ['modules' => ['1' => ['division' => 1,
																					'type_module' => 'KIOSQUE',
																					'preferences' => 	['style_liste' => 'mur',
																														 'id_panier' => 99999,
																														 'nb_notices' => 10,
																														 'nb_analyse' => 50,
																														 'titre' => 'Mon panier']]]];

		Class_Profil::getCurrentProfil()->setCfgAccueil($cfg_accueil);

		$this->dispatch('/', true);
	}


	/** @test */
	public function titreMonPanierShouldBeDisplayed() {
		$this->assertXPathContentContains('//h1', 'Mon panier', $this->_response->getBody());
	}
}




class JavaControllerKiosqueSlideShowWidthWrongParamsTest extends AbstractControllerTestCase {
	public function setUp() {
		parent::setUp();
		$cfg_accueil = ['modules' => ['1' => ['division' => 1,
																					'type_module' => 'MENU']],
		$this->profil = Class_Profil::newInstanceWithId(5345, ['browser' => 'opac',
																													 'libelle' => 'Profil cache',
																													 'cfg_acceuil' => $cfg_accueil]);


		$this->mock_sql = Storm_Test_ObjectWrapper::mock();
		Zend_Registry::set('sql', $this->mock_sql);


		$this->mock_sql
			->whenCalled('fetchAll')
			->with("select notices.id_notice, notices.editeur, notices.annee, notices.date_creation, notices.date_maj, notices.facettes, notices.clef_oeuvre from notices Where url_vignette > '' and url_vignette != 'NO' order by date_creation DESC  LIMIT 0,50",
			->answers([])
			->beStrict();

		$this->dispatch('java/kiosque?id_module=1&id_profil=5345', true);
	}


	/** @test */
	public function vueShouldDefaultsToDiaporama() {
		$this->assertXPathContentContains('//script', 'slideshow');
	}
}




class JavaControllerKiosqueSlideShowWithRedirectSettingsTest extends AbstractControllerTestCase {


	public function setUp() {
		parent::setUp();
		$this->mock_sql = Storm_Test_ObjectWrapper::mock();
		Zend_Registry::set('sql', $this->mock_sql);

		$this->mock_sql
			->whenCalled('fetchAll')
			->answers([$this->fixture('Class_Notice',
																['id' => 11,
																 'clef_oeuvre' => 'POT'
																])->toArray()]);
	}


	protected function javaUrlWithPreferences($display_mode, $redirect_profil) {
		return 'java/kiosque/id_module/3-1/titre/title+%2F+with+some+%2F+slashes/vue/' . $display_mode. '/id_profil/'.$redirect_profil;

	}


	public function datas() {
		return [[$this->javaUrlWithPreferences('slide_show', 123), '//div[@id="theImages"]//a[contains(@href, "id_profil/123")][contains(@href, "id_module/3-1")]'],
						[$this->javaUrlWithPreferences('protoflow', 123), '//div[@id="protoflow"]//a[contains(@href, "id_profil/123")][contains(@href, "id_module/3-1")]'],
						[$this->javaUrlWithPreferences('cube', 123), '//div[@id="linksCube"]//a[contains(@href, "id_profil/123")][contains(@href, "id_module/3-1")]'],
						[$this->javaUrlWithPreferences('diaporama', 123), '//div[@class="slideshow"]//img[contains(@onclick, "id_profil/123")][contains(@onclick, "id_module/3-1")]'],
						[$this->javaUrlWithPreferences('jcarousel', 123), '//ul[@id="mycarousel"]//a[contains(@href, "id_profil/123")][contains(@href, "id_module/3-1")]'],
						[$this->javaUrlWithPreferences('mycarousel_horizontal', 123), '//div[@class="jMyCarousel"]//a[contains(@href, "id_profil/123")][contains(@href, "id_module/3-1")]'],
						[$this->javaUrlWithPreferences('mycarousel_vertical', 123), '//div[@class="jMyCarousel"]//a[contains(@href, "id_profil/123")][contains(@href, "id_module/3-1")]']];
	}


	/**
	 * @test
	 * @dataProvider datas
	 */
	public function recordLinksShouldBeAsExpected($url, $xpath) {
		$this->dispatch($url, true);
		$this->assertXPath($xpath);
	}
}