Commit f36d6ccb authored by Laurent's avatar Laurent

hotline #99121 fix "lost password" workflow when a user has registered and…

hotline #99121 fix "lost password" workflow when a user has registered and activated her account, but no admin has validated this account yet
parent c7bdcc5c
Pipeline #9756 passed with stage
in 42 minutes and 20 seconds
- ticket #99121 : Correction de la fonction "mot de passe oublié" lorsqu'une personne s'enregistre, active son compte mais n'a pas encore été validé par un administrateur
\ No newline at end of file
......@@ -138,6 +138,11 @@ class Class_UsersNonValid extends Storm_Model_Abstract {
}
public function isNotActivated() {
return !$this->hasUser();
}
protected function _escalateRole() {
if (($bib = $this->getBib())
&& $bib->shouldEscalateRegistrationRole()){
......
......@@ -33,9 +33,9 @@ class ZendAfi_Validate_LostUsername extends Zend_Validate_Abstract {
$this->_messageTemplates =
[static::NO_USER => $this->_('Identifiant inconnu.'),
static::NO_MAIL => $this->_("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."),
static::NO_MAIL => $this->_('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.'),
static::NO_ACTIVE_USER => $this->_("Votre compte n\'a pas encore été activé. Veuillez utiliser le lien d\'activation reçu précédemment par mail ou vous adresser à la bibliothèque si vous ne l\'avez pas reçu.")];
static::NO_ACTIVE_USER => $this->_('Votre compte n\'a pas encore été activé. Veuillez utiliser le lien d\'activation reçu précédemment par mail ou vous adresser à la bibliothèque si vous ne l\'avez pas reçu.')];
}
......@@ -47,7 +47,8 @@ class ZendAfi_Validate_LostUsername extends Zend_Validate_Abstract {
public function isValid($value, array $fields_values = array()) {
$value = ZendAfi_Filters_Post::filterStatic($value);
if ($user = Class_UsersNonValid::findFirstBy(['login' => $value])) {
if (($user = Class_UsersNonValid::findFirstBy(['login' => $value]))
&& $user->isNotActivated()) {
$this->_error(static::NO_ACTIVE_USER);
return false;
}
......
......@@ -96,7 +96,7 @@ class AuthControllerLostPasswordActionTest extends AuthControllerLostPasswordTes
class AuthControllerLostPasswordValidPostTest extends AuthControllerLostPasswordTestCase {
protected $_mail_transport, $_mail;
protected $_mail;
public function setUp() {
parent::setUp();
......@@ -151,6 +151,49 @@ class AuthControllerLostPasswordValidPostTest extends AuthControllerLostPassword
class AuthControllerLostPasswordValidPostWithUserNotValidatedYetTest extends AuthControllerLostPasswordTestCase {
protected $_mail;
public function setUp() {
parent::setUp();
$this->fixture('Class_Users',
['id' => 78,
'login' => 'toutnouveau',
'password' => 'secret',
'idabon' => '93658',
'mail' => 'toutnouveau@here.fr']);
$this->fixture('Class_UsersNonValid',
['id' => 1,
'login' => 'toutnouveau',
'password' => 'secret',
'bib_user_id' => 78]);
$this->postDispatch('/opac/auth/lostpass', ['lost_username' => 'toutnouveau']);
$this->_mail = $this->_mail_transport->sent_mail;
}
/** @test */
public function mailShouldContainsVousAvezFaitUneDemande() {
$this->assertContains('Vous avez fait une demande',
$this->_mail->getBodyText(true));
}
/** @test */
public function pageShouldContainsUnLienVientDeVousEtreEnvoye() {
$this->assertXPathContentContains('//p',
'Un mail vient de vous être envoyé contenant un lien de réinitialisation du mot de passe');
}
}
class AuthControllerLostPasswordUnknownPostTest extends AuthControllerLostPasswordTestCase {
/** @test */
public function withUnknowUserShouldDisplayError() {
......@@ -168,6 +211,19 @@ class AuthControllerLostPasswordUnknownPostTest extends AuthControllerLostPasswo
'Une valeur est requise',
$this->_response->getBody());
}
/** @test */
public function withUserNonValidShouldDisplayErrorAccountNotActivated() {
$this->fixture('Class_UsersNonValid',
['id' => 1,
'login' => 'toutnouveau',
'password' => 'secret']);
$this->postDispatch('/opac/auth/lostpass', ['lost_username' => 'toutnouveau']);
$this->assertXPathContentContains('//ul[@class="errors"]//li',
'Votre compte n\'a pas encore été activé',
$this->_response->getBody());
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment