Skip to content
Snippets Groups Projects
  • Laurent's avatar
    fix notifications #13038 · 847459f6
    Laurent authored
    Now multiple notifications are concateneted in one string.
    Add notifications test
    847459f6
AdminAvisModerationControllerTest.php 12.81 KiB
<?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 'AdminAbstractControllerTestCase.php';


abstract class AdminAvisModerationControllerTestCase extends AbstractControllerTestCase {
	protected function _initProfilHook($profil) {
		$profil->setLibelle('AFI');
	}

	protected function _loginHook($account) {
		$account->ROLE = "admin_portail";
		$account->LOGIN = "sysadmin";
		$account->PSEUDO = "admin";
	}

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

		$this->erik = $this->fixture('Class_Users', ['id' => 3,
																								 'role_level' => 2,
																								 'login' => 'ek',
																								 'password' => 'test',
																								 'pseudo' => 'Erik',
																								 'id_site' => 1,
																								 'idabon' => '000x000']);

		$this->marcus = $this->fixture('Class_Users', ['id' => 5,
																								 'role_level' => 2,
																								 'login' => 'mc',
																								 'password' => 'test',
																								 'pseudo' => 'Marcus',
																								 'id_site' => 1,
																								 'idabon' => '000x0E0']);


		$this->club_cinq = $this->fixture('Class_Notice', ['id' => 18,
																											 'titre_principal' => 'Club des cinq']);

		$this->guide_routard = $this->fixture('Class_Notice', 
																					['id' => 25,
																					 'titre_principal' => 'Guide du routard']);


		$this->avis_erik_club = $this->fixture('Class_AvisNotice', 
																					 ['id' => 38,
																						'user' => $this->erik,
																						'notice' => $this->club_cinq,
																						'entete' => 'pour les jeunes',
																						'clef_oeuvre' => 'GARCONNIERELA--WILDERB-',
																						'avis' => 'ça me rappelle mon enfance',
																						'date_avis' => '2005-03-27',
																						'abon_ou_bib' => 0,
																						'statut' => 1,
																						'note' => 4]);

		$this->avis_marcus_routard = $this->fixture('Class_AvisNotice', 
																								['id' => 42,
																								 'user' => $this->marcus,
																								 'notice' => $this->guide_routard,
																								 'entete' => 'pour les routards',
																								 'avis' => 'qui aiment bien manger',
																								 'date_avis' => '2010-07-21',
																								 'abon_ou_bib' => 0,
																								 'statut' => 1,
																								 'note' => 2]);

	}
}


class AdminAvisModerationControllerAvisToModerateTest extends AdminAvisModerationControllerTestCase {
	public function setUp() {
		parent::setUp();
		$this->dispatch('/admin/modo/avisnotice');
	}

	public function testClubCinqTitle() {
		$this->assertQueryContentContains('h2', 'Club des cinq');
	}

	public function testGuideRoutardTitle() {
		$this->assertQueryContentContains('h2', 'Guide du routard');
	}

	public function testClubCinqLinkValidate() {
		$this->assertXPath("//a[@href='/admin/modo/validateavisnotice/id/38']");
	}

	public function testRoutardLinkValidate() {
		$this->assertXPath("//a[@href='/admin/modo/validateavisnotice/id/42']");
	}

	public function testClubCinqLinkDel() {
		$this->assertXPath("//a[@href='/admin/modo/delavisnotice/id/38']");
	}

	public function testRoutardLinkDel() {
		$this->assertXPath("//a[@href='/admin/modo/delavisnotice/id/42']");
	}

	public function testClubCinqLinkEdit() {
		$this->assertXPath("//a[@href='/admin/modo/editavisnotice/id/42']");
	}
}


class AdminAvisModerationControllerAvisDelTest extends AdminAvisModerationControllerTestCase {
	public function setUp() {
		parent::setUp();
		$this->dispatch('/admin/modo/delavisnotice/id/38');
	}


	public function testAvisShouldBeDeleted() {
		$this->assertNull(Class_AvisNotice::find(38));
	}


	public function testRedirectToAvisPage() {
		$this->assertRedirectTo('/admin/modo/avisnotice');
	}
}


class AdminAvisModerationControllerUnknownAvisEditTest extends AdminAvisModerationControllerTestCase {
	public function setUp() {
		parent::setUp();
		$this->dispatch('/admin/modo/editavisnotice/id/999', true);
	}

	public function testRedirectToAvisPage() {
		$this->assertRedirectTo('/admin/modo/avisnotice');
	}
}



