<?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'; abstract class PortailWithOneLoginModuleTestCase extends AbstractControllerTestCase { public function setUp() { parent::setUp(); Storm_Test_ObjectWrapper::onLoaderOfModel('Class_IntBib') ->whenCalled('findAllBy') ->answers([]); $cfg_accueil = ['modules' => [4 => ['division' => '4', 'id_module' => 4, 'type_module' => 'LOGIN', 'preferences' => [ 'identifiant' => 'Numéro de carte', 'mot_de_passe'=> 'Année de naissance', 'identifiant_exemple' => 'jj-mm-aaaa', 'mot_de_passe_exemple' => '1983', 'titre_connecte' => 'Vous êtes connecté(e)', 'lien_connexion' => 'please, log me', 'lien_mot_de_passe_oublie' => 'me rappelle plus', 'profil_redirect' => 1]]], 'options' => []]; Class_Profil::getCurrentProfil() ->setBrowser('opac') ->setCfgAccueil(ZendAfi_Filters_Serialize::serialize($cfg_accueil)); } } class AuthControllerInviteLoggedTest extends PortailWithOneLoginModuleTestCase { protected function _loginHook($account) { $account->ROLE = "invite"; $account->ROLE_LEVEL = 1; } public function setUp() { parent::setUp(); $this->dispatch('/opac/',true); } /** @test */ public function noLinkPretsShouldBePresent() { $this->assertNotXPath('//div[@id="boite_login"]//a[contains(@href, "prets")]'); } /** @test */ public function linkSeDeconnecterShouldBePresent() { $this->assertXPath('//div[@id="boite_login"]//a[contains(@href, "auth/logout")]'); } /** @test */ public function actionIndexShouldRedirectToOpac() { $this->bootstrap(); $this->dispatch('/auth', true); $this->assertRedirectTo('/opac'); } } class AuthControllerAbonneSIGBLoggedTest extends PortailWithOneLoginModuleTestCase { public function setUp() { parent::setUp(); $this->emprunteur_patrick = Class_WebService_SIGB_Emprunteur::newInstance(5, 'patrick') ->empruntsAddAll(array(Class_WebService_SIGB_Emprunt::newInstanceWithEmptyExemplaire() ->setDateRetour('23/12/2056'), Class_WebService_SIGB_Emprunt::newInstanceWithEmptyExemplaire() ->setDateRetour('3/2/2056'), Class_WebService_SIGB_Emprunt::newInstanceWithEmptyExemplaire() ->setDateRetour('23/1/1999'))) ->reservationsAddAll(array(Class_WebService_SIGB_Reservation::newInstanceWithEmptyExemplaire())); ZendAfi_Auth::getInstance()->logUser( Class_Users::newInstanceWithId(5, ['login' => 'patrick', 'idabon' => 456, 'role_level' => ZendAfi_Acl_AdminControllerRoles::ABONNE_SIGB, 'id_site' => 1, 'fiche_sigb' => ['fiche' => $this->emprunteur_patrick]])); $this->dispatch('/opac/'); } /** @test */ public function redirectProfilShouldBeProfil1(){ $this->assertXPath('//a[contains(@href,"abonne/fiche/id_profil/1")]',$this->_response->getBody()); } /** @test */ public function linkPretsShouldBePresent() { $this->assertXPathContentContains('//div[@id="boite_login"]//a[contains(@href, "prets")]', '3'); } /** @test */ public function linkReservationsShouldBePresent() { $this->assertXPath('//div[@id="boite_login"]//a[contains(@href, "reservations")]'); } /** @test */ public function linkSeDeconnecterShouldBePresent() { $this->assertXPath('//div[@id="boite_login"]//a[contains(@href, "auth/logout")]'); } /** * @test * @group pagetitles */ public function pageAuthLoginBarreNavShouldBeConnexion() { $this->bootstrap(); $this->dispatch('/opac/auth/login',true); $this->assertXPathContentContains('//div[@class="barre_nav"]/span','Connexion',$this->_response->getBody()); } } class AuthControllerAbonneSIGBLoggedLogoutTest extends PortailWithOneLoginModuleTestCase { public function setUp() { parent::setUp(); $this->dispatch('/opac/auth/logout'); } /** @test */ public function answerShouldRedirectToRoot() { $this->assertRedirectTo('/'); } } class AuthControllerWithProfilPageAbonneSIGBLoggedLogoutTest extends PortailWithOneLoginModuleTestCase { public function setUp() { parent::setUp(); $this->profil_adulte = $this->fixture('Class_Profil', ['id' => 22]) ->setBrowser('opac') ->setLibelle('Profil Adulte') ->setHauteurBanniere(150) ->setCouleurTexteBandeau('#F2C') ->setCouleurLienBandeau('#234') ->setMenuHautOn(true) ->setCfgMenus([]) ->setCommentaire('Super bib') ->setRefTags('bib,Adulte') ->setParentProfil(Class_Profil::getCurrentProfil()); $this->profil_adulte->assertSave(); Class_Profil::setCurrentProfil($this->profil_adulte); $this->dispatch('/opac/auth/logout'); } /** @test **/ public function linkSeDeconnecterShouldRedirectToParentProfil() { $this->assertRedirectTo('/opac/index/index/id_profil/2'); } } abstract class AuthControllerNobodyLoggedTestCase extends PortailWithOneLoginModuleTestCase { protected function _loginHook($account) { $account->ROLE = ""; $account->ROLE_LEVEL = 0; $account->ID_USER = ""; $account->PSEUDO = ""; } } class AuthControllerNobodyLoggedActivateTest extends AuthControllerNobodyLoggedTestCase { const ERROR_MESSAGE = 'Un probleme est survenu lors de l\'activation'; const OK_MESSAGE = 'Ok, compte cree'; public function setUp() { parent::setUp(); Class_UsersNonValid::beVolatile(); Class_Users::beVolatile(); $this->fixture('Class_AdminVar', ['id' => 'USER_NON_VALIDATED', 'valeur' => self::ERROR_MESSAGE]); $this->fixture('Class_AdminVar', ['id' => 'USER_VALIDATED', 'valeur' => self::OK_MESSAGE]); } /** @test */ public function withoutKeyShouldRedirect() { $this->dispatch('/opac/auth/activeuser', true); $this->assertRedirect(); } /** @test */ public function withUnknownKeyShouldDisplayError() { $this->dispatch('/opac/auth/activeuser/c/666', true); $this->assertXPathContentContains('//div', self::ERROR_MESSAGE); } /** @test */ public function withKnownKeyShouldCreateUserAndDeleteNonValid() { $this->fixture('Class_UsersNonValid', ['id' => 12, 'cle' => '777', 'login' => 'harlock', 'mail' => 'harlock@afi-sa.fr', 'password' => 'cosmos']); $this->dispatch('/opac/auth/activeuser/c/777', true); $this->assertXPathContentContains('//div', self::OK_MESSAGE); // non valid deleted $this->assertEquals(0, Class_UsersNonValid::countBy([])); // user created $created = Class_Users::findFirstBy(['order' => 'id desc']); $this->assertEquals('harlock@afi-sa.fr', $created->getMail()); } } class AuthControllerNobodyLoggedAndRegistrationAllowedBoiteLoginTest extends AuthControllerNobodyLoggedTestCase { public function setUp() { parent::setUp(); Class_AdminVar::getLoader() ->newInstanceWithId('INTERDIRE_ENREG_UTIL') ->setValeur(0); $this->dispatch('/opac/',true); } /** @test */ public function submitButtonSeConnecterShouldBeDisplay(){ $this->assertXPath('//div[@id="boite_login"]//input[@type="submit"]',$this->_response->getBody()); } /** @test */ public function titreDelaBoiteShouldBeSeConnecter(){ $this->assertXPathContentContains('//h1','Se connecter'); } public function testLinkSeConnecter() { $this->assertXPath('//div[@id="boite_login"]//a[contains(@onclick,"submit")]'); $this->assertXPathContentContains('//div[@id="boite_login"]//a[contains(@onclick, "submit")]', 'please, log me'); } public function testLinkLostPassword() { $this->assertXPath('//div[@id="boite_login"]//a[contains(@href, "auth/lostpass")]'); $this->assertXPathContentContains('//div[@id="boite_login"]//tr/td[@colspan="2"]/a[contains(@href, "auth/lostpass")]', 'me rappelle plus'); } public function testLinkSenregistrer() { $this->assertXPath('//div[@id="boite_login"]//a[contains(@href, "auth/register")]'); $this->assertXPathContentContains('//div[@id="boite_login"]//a[contains(@href, "auth/register")]', "S'enregistrer"); } public function testCanAccessRegisterPage() { $this->bootstrap(); $this->dispatch('auth/register', true); $this->assertAction('register'); $this->assertController('auth'); $this->assertNotRedirect('/'); } /** @test */ public function inputIdentifiantShouldHavePlaceHolderJJ_MM_AAAA() { $this->assertXPath('//input[@name="username"][@placeholder="jj-mm-aaaa"]'); } /** @test */ public function inputPasswordShouldHavePlaceHolder1983() { $this->assertXPath('//input[@name="password"][@placeholder="1983"]'); } /** @test */ function headShouldContainsAbonnesJS() { $this->assertXPath('//head//script[contains(@src,"public/opac/js/abonne.js")]', $this->_response->getBody()); } /** @test */ function headShouldContainsAdminCommonJS() { $this->assertXPath('//head//script[contains(@src,"public/admin/js/common.js")]'); } /** @test */ function headShouldContainsJQuery() { $this->assertXPath('//head//script[contains(@src, "jquery")]'); } } class AuthControllerNobodyLoggedAndRegistrationAllowedAjaxLoginTest extends AuthControllerNobodyLoggedTestCase { protected $_json, $_xpath; public function setUp() { parent::setUp(); Class_AdminVar::getLoader() ->newInstanceWithId('INTERDIRE_ENREG_UTIL') ->setValeur(0); $this->dispatch('/opac/auth/popup-login/render/popup', true); $this->_xpath = new Storm_Test_XPath(); $this->_json = json_decode($this->_response->getBody()); } public function testLinkLostPassword() { $this->_xpath->assertXPath($this->_json->content, '//div//a[contains(@onclick, "getUsername")]'); } public function testLinkSenregistrer() { $this->_xpath->assertXPath($this->_json->content, '//div//a[contains(@href, "auth/register")]'); $this->_xpath->assertXPathContentContains( $this->_json->content, '//div//a[contains(@href, "auth/register")]', "S'enregistrer"); } /** @test */ public function noLinkShouldHaveRenderPopup() { $this->_xpath->assertNotXPath($this->_json->content, '//div//a[contains(@href, "render/popup")]'); } } class AuthControllerNobodyLoggedAndNoRegistrationTest extends AuthControllerNobodyLoggedTestCase { public function setUp() { parent::setUp(); $interdire_enregistrement = new Class_AdminVar(); $interdire_enregistrement ->setId('INTERDIRE_ENREG_UTIL') ->setValeur(1); Class_AdminVar::getLoader()->cacheInstance($interdire_enregistrement); $this->dispatch('/opac/'); } public function testLinkSenregistrerNotHere() { $this->assertNotXPath('//div[@id="boite_login"]//a[contains(@href, "auth/register")]'); } public function testCannotAccessRegisterPage() { $this->dispatch('auth/register'); $this->assertRedirect('/'); } } class AuthControllerNobodyLoggedAndNoRegistrationAllowedAjaxLoginTest extends AuthControllerNobodyLoggedTestCase { protected $_json, $_xpath; public function setUp() { parent::setUp(); Class_AdminVar::getLoader() ->newInstanceWithId('INTERDIRE_ENREG_UTIL') ->setValeur(1); $this->dispatch('/opac/auth/popup-login', true); $this->_xpath = new Storm_Test_XPath(); $this->_json = json_decode($this->_response->getBody()); } public function testLinkLostPassword() { $this->_xpath->assertXPath($this->_json->content, '//div//a[contains(@onclick, "getUsername")]'); } public function testNoLinkSenregistrer() { $this->_xpath->assertNotXPath($this->_json->content, '//div//a[contains(@href, "auth/register")]'); } } class AuthControllerNobodyLoggedTest extends PortailWithOneLoginModuleTestCase { public function setUp() { parent::setUp(); ZendAfi_Auth::getInstance()->clearIdentity(); $this->dispatch('/opac'); } /** * @group integration * @test */ public function pageShouldBeHtml5Valid() { $this->assertHTML5($this->_response->getBody()); } /** @test */ public function pageShouldNotContainsRedirectInput() { $this->assertNotXPath('//input[@name="redirect"]'); } /** @test */ public function withRedirectParamPageShouldContainsRedirectInput() { $this->bootstrap(); $this->dispatch('/opac/auth/login/redirect/'.urlencode('/opac/paniers')); $this->assertXPath('//input[@name="redirect"][@value="/opac/paniers"]'); } /** @test */ public function pageShouldNotContainsAjoutPanierInput() { $this->assertNotXPath('//input[@name="ajoutPanier"]'); } } class AuthControllerNumilogConnectedUserDeconnexionTest extends PortailWithOneLoginModuleTestCase { public function setUp() { parent::setUp(); $this->dispatch('/opac/auth/login?service=http://numilog?deconnexion=ok', true); } /** * @test */ public function pageShouldBeRedirectedToHome() { $this->assertRedirectTo('/opac'); } } class AuthControllerNoLoggedTest extends AuthControllerNobodyLoggedTestCase { public function setUp() { parent::setUp(); } /** @test */ public function pageAuthLoginWithServiceShouldIncludeHiddenService() { $this->dispatch('/opac/auth/login?service=http://monurlservice',true); $this->assertXPath('//input[@type="hidden"][@value="http://monurlservice"]',$this->_response->getBody()); } } class AuthControllerAdminIsLoggedTest extends PortailWithOneLoginModuleTestCase { public function setUp() { parent::setUp(); $this->sysadm = $this->fixture('Class_Users', ['id' => 1, 'pseudo' => 'sysadm', 'role_level' => ZendAfi_Acl_AdminControllerRoles::ADMIN_PORTAIL, 'role' => 'super_admin', 'login' => 'sysadm', 'password' => 'sysadmPassword', 'id_site' => 1]); ZendAfi_Auth::getInstance()->logUser($this->sysadm); $this->dispatch('/opac/auth/login',true); } public function testBoiteLoginDisplaysBienvenueSysadm() { $this->assertQueryContentContains('#boite_login .welcome', 'Bienvenue sysadm',$this->_response->getBody()); } public function testLinkSeDeconnecter() { $this->assertXPath('//div[@id="boite_login"]//a[contains(@href, "auth/logout")]', $this->_response->getBody()); $this->assertXPathContentContains('//div[@id="boite_login"]//a[contains(@href, "auth/logout")]', 'Se déconnecter',$this->_response->getBody()); } public function testLinkFonctionAdmin() { $this->assertXPath("//div[@class='configuration_module']//img[contains(@onclick,'admin/modules/auth?config=site&type_module=auth&id_profil=2&action1=login')]"); } /** @test **/ public function lienMonCompteShouldContainsClassAccount() { $this->assertXPath('//div[@class="form"]/a[@class="account-link"]'); } } class AuthControllerPostTest extends AuthControllerNobodyLoggedTestCase { protected $_referer; public function setup() { parent::setup(); $this->_referer= BASE_URL.'/cms/viewarticle/12'; $_SERVER['HTTP_REFERER'] = $this->_referer; } public function loggingWithOutFillingUsername() { $this->postDispatch('/opac/auth/boite-login?id_module=4', array('username' => 'My overkill username', 'password' => ''),true); } public function loggingWithOutFillingPassword() { $this->postDispatch('/opac/auth/boite-login?id_module=4', array('username' => 'My overkill username', 'password' => ''),true); } public function loggingWithWrongInformation() { $this->postDispatch('/opac/auth/boite-login?id_module=4', ['username' => 'foo', 'password' => 'bar'],true); } public function loggingWithCorrectInformation() { $user = Class_Users::getLoader()->findFirstBy(array()); $this->postDispatch('/opac/auth/boite-login?id_module=4', array('username' => $user->getLogin(), 'password' => $user->getPassword())); } public function ajaxLoginWithWrongInformation() { $this->postDispatch('/opac/auth/ajax-login?id_module=4', ['username' => 'foo', 'password' => 'zoork', 'redirect' => '/auth/panier'],true); } public function loggedAsAdmin() { $admin = Class_Users::newInstanceWithId(34, ['login' => 'admin'])->beAdminPortail(); ZendAfi_Auth::getInstance()->logUser($admin); $this->dispatch('/opac/auth/boite-login?id_module=4',true); } public function ajaxLoggingWithCorrectInformation() { $user = Class_Users::getLoader()->findFirstBy(array()); $this->postDispatch('/opac/auth/ajax-login?id_module=4', array('username' => $user->getLogin(), 'password' => $user->getPassword())); } /** @test */ public function emptyUsernameShouldRedirectToReferer() { $this->loggingWithOutFillingUsername(); $this->assertRedirectTo($this->_referer); } /* @test */ public function emptyUsernamePostActionShouldDisplayFlashMessengerWithMessageEntrezVotreIdentifiant() { $this->loggingWithOutFillingUsername(); $this->assertFlashMessengerContentContains('Entrez votre identifiant'); } /** @test */ public function emptyPasswordPostActionShouldDisplayFlashMessengerWithMessageEntrezVotreMotDePasse() { $this->loggingWithOutFillingPassword(); $this->assertFlashMessengerContentContains('Entrez votre mot de passe'); } /** @test */ public function withAuthenticationFailureFlashMessengerShouldDisplayMessageIdentifiantOuMotDePasseIncorrect(){ $this->loggingWithWrongInformation(); $this->assertFlashMessengerContentContains('Identifiant ou mot de passe incorrect'); } /** @test */ public function validAuthenticationShouldRedirectToRefererrer() { $this->loggingWithCorrectInformation(); $this->assertRedirectTo($this->_referer); } /** @test */ public function validAjaxAuthenticationShouldRedirectToReferrer() { $this->ajaxLoggingWithCorrectInformation(); $this->assertRedirectTo($this->_referer); } /** @test */ public function invalidAjaxAuthenticationShouldRedirectToActionReferrerWithPopupInFlash() { $this->ajaxLoginWithWrongInformation(); $this->assertRedirectTo($this->_referer); $this->assertFlashMessengerEquals(['Identifiant ou mot de passe incorrect.', [ZendAfi_Controller_Action_Helper_FlashMessenger::POPUP => ['url' => '/auth/popup-login?redirect='.urlencode('/auth/panier')]]]); } /** @test */ public function validAuthenticationTitreBoiteShouldBeVousEtesConnecte () { $this->loggedAsAdmin(); $this->assertXPathContentContains('//div[@class="boite login"]//h1','Vous êtes connecté(e)',$this->_response->getBody()); } } abstract class AuthControllerPostSimpleTestCase extends AuthControllerNobodyLoggedTestCase { protected $_auth; public function setUp() { parent::setUp(); $this->_auth = Storm_Test_ObjectWrapper::mock() ->whenCalled('authenticateLoginPassword') ->answers(false) ->whenCalled('hasIdentity') ->answers(false) ->whenCalled('getIdentity') ->answers(null); ZendAfi_Auth::setInstance($this->_auth); } public function tearDown() { ZendAfi_Auth::setInstance(null); parent::tearDown(); } } abstract class AuthControllerPostSimpleSuccessfulTestCase extends AuthControllerPostSimpleTestCase { protected $_web_analytics_client; public function setUp() { parent::setUp(); $this->group_musicme = Class_UserGroup::newInstanceWithId('20', ['libelle' => 'Multimedia', 'rights_token' => Class_UserGroup::RIGHT_ACCES_MUSICME]); $marcel = Class_Users::newInstanceWithId(2, ['nom' => 'Marcel','login' =>'foo'])->beAbonneSIGB() ->setUserGroups([$this->group_musicme]); $this->_auth ->whenCalled('authenticateLoginPassword') ->with('foo', 'bar') ->willDo( function() use($marcel) { $this->_auth->whenCalled('getIdentity')->answers($marcel); return true; }); $this->_web_analytics_client = Storm_Test_ObjectWrapper::mock() ->whenCalled('trackEvent') ->answers(true); ZendAfi_Controller_Action_Helper_TrackEvent::setDefaultWebAnalyticsClient($this->_web_analytics_client); } } class AuthControllerPostSimpleSuccessfulTest extends AuthControllerPostSimpleSuccessfulTestCase { public function setUp() { parent::setUp(); $this->postDispatch('/opac/auth/login', ['username' => 'foo', 'password' => 'bar'],true); } /** @test */ public function responseShouldBeARedirectToOPAC() { $this->assertRedirectTo('/opac'); } /** @test */ public function trackEventShouldBeGenerated() { $this->assertTrue($this->_web_analytics_client->methodHasBeenCalledWithParams('trackEvent', ['authentification', 'connexion', 'utilisateur', 2])); } } class AuthControllerPostSimpleSuccessfulWithRedirectTest extends AuthControllerPostSimpleSuccessfulTestCase { public function setUp() { parent::setUp(); $this->postDispatch('/opac/auth/login', ['username' => 'foo', 'password' => 'bar', 'redirect' => '/opac/paniers']); } /** @test */ public function responseShouldRedirectToOpacPaniers() { $this->assertRedirectTo('/opac/paniers'); } } class AuthControllerPostSuccessfulFromCASClientTest extends AuthControllerPostSimpleSuccessfulTestCase { public function setUp() { parent::setUp(); $this->postDispatch('/opac/auth/login', ['username' => 'foo', 'password' => 'bar', 'service' => 'http://www.numilog.com/view?book=bilbo']); } /** @test */ public function responseShouldRedirectToCasClientWithTicket() { $this->assertRedirectTo('http://www.numilog.com/view?book=bilbo&ticket='.md5(Zend_Session::getId())); } /** @test */ public function userFooShouldBeLogged() { $this->assertEquals('foo', Class_Users::getIdentity()->getLogin()); } } class AuthControllerPostSuccessfulFromMusicMeCASClientTest extends AuthControllerPostSimpleSuccessfulTestCase { public function setUp() { parent::setUp(); RessourcesNumeriquesFixtures::activateMusicMe(); $this->postDispatch('/opac/auth/login', ['username' => 'foo', 'password' => 'bar', 'service' => 'http://musicme.com']); } /** @test */ public function responseShouldRedirectToMusicMeCasClientWithTicketAndBibId() { $ticket=md5(Zend_Session::getId()); $this->assertRedirectTo('http://musicmeurl/?iduser=foo&ticket='.$ticket.'&MediaLibraryID=888&service=http%3A%2F%2Fmusicmeurl%2F%3Fiduser%3Dfoo%26ticket%3D'.$ticket.'%26MediaLibraryID%3D888'); } /** @test */ public function userFooMusicMeShouldBeLogged() { $this->assertEquals('foo', Class_Users::getIdentity()->getLogin()); } } class AuthControllerFromCASClientUserConnectedTest extends AuthControllerNobodyLoggedTestCase { public function setUp() { parent::setUp(); ZendAfi_Auth::getInstance()->logUser(Class_Users::newInstanceWithId('22',['login'=> 'john'])); $this->dispatch('/auth/login?service=http://numilog.com/actionredirected'); } /** @test */ public function responseShouldRedirectToCasClientServiceWithTicket() { $this->assertRedirectTo('http://numilog.com/actionredirected?ticket='.md5(Zend_Session::getId())); } /** @test */ public function userJohnShouldBeLogged() { $this->assertEquals('john', Class_Users::getIdentity()->getLogin()); } } class AuthControllerPostSimpleFailureTest extends AuthControllerPostSimpleTestCase { public function setup() { parent::setup(); $_SERVER['HTTP_REFERER'] = '/opac'; } /** @test */ public function withAuthenticationFailureResponseShouldBeRedirect() { $this->postDispatch('/opac/auth/login', ['username' => 'foo', 'password' => 'bar']); $this->assertRedirectTo('/opac'); } } class AuthControllerLoginActionRenderTest extends AuthControllerNobodyLoggedTestCase { public function setUp() { parent::setUp(); $this->dispatch('/opac/auth/login',true); } /** @test */ public function authLoginShouldContainForm() { $this->assertXPath('//form//fieldset[contains(@id, "fieldset-login_form")]'); } } class AuthControllerLoginActionWithDefaultPreferencesRenderTest extends AuthControllerNobodyLoggedTestCase { public function setUp() { parent::setUp(); $cfg_accueil = array('modules' => array(4 => array('division' => '4', 'id_module' => 4, 'type_module' => 'LOGIN', 'preferences' => array()))); Class_Profil::getCurrentProfil() ->setBrowser('opac') ->setCfgAccueil(ZendAfi_Filters_Serialize::serialize($cfg_accueil)); $this->dispatch('/opac/auth/login',true); } /** @test */ public function labelUserNameShouldContainIdentifiant() { $this->assertXPathContentContains('//label','Identifiant'); } /** @test */ public function inputPlaceholderUsernameShouldContainVotreIdentifiant() { $this->assertXPath('//input[contains(@placeholder, "")]'); } /** @test */ public function labelPasswordShouldContainMotDePasse() { $this->assertXPathContentContains('//label','Mot de passe'); } /** @test */ public function inputPlaceholderPasswordShouldContainVotreMotDePasse() { $this->assertXPath('//input[contains(@placeholder, "")]'); } /** @test */ public function linkConnectionShouldHaveOnclickAttributeWithSubmit() { $this->assertXPath('//a[contains(@onclick, "submit")]'); } } class AuthControllerLostPasswordTest extends AuthControllerNobodyLoggedTestCase { public function setUp() { parent::setUp(); $this->dispatch('/opac/auth/lostpass', true); } /** @test */ public function formActionShouldBeLostPass() { $this->assertXPath('//form[@name="form_lostpass"][contains(@action, "/auth/lostpass")]'); } /** @test */ public function formShouldContainsInputForUsername() { $this->assertXPath('//form/input[@type="text"][@name="username"]'); } /** @test */ public function pageShouldBeHTML5Valid() { $this->assertHTML5(); } } class AuthControllerNobodyLoggedAndRegistrationAllowedRegisterTest extends AuthControllerNobodyLoggedTestCase { public function setUp() { parent::setUp(); Class_AdminVar::getLoader() ->newInstanceWithId('INTERDIRE_ENREG_UTIL') ->setValeur(0); $this->dispatch('auth/register', true); } /** @test */ public function inputMailShouldBePresent() { $this->assertXPath('//input[@name="mail"]'); } /** @test */ public function inputLoginShouldBePresent() { $this->assertXPath('//input[@name="login"]'); } /** @test */ public function inputMdpShouldBePresent() { $this->assertXPath('//input[@name="mdp"]'); } /** @test */ public function inputMdp2ShouldBePresent() { $this->assertXPath('//input[@name="mdp2"]'); } /** @test */ public function inputCaptchaShouldBePresent() { $this->assertXPath('//input[@name="captcha"]'); } } class portailWithOneLoginModuleTestAndLoggedUserCase extends AbstractControllerTestCase { public function setUp() { parent::setUp(); Storm_Test_ObjectWrapper::onLoaderOfModel('Class_IntBib') ->whenCalled('findAllBy') ->answers([]); $cfg_accueil = ['modules' => [4 => ['division' => '4', 'id_module' => 4, 'type_module' => 'LOGIN', 'preferences' => [ 'identifiant' => 'Numéro de carte', 'mot_de_passe'=> 'Année de naissance', 'identifiant_exemple' => 'jj-mm-aaaa', 'mot_de_passe_exemple' => '1983', 'titre_connecte' => 'Vous êtes connecté(e)', 'lien_connexion' => 'please, log me', 'lien_mot_de_passe_oublie' => 'me rappelle plus', 'profil_redirect' => 0]]], 'options' => []]; Class_Profil::getCurrentProfil() ->setBrowser('opac') ->setCfgAccueil(ZendAfi_Filters_Serialize::serialize($cfg_accueil)); ZendAfi_Auth::getInstance()->logUser( Class_Users::newInstanceWithId(5, ['login' => 'Pioup', 'idabon' => 48, 'role_level' => ZendAfi_Acl_AdminControllerRoles::ABONNE_SIGB, 'id_site' => 1, 'fiche_sigb' => []])); $this->dispatch('/opac/'); } /** @test */ public function redirectProfilForLoginShouldBeProfil2(){ $this->assertXPath('//a[contains(@href,"abonne/fiche/id_profil/2")]',$this->_response->getBody()); } /** @test */ public function redirectProfilForLoginShouldNotBeProfil0(){ $this->assertNotXPath('//a[contains(@href,"abonne/fiche/id_profil/0")]',$this->_response->getBody()); } /** @test */ public function redirectProfilForLogoutShouldBeProfilParent(){ $this->bootstrap(); $this->dispatch('opac/auth/logout'); $this->assertRedirectTo('/'); } /** @test */ public function redirectProfilForLogoutShouldNotBeProfil0(){ $this->assertNotXPath('//a[contains(@href,"auth/logout/id_profil/")]',$this->_response->getBody()); } } ?>