-
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());
}
}
?>