class AdminAvisModerationControllerAvisEditTest extends AdminAvisModerationControllerTestCase {
	public function setUp() {
		parent::setUp();
		$this->dispatch('/admin/modo/editavisnotice/id/38', true);
	}

	public function testTitleShouldBePresent() {
		$this->assertXPathContentContains('//h1', 'pour les jeunes');
	}

	public function testRecordURLInputIsPresent() {
		$this->assertXPath('//input[@name="url"]');
	}

	public function testRecordEnTeteInputIsPresent() {
		$this->assertXPath('//input[@name="entete"]');
	}

	public function testRecordAvisInputIsPresent() {
		$this->assertXPath('//textarea[@name="avis"]');
	}
}




class AdminAvisModerationControllerAvisEditPostTest extends AdminAvisModerationControllerTestCase {
	public function setUp() {
		parent::setUp();
		$this->fixture('Class_Notice', ['id' => 1190178,
																		'clef_oeuvre' => 'GARCONNIERELA--GREMILLONH-',
																		'clef_alpha' => 'GARCONNIERELA--GREMILLONH--FLAMMARION-2013-1',
																		'titre_principal' => 'La garçonnière'
										 ]);
		new ZendAfi_Controller_Action_Helper_FlashMessenger();
		$this->postDispatch('/admin/modo/editavisnotice/id/38', 
												['url' => 'http://localhost/recherche/viewnotice/expressionRecherche/la+garconniere/tri/%2A/facette/T1/clef/GARCONNIERELA--GREMILLONH--FLAMMARION-2013-1/id/1190178',
												 'avis' => 'after',
												 'entete' => 'I change it'], true);
	}


	public function testRecordKeyShouldBeUpdated() {
		$this->assertEquals('GARCONNIERELA--GREMILLONH-',
												Class_AvisNotice::find(38)->getClefOeuvre());
	}

	public function testRecordShouldBeUpdated() {
		$this->assertEquals('after',
											 Class_AvisNotice::find(38)->getAvis());
	}

	public function testRecordEnteteShouldBeUpdated() {
		$this->assertEquals('I change it',
											 Class_AvisNotice::find(38)->getEntete());
	}

	public function testRedirectToAvisPage() {
		$this->assertRedirectTo('/admin/modo/avisnotice');
	}


	/** @test */
	public function flashMessengerShouldContainsMessageContenuModifie() {
		$this->assertFlashMessengerContentContains('Contenu de l\'avis modifié');
	}

	/** @test */
	public function flashMessengerShouldContainsMessageEnteteModifie() {
		$this->assertFlashMessengerContentContains('Entête de l\'avis modifié');
	}

	/** @test */
	public function flashMessengerShouldContainsMessageAvisRattache() {
		$this->assertFlashMessengerContentContains('Avis rattaché à la notice "La garçonnière"');
	}
}




class AdminAvisModerationControllerAvisEditPostNonMatchingRecordTest extends AdminAvisModerationControllerTestCase {
	public function setUp() {
		parent::setUp();
		$this->fixture('Class_Notice', ['id' => 1190178,
																		'clef_oeuvre' => 'CINDYRELLA--GREMILLONH-',
																		'clef_alpha' => 'CINDIRELLA--GREMILLONH--FLAMMARION-2013-1']);

		$this->postDispatch('/admin/modo/editavisnotice/id/38', 
												['url' => 'http://localhost/recherche/viewnotice/expressionRecherche/la+garconniere/tri/%2A/facette/T1/clef/GARCONNIERELA--GREMILLONH--FLAMMARION-2013-1/id/1190178'], true);
	}


	public function testShouldHaveError() {
		$this->assertXPathContentContains('//ul[@class="errors"]/li', 'permalien');
	}
}



class AdminAvisModerationControllerAvisEditPostNotPermalinkTest extends AdminAvisModerationControllerTestCase {
	public function setUp() {
		parent::setUp();
		$this->postDispatch('/admin/modo/editavisnotice/id/38', 
												['url' => 'http://google.com'], true);
	}

	public function testShouldHaveError() {
		$this->assertXPathContentContains('//ul[@class="errors"]/li', 'permalien');
	}
}


class AdminAvisModerationControllerAvisEditPostNotUrlTest extends AdminAvisModerationControllerTestCase {
	public function setUp() {
		parent::setUp();
		$this->postDispatch('/admin/modo/editavisnotice/id/38', 
												['url' => 'this not an URL'], true);
	}

	public function testShouldHaveError() {
		$this->assertXPathContentContains('//ul[@class="errors"]/li', 'pas une URL valide');
	}
}


