Skip to content
Snippets Groups Projects
AuthControllerTest.php 67 KiB
Newer Older
Patrick Barroca's avatar
Patrick Barroca committed
    $this->postDispatch('/',
                        ['CAB' => '0007',
                         'PWD' => 'toto' ]);

  }
  /** @test */
  public function responseShouldContainsError() {
    $this->assertContains('error', $this->_response->getBody());
  }
efalcy's avatar
efalcy committed
class AuthControllerPostSuccessfulFromLecturaClientTest extends AuthControllerLecturaTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
Patrick Barroca's avatar
Patrick Barroca committed
    $this->fixture('Class_Users', ['id' => 5 ,
                                   'login' => '0007',
                                   'idabon' => '0007',
                                   'password' => 'toto']);
Patrick Barroca's avatar
Patrick Barroca committed
    $this->_auth->whenCalled('authenticateLoginPassword')
                ->with('0007', 'toto')
                ->answers(true);
    $this->postDispatch('/',
                        ['CAB' => '0007',
                         'PWD' => 'toto' ]);
Patrick Barroca's avatar
Patrick Barroca committed
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function controllerShouldBeAuth() {
    $this->assertEquals('auth',$this->_request->getControllerName());
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function actionShouldBeLogin() {
    $this->assertEquals('login',$this->_request->getActionName());
  }
Patrick Barroca's avatar
Patrick Barroca committed
  public function responseShouldContainsSuccess() {
    $this->assertContains('success', $this->_response->getBody());
  }
class AuthControllerPostSuccessfulFromMusicMeCASClientTest extends AuthControllerPostSimpleSuccessfulTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  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='ST-'.md5(Zend_Session::getId(). '2');
    $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 {
Patrick Barroca's avatar
Patrick Barroca committed
  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=ST-'.md5(Zend_Session::getId().'22'));
  }

  /** @test */
  public function userJohnShouldBeLogged() {
    $this->assertEquals('john', Class_Users::getIdentity()->getLogin());
  }
class AuthControllerPostSimpleFailureTest extends AuthControllerPostSimpleTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  public function setup() {
    parent::setup();
    $_SERVER['HTTP_REFERER'] = '/opac';
Patrick Barroca's avatar
Patrick Barroca committed
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function withAuthenticationFailureResponseShouldBeRedirect() {
    $this->postDispatch('/opac/auth/login',
                        ['username' => 'foo', 'password' => 'bar']);
    $this->assertRedirectTo('/opac');
  }

class AuthControllerLoginActionRenderTest extends AuthControllerNobodyLoggedTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
    $this->dispatch('/opac/auth/login',true);
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function authLoginShouldContainForm() {
    $this->assertXPath('//form//fieldset[contains(@id, "fieldset-login_form")]');
  }
Ghislain Loas's avatar
Ghislain Loas committed


Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function authLoginTableShouldContainCaption() {
    $this->assertXPath('//form//table/caption/details/summary');
  }
class AuthControllerLoginActionWithDefaultPreferencesRenderTest extends AuthControllerNobodyLoggedTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  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 AuthControllerLostPasswordUnknownPostTest extends AbstractControllerTestCase{
  public function setUp() {
    parent::setUp();

  }

  /** @test */
  public function withUnknowUserShouldDisplayError() {
    $this->postDispatch('/opac/auth/lostpass',['username' => 'unknown']);
    $this->assertXPathContentContains('//div', 'Identifiant inconnu',$this->_response->getBody());
  }


/** @test */
  public function withEmptyUserShouldDisplayError() {
    $this->postDispatch('/opac/auth/lostpass',['username' => '']);
    $this->assertXPathContentContains('//div', 'Veuillez saisir votre identifiant.',$this->_response->getBody());
  }

}

class AuthControllerLostPasswordNoMailPostTest extends AbstractControllerTestCase{

  public function setUp() {
    parent::setUp();
    $user = $this->fixture('Class_Users',
                             ['id' => 1,
                              'pseudo' => 'luddite',
                              'login' => 'luddite',
                              'password' => 'notech',
                              'nom' => 'Lu',
                              'prenom' => 'Dites']);

    $this->postDispatch('/opac/auth/lostpass' , ['username' => 'luddite']);
  }

/** @test */
  public function withoutEmailShouldReturnErrorMessage() {
    $this->assertXPathContentContains('//div', "Votre mail n'est pas renseigné dans votre compte lecteur. Merci de vous adresser à la bibliothèque pour récupérer votre mot de passe ou bien le remplacer par un nouveau.");


class AuthControllerLostPasswordTest extends AuthControllerNobodyLoggedTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
    $this->dispatch('/opac/auth/lostpass', true);
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function formActionShouldBeLostPass() {
    $this->assertXPath('//form[@name="form_lostpass"][contains(@action, "/auth/lostpass")]');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function formShouldContainsInputForUsername() {
    $this->assertXPath('//form/input[@type="text"][@name="username"]');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function pageShouldBeHTML5Valid() {
    $this->assertHTML5();
  }



class AuthControllerNobodyLoggedAndRegistrationAllowedRegisterTest extends AuthControllerNobodyLoggedTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
    Class_AdminVar::newInstanceWithId('INTERDIRE_ENREG_UTIL', ['valeur' => 0]);
    $this->dispatch('auth/register', true);
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function H1ShouldContainsDemandDInscription() {
    $this->assertXPathContentContains('//h1', 'Demande d\'inscription');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function ParagraphRegisterHelpShouldContainsMailDeConfirmation() {
    $this->assertXPathContentContains('//p', 'mail de confirmation');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function inputMailShouldBePresent() {
    $this->assertXPath('//input[@name="mail"][@type="email"]');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function inputConfirmMailShouldBePresent() {
    $this->assertXPath('//input[@name="mail2"][@type="email"]');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function inputLoginShouldBePresent() {
    $this->assertXPath('//input[@name="login"]');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function inputMdpShouldBePresent() {
    $this->assertXPath('//input[@name="mdp"]');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function inputMdp2ShouldBePresent() {
    $this->assertXPath('//input[@name="mdp2"]');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function inputCaptchaShouldBePresent() {
    $this->assertXPath('//input[@name="captcha[input]"]');
  }
Laurent's avatar
Laurent committed

Alex Arnaud's avatar
Alex Arnaud committed
class AuthControllerNobodyLoggedRegisterPostRightDatasTest extends AuthControllerNobodyLoggedTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
    Class_Users::beVolatile();
    Class_UsersNonValid::beVolatile();
    ZendAfi_Form_Element_Captcha::beValid();
Alex Arnaud's avatar
Alex Arnaud committed

Patrick Barroca's avatar
Patrick Barroca committed
    $this->mock_transport = new MockMailTransport();
    Zend_Mail::setDefaultTransport($this->mock_transport);
Alex Arnaud's avatar
Alex Arnaud committed

Patrick Barroca's avatar
Patrick Barroca committed
    Class_Profil::getCurrentProfil()
      ->setMailSite('chef@afi.fr')
      ->setModulePreference('auth',
                            'register',
                            'register_confirm',
                            'Coucou, merci pour ton inscription');
Alex Arnaud's avatar
Alex Arnaud committed

Patrick Barroca's avatar
Patrick Barroca committed
    Class_AdminVar::newInstanceWithId('REGISTER_OK', ['valeur' => '']);
Alex Arnaud's avatar
Alex Arnaud committed


Patrick Barroca's avatar
Patrick Barroca committed
    Class_AdminVar::newInstanceWithId('INTERDIRE_ENREG_UTIL', ['valeur' => 0]);
Alex Arnaud's avatar
Alex Arnaud committed

Patrick Barroca's avatar
Patrick Barroca committed
    $this->postDispatch('auth/register',
                        ['login' => 'mario',
                         'mail' => 'mario@afi-sa.fr',
                         'mail2' => 'mario@afi-sa.fr',
                         'mdp' => 'secret',
                         'mdp2' => 'secret',
                         'captcha[id]' => '1234',
                         'captcha[input]' => '1234']);
  }
Alex Arnaud's avatar
Alex Arnaud committed


Patrick Barroca's avatar
Patrick Barroca committed
  protected function getSentMail() {
    return $this->mock_transport->sent_mail;
  }
Alex Arnaud's avatar
Alex Arnaud committed


Patrick Barroca's avatar
Patrick Barroca committed
  protected function getSentMailRecipients() {
    return $this->getSentMail()->getRecipients();
  }
Alex Arnaud's avatar
Alex Arnaud committed


Patrick Barroca's avatar
Patrick Barroca committed
  protected function getSentMailFrom() {
    return $this->getSentMail()->getFrom();
  }
Alex Arnaud's avatar
Alex Arnaud committed


Patrick Barroca's avatar
Patrick Barroca committed
  protected function getSentMailContent() {
    return quoted_printable_decode($this->getSentMail()->getBodyText()->getContent());
  }
Alex Arnaud's avatar
Alex Arnaud committed


Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function recipientShouldBeMario() {
    $this->assertContains('mario@afi-sa.fr', $this->getSentMailRecipients());
  }
Alex Arnaud's avatar
Alex Arnaud committed

Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function recipientsShouldContainsChefAtAfiDotFr() {
    $this->assertContains('chef@afi.fr', $this->getSentMailRecipients());
  }
Alex Arnaud's avatar
Alex Arnaud committed

Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function contentShouldBeAsExpected() {
    $this->assertContains('Vous avez fait une demande d\'inscription', $this->getSentMailContent());
  }
Alex Arnaud's avatar
Alex Arnaud committed

Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function confirmationShouldBeAsExpected() {
    $this->assertXPathContentContains('//div',
                                      'Coucou, merci pour ton inscription');
  }
Alex Arnaud's avatar
Alex Arnaud committed


Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function withoutProfilMailSenderShouldBeAdmin() {
    $this->assertContains('chef@afi.fr', $this->getSentMailFrom());
  }
Alex Arnaud's avatar
Alex Arnaud committed


Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function newUsersNonValidShouldBeCreated() {
    $user = Class_UsersNonValid::findFirstBy(['login' => 'mario']);
    $this->assertEquals(['id' => 1,
                         'id_user' => 1,
                         'login' => 'mario',
                         'password' => 'secret',
                         'mail' => 'mario@afi-sa.fr',
                         'cle' => md5('mario@afi-sa.fr')],
                        $user->getRawAttributes());
  }
class AuthControllerNobodyLoggedRegisterPostWrongDataTest extends AuthControllerNobodyLoggedTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
    $this->fixture('Class_Users',
                   ['id' => 2,
                    'login' => 'alexa',
                    'password' => 'secret',
                    'mail' => 'alex.arnaud@biblibre.com']);
    $this->fixture('Class_UsersNonValid',
                   ['id' => 3,
                    'login' => 'laurent',
                    'password' => 'secret_aussi',
                    'mail' => 'lolo@biblibre.com']);

    Class_AdminVar::newInstanceWithId('INTERDIRE_ENREG_UTIL', ['valeur' => 0]);
  }

  public function fields() {
    return [
            ['login',],
            ['mail'],
            ['mail2'],
            ['mdp'],
            ['mdp2'],
    ];
  }


  /**
   * @dataProvider fields
   * @test
   */
  public function errorForEmptyFieldShouldBeVisible($field) {
    $this->postDispatch('auth/register',
                        ['login' => '',
                         'mail' => '',
                         'mail2' => '',
                         'mdp' => '',
                         'mdp2' => '',
                         'captcha[id]' => '93248',
                         'captcha[input]' => '']);

    $this->assertXPathContentContains('//ul[@class="errors"][preceding-sibling::input[@name="'.$field.'"]]//li',
                                      'Une valeur est requise');
  }
Laurent's avatar
Laurent committed


Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function withMailsNotWellFormedShouldDisplayErrorInvalidMail() {
    $this->postDispatch('auth/register',
                        ['mail' => 'blib',
                         'mail2' => 'blib']);
    $this->assertXPathContentContains('//ul[@class="errors"][preceding-sibling::input[@name="mail"]]//li',
                                      "'blib' n'est pas un email valide de la forme 'compte@hote.ext'");
Laurent's avatar
Laurent committed

Patrick Barroca's avatar
Patrick Barroca committed
  }
Laurent's avatar
Laurent committed

Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function withDifferentMailsShouldDisplayErrorMailAreNotTheSame() {
    $this->postDispatch('auth/register',
                        ['mail' => 'grand-schtroumpf@champi.gnon',
                         'mail2' => 'schtroumpfette@champi.gnon']);
    $this->assertXPathContentContains('//ul[@class="errors"][preceding-sibling::input[@name="mail2"]]//li',
                                      "Les champs 'E-mail' sont différents");
  }

Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function withDifferentPasswordsShouldDisplayErrorPasswordsAreNotTheSame() {
    $this->postDispatch('auth/register',
                        ['mdp' => 'secret',
                         'mdp2' => 'sicrette']);
    $this->assertXPathContentContains('//ul[@class="errors"][preceding-sibling::input[@name="mdp2"]]//li',
                                      "Les champs 'Mot de passe' sont différents");
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function existingMailsShouldDisplayErrorMailAlreadyExists() {
    $this->postDispatch('auth/register',
                        ['mail' => 'alex.arnaud@biblibre.com',
                         'mail2' => 'alex.arnaud@biblibre.com']);
    $this->assertXPathContentContains('//ul[@class="errors"][preceding-sibling::input[@name="mail"]]//li',
                                      "L'e-mail 'alex.arnaud@biblibre.com' existe déjà.");
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function existingMailInUsersNonValidShouldDisplayErrorMailAlreadyExists() {
    $this->postDispatch('auth/register',
                        ['mail' => 'lolo@biblibre.com',
                         'mail2' => 'lolo@biblibre.com']);
    $this->assertXPathContentContains('//ul[@class="errors"][preceding-sibling::input[@name="mail"]]//li',
                                      "L'e-mail 'lolo@biblibre.com' existe déjà.");
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function existingLoginShouldDisplayErrorLoginAlreadyExists() {
    $this->postDispatch('auth/register',
                        ['login' => 'alexa']);
    $this->assertXPathContentContains('//ul[@class="errors"][preceding-sibling::input[@name="login"]]//li',
                                      "L'identifiant 'alexa' existe déjà.");
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function existingLoginInUsersNonValidShouldDisplayErrorLoginAlreadyExists() {
    $this->postDispatch('auth/register',
                        ['login' => 'laurent']);
    $this->assertXPathContentContains('//ul[@class="errors"][preceding-sibling::input[@name="login"]]//li',
                                      "L'identifiant 'laurent' existe déjà.");
  }
}
Patrick Barroca's avatar
Patrick Barroca committed
class PortailWithOneLoginModuleTestAndLoggedUserCase extends AbstractControllerTestCase {
  public function setUp() {
    parent::setUp();

    Class_IntBib::beVolatile();

    $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(
                                         $this->fixture('Class_Users',
                                                        ['id' => 5,
                                                         'login' => 'Pioup',
                                                         'idabon' => 48,
                                                         'password' => 'one ok password',
                                                         '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")]');
  }


  /** @test */
  public function redirectProfilForLoginShouldNotBeProfil0(){
    $this->assertNotXPath('//a[contains(@href,"abonne/fiche/id_profil/0")]');
  }


  /** @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/")]');
  }
Ghislain Loas's avatar
Ghislain Loas committed
class AuthControllerAbonneSIGBNotValidLoggedTest extends PortailWithOneLoginModuleTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();

    ZendAfi_Auth::getInstance()->logUser(
                                         Class_Users::newInstanceWithId(5,
                                                                        ['login' => 'tomato',
                                                                         'idabon' => 48,
                                                                         'role_level' => ZendAfi_Acl_AdminControllerRoles::ABONNE_SIGB,
                                                                         'id_site' => 1,
                                                                         'date_fin' => '2014-01-01',
                                                                         'fiche_sigb' => []]));

    $this->dispatch('/opac/');
  }


  /** @test */
  public function shouldDisplayExpiredSubscription() {
    $this->assertXPathContentContains('//div[@class="boite login"]//p[@class="user_notifications"]', 'Abonnement expiré - Merci de contacter la médiathèque');
  }
Ghislain Loas's avatar
Ghislain Loas committed
}


class AuthControllerNobodyLoggedAndRegisterNewsletterWithNoNewsletterTest extends AuthControllerNobodyLoggedTestCase {

Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
Patrick Barroca's avatar
Patrick Barroca committed
    $this->dispatch('/opac/auth/newsletter-register', true);
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function shouldRedirectToIndex() {
    $this->assertRedirectTo('/');
  }
}



class AuthControllerNobodyLoggedAndRegisterNewsletterWithWrongNewsletterTest extends AuthControllerNobodyLoggedTestCase {

Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
    Class_Newsletter::beVolatile();
    $this->dispatch('/opac/auth/newsletter-register/id/1', true);
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function shouldRedirectToIndex() {
    $this->assertRedirectTo('/');
  }
}




class AuthControllerNewsletterRegisterKickSpamBotsTest extends AuthControllerNobodyLoggedTestCase {

Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
    $this->fixture('Class_Newsletter',
                   ['id' => 5,
                    'titre' => 'Daily News']);
Patrick Barroca's avatar
Patrick Barroca committed
    $this->postDispatch('/opac/auth/newsletter-register/id/5', [
                                                                'email' => 'imnotabot@factory.bot',
                                                                'emailCheck' => 'imnotabot@factory.bot']);
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function shouldRedirectToIndex() {
    $this->assertRedirectTo('/');
  }
}




class AuthControllerNobodyLoggedAndRegisterNewsletterTest extends AuthControllerNobodyLoggedTestCase {

Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
    $this->fixture('Class_Newsletter',
                   ['id' => 5,
                    'titre' => 'Daily News']);
Patrick Barroca's avatar
Patrick Barroca committed
    $this->dispatch('/opac/auth/newsletter-register/id/5', true);
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function titleShouldBeAsExpected() {
    $this->assertXPathContentContains('//div[@class="titre"]//h1', 'Inscription à la lettre d\'information: Daily News');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function registerFormShouldBePresent() {
    $this->assertXPath('//form[@id="newsletter_register"]');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function mailInputShouldBePresent() {
    $this->assertXPath('//form//input[@name="email"][@type="email"]');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function negativeCaptchaShouldBePresent() {
    $this->assertXPath('//form//input[@name="emailCheck"][@data-spambots="negative-captcha"]');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function submitButtonShouldBePresent() {
    $this->assertXPath('//form//input[@type="submit"][@value="Valider"]');
  }
}




class AuthControllerPostRegisterNewsletterDailyNewsTest extends AuthControllerNobodyLoggedTestCase {

Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
Patrick Barroca's avatar
Patrick Barroca committed
    $this->mock_transport = new MockMailTransport();
    Zend_Mail::setDefaultTransport($this->mock_transport);
Patrick Barroca's avatar
Patrick Barroca committed
    Class_Profil::getCurrentProfil()
      ->setMailSite('tom@afi.fr');
Patrick Barroca's avatar
Patrick Barroca committed
    Class_Users::beVolatile();
    Class_UsersNonValid::beVolatile();
Patrick Barroca's avatar
Patrick Barroca committed
    $this->fixture('Class_Newsletter', ['id' => 5, 'titre' => 'Daily News']);
Patrick Barroca's avatar
Patrick Barroca committed
    $this->postDispatch('/opac/auth/newsletter-register/id/5', ['email' => 'iwanttobespamed@abo.com',
                                                                'emailCheck' => '']);
  }
Patrick Barroca's avatar
Patrick Barroca committed
  protected function getSentMail() {
    return $this->mock_transport->sent_mail;
  }
Patrick Barroca's avatar
Patrick Barroca committed
  protected function getSentMailRecipients() {
    return $this->getSentMail()->getRecipients();
  }
Patrick Barroca's avatar
Patrick Barroca committed
  protected function getSentMailFrom() {
    return $this->getSentMail()->getFrom();
  }
Patrick Barroca's avatar
Patrick Barroca committed
  protected function getSentMailContent() {
    return quoted_printable_decode($this->getSentMail()->getBodyText()->getContent());
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function nonValidUserShouldBeCreatedWithExpectedEmail() {
    $this->assertEquals('iwanttobespamed@abo.com', Class_UsersNonValid::find(1)->getMail());
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function recipientShouldBeIwanttobespamed() {
    $this->assertContains('iwanttobespamed@abo.com', $this->getSentMailRecipients());
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function contentShouldBeAsExpected() {
    $this->assertContains('Vous avez fait une demande d\'inscription à la lettre d\'information: Daily News', $this->getSentMailContent());
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function validationUrlShouldBeAsExpected() {
    $this->assertContains('/auth/newsletter-active-user/c/d7660b4a8df1ccb01fd50ddc6e7d3426/id/5', $this->getSentMailContent(), $this->getSentMailContent());
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function senderShouldBeAsExpected() {
    $this->assertContains('tom@afi.fr', $this->getSentMailFrom());
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function confirmationShouldBeAsExpected() {
    $this->assertXPathContentContains('//p',"Une demande de confirmation d'inscription vous a été envoyée à l'adresse mail renseignée.");
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function mailShouldContainsAccountMessage() {
    $this->assertContains("Un compte vous a été créé automatiquement.", $this->getSentMailContent());
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function mailShouldContainsAccountLogin() {
    $this->assertContains('Votre identifiant: iwanttobespamed@abo.com', $this->getSentMailContent());
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function mailShouldContainsAccountPassword() {
    $this->assertContains('Votre mot de passe: ', $this->getSentMailContent());
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function unssubscribUrlShouldBeAsExpected() {
    $this->assertContains('/auth/newsletter-unsubscribe/id/5', $this->getSentMailContent());
  }
}




class AuthControllerPostRegisterNewsletterDailyNewsWithNonUniqueMailTest extends AuthControllerNobodyLoggedTestCase {

Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
Patrick Barroca's avatar
Patrick Barroca committed
    $this->fixture('Class_Users',
                   ['id' => 1,
                    'login' => 'Tom',
                    'password' => 'pwd',
                    'mail' => 'imalreadyused@mail.com']);
Patrick Barroca's avatar
Patrick Barroca committed
    Class_UsersNonValid::beVolatile();
Patrick Barroca's avatar
Patrick Barroca committed
    $this->fixture('Class_Newsletter',
                   ['id' => 5,
                    'titre' => 'Daily News']);
Patrick Barroca's avatar
Patrick Barroca committed
    $this->postDispatch('/opac/auth/newsletter-register/id/5', [
                                                                'email' => 'imalreadyused@mail.com',
                                                                'emailCheck' => '']);
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function shouldReturnNonUniqueMailMessage() {
    $this->assertXPathContentContains('//span[@class="error"]',
                                      "Un utilisateur a déjà renseigné cet email. Merci de vous identifier avec le compte qui utilise cet email.");
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function linkToLoginShouldBePresent() {
    $this->assertXPathContentContains('//a[contains(@href, "auth/ajax-login")]', 'J\'ai déjà un compte');
  }
class AuthControllerPostRegisterNewsletterDailyNewsWithBadMailTest extends AuthControllerNobodyLoggedTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
Patrick Barroca's avatar
Patrick Barroca committed
    Class_Users::beVolatile();
    Class_UsersNonValid::beVolatile();
    $this->fixture('Class_Newsletter', ['id' => 5, 'titre' => 'Daily News']);
Patrick Barroca's avatar
Patrick Barroca committed
    $this->postDispatch('/opac/auth/newsletter-register/id/5', ['email' => 'bad_mail!',
                                                                'emailCheck' => '']);
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function shouldDisplayValidationError() {
    $this->assertXPathContentContains('//ul[@class="errors"]/li', 'n\'est pas un email valide');
  }
class AuthControllerNewsletterActiveUserWithWrongParamsTest extends AuthControllerNoBodyLoggedTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function noParamsShouldRedirectToIndex() {
    $this->dispatch('opac/auth/newsletter-active-user', true);
    $this->assertRedirectTo('/');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function noKeySshouldRedirectToIndex() {
    $this->dispatch('opac/auth/newsletter-active-user/id/5', true);
    $this->assertRedirectTo('/');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function noNewsletterShouldRedirectToIndex() {
    $this->dispatch('opac/auth/newsletter-active-user/c/4897sd8fsdf', true);
    $this->assertRedirectTo('/');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function wrongNewsletterShouldRedirectedToIndex() {
    Class_Newsletter::beVolatile();
    $this->dispatch('opac/auth/newsletter-active-user/c/4897sd8fsdf/id/1', true);
    $this->assertRedirectTo('/');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function wrongKeyShouldDisplayExpectedMessage() {
    $this->fixture('Class_Newsletter',
                   ['id' => 1,
                    'titre' => 'News of the month']);

    $this->dispatch('opac/auth/newsletter-active-user/c/4897sd8fsdf/id/1', true);
    $this->assertXPathContentContains('//p', 'Inscription à la newsletter invalide.');
  }
}



class AuthControllerNewsletterActiveUserTest extends AuthControllerNoBodyLoggedTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
Patrick Barroca's avatar
Patrick Barroca committed
    Class_NewsletterSubscription::beVolatile();
Patrick Barroca's avatar
Patrick Barroca committed
    Class_Users::beVolatile();
Patrick Barroca's avatar
Patrick Barroca committed
    $this->fixture('Class_Newsletter',[
                                       'id' => 1,
                                       'titre' => 'News of the month']);
Patrick Barroca's avatar
Patrick Barroca committed
    $this->fixture('Class_UsersNonValid', [
                                           'id' => 1,
                                           'login' => 'future@i.am',
                                           'mail' => 'future@i.am',
                                           'password' => 'random',
                                           'cle' => '12345678']);
Patrick Barroca's avatar
Patrick Barroca committed
    $this->fixture('Class_UsersNonValid', [
                                           'id' => 2,
                                           'login' => 'future@i.am',
                                           'mail' => 'future@i.am',
                                           'password' => 'random',
                                           'cle' => '12345678']);
Patrick Barroca's avatar
Patrick Barroca committed
    $this->dispatch('opac/auth/newsletter-active-user/c/12345678/id/1', true);
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function userFutureShouldExist() {
    $this->assertEquals('future@i.am', Class_Users::findFirstBy(['login' => 'future@i.am'])->getMail());
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function newsletterShouldHaveFutureAsSubscriber() {
    $this->assertEquals('future@i.am', Class_NewsletterSubscription::find(1)->getUser()->getMail());
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function successMessageShouldBeAsExpected() {
    $this->assertXPathContentContains('//p', "Vous avez bien été abonné à la newsletter: News of the month avec l'adresse suivante: future@i.am");
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function allNonValidUsersShouldBeDeleted() {
    $this->assertEmpty(Class_UsersNonValid::findAll());
  }



class AuthControllerTomLoggedRegisterNewsletterTestCase extends AbstractControllerTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
    Class_NewsletterSubscription::beVolatile();
    $this->fixture('Class_Newsletter',
                   ['id' => 5,
                    'titre' => 'Daily News']);

    ZendAfi_Auth::getInstance()
      ->logUser($this->fixture('Class_Users',
                               ['id' => 156,