class AdminAvisModerationControllerAvisValidateTest extends AdminAvisModerationControllerTestCase {
	public function setUp() {
		parent::setUp();
		$this->dispatch('/admin/modo/validateavisnotice/id/38');
	}

	public function testRedirectToAvisPage() {
		$this->assertRedirectTo('/admin/modo/avisnotice');
	}

	public function testStatutIsOne() {
		$this->assertEquals(1, $this->avis_erik_club->getStatut());
	}

	public function testIsModerationOK() {
		$this->assertTrue($this->avis_erik_club->isModerationOK());
	}
}




class AdminAvisModerationControllerCmsWithNoAvisTest extends Admin_AbstractControllerTestCase {
	public function setUp() { 
		parent::setUp();

		Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Avis')
			->whenCalled('findAllBy')
			->answers([]);

		$this->dispatch('/admin/modo/aviscms');
	}

	/** @test */
	public function h4ShouldContainAucunAvisAModerer() {
		$this->assertXPathContentContains('//h4', "Il n'y a aucun avis à modérer");
	}
}




abstract class AdminAvisModerationControllerCmsWithAvisTestCase extends Admin_AbstractControllerTestCase {
	public function setUp() { 
		parent::setUp();

		$avis = Class_Avis::newInstanceWithId(12, ['date_avis' => '2012-12-03',
																							 'note' => 4,
																							 'entete' => 'Mon avis',
																							 'avis' => 'Cet article est inspirant',
																							 'abon_ou_bib' => 0])
			->setArticle(Class_Article::newInstanceWithId(9, ['titre' => 'Tintin à Annecy']))
			->setUser(Class_Users::newInstanceWithId(34, ['pseudo' => 'Pat',
																										'mail' => 'pat@afi.fr']));

		Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Avis')
			->whenCalled('findAllBy')
			->with(['statut' => 0,
							'order' => 'date_avis desc'])
			->answers([$avis]);
	}
}





class AdminAvisModerationControllerCmsWithAvisTest extends AdminAvisModerationControllerCmsWithAvisTestCase {
	public function setUp() { 
		parent::setUp();
		$this->dispatch('/admin/modo/aviscms', true);
	}


	/** @test */
	public function pageShouldContainsLinkToArticle() {
		$this->assertXPathContentContains('//a[contains(@href, "/admin/cms/viewcms/id/9")]', 
																			"Tintin à Annecy",
																			$this->_response->getBody());
	}


	/** @test */
	public function pageShouldContainsActionToValidateAvis() {
		$this->assertXPath('//a[contains(@href, "/admin/modo/validate-aviscms/id/12")]'); 
	}


	/** @test */
	public function pageShouldContainsActionToDeleteAvis() {
		$this->assertXPath('//a[contains(@href, "/admin/modo/delete-aviscms/id/12")]'); 
	}


	/** @test */
	public function pageShouldContainsActionToSendMail() {
		$this->assertXPath('//a[contains(@href, "mailto:pat")]'); 
	}


	/** @test */
	public function pageShouldContainsLinkToEditUser() {
		$this->assertXPath('//a[contains(@href, "/admin/users/edit/id/34")]'); 
	}
}




class AdminAvisModerationControllerCmsDeleteAvisTest extends AdminAvisModerationControllerCmsWithAvisTestCase {
	public function setUp() { 
		parent::setUp();
		Class_Avis::whenCalled('delete')->answers(true);
		$this->dispatch('/admin/modo/delete-aviscms/id/12', true);
	}

	/** @test */
	public function pageShouldRedirectToAvisCms() {
		$this->assertRedirectTo('/admin/modo/aviscms');
	}


	/** @test */
	public function avisShouldHaveBeenDeleted() {
		$this->assertTrue(Class_Avis::methodHasBeenCalled('delete'));
	}
}



class AdminAvisModerationControllerCmsValidateAvisTest extends AdminAvisModerationControllerCmsWithAvisTestCase {
	public function setUp() { 
		parent::setUp();
		Class_Avis::whenCalled('save')->answers(true);
		$this->dispatch('/admin/modo/validate-aviscms/id/12', true);
	}

	/** @test */
	public function pageShouldRedirectToAvisCms() {
		$this->assertRedirectTo('/admin/modo/aviscms');
	}


	/** @test */
	public function avisShouldHaveBeenSaved() {
		$this->assertTrue(Class_Avis::methodHasBeenCalled('save'));
	}


	/** @test */
	public function avisShouldBeValid() {
		$this->assertEquals(1, Class_Avis::find(12)->getStatut());
	}
}


?>