From da7b2f360b38ba9d2c5200a1cbf01f3b84ae48f9 Mon Sep 17 00:00:00 2001
From: efalcy <efalcy@afi-sa.fr>
Date: Wed, 22 Jul 2015 16:24:02 +0200
Subject: [PATCH] hotline $27816 : lost password : add error messages if user
 has no mail

---
 .../opac/controllers/AuthController.php       | 11 +++--
 library/Class/Users.php                       |  2 +-
 .../opac/controllers/AuthControllerTest.php   | 42 +++++++++++++++++++
 3 files changed, 51 insertions(+), 4 deletions(-)

diff --git a/application/modules/opac/controllers/AuthController.php b/application/modules/opac/controllers/AuthController.php
index 1dd0bff075d..bd8e06845f7 100644
--- a/application/modules/opac/controllers/AuthController.php
+++ b/application/modules/opac/controllers/AuthController.php
@@ -20,6 +20,10 @@
  */
 
 class AuthController extends ZendAfi_Controller_Action {
+  protected $messages = [1 => 'Veuillez saisir votre identifiant.',
+                         2 => 'Identifiant inconnu.',
+                         4 => "Votre mail n'est pas renseigné dans votre compte lecteur. Merci de vous adresser à la bibliothèque pour connaître vos identifiants."];
+
   public function init()  {
     $this->view->locale = Zend_Registry::get('locale');
   }
@@ -158,7 +162,7 @@ class AuthController extends ZendAfi_Controller_Action {
       $user = ZendAfi_Filters_Post::filterStatic($this->_request->getPost('username'));
       $classe_user = new Class_Users();
       $ret = $classe_user->lostpass($user);
-      $this->view->message = $this->messages[$ret["error"]];
+      $this->view->message = $this->view->_($this->messages[$ret["error"]]);
       $this->view->message_mail = $ret["message_mail"];
     }
     $this->view->username=$user;
@@ -179,8 +183,9 @@ class AuthController extends ZendAfi_Controller_Action {
       $user = ZendAfi_Filters_Post::filterStatic($this->_request->getPost('username'));
       $classe_user = new Class_Users();
       $ret=$classe_user->lostpass($user);
-      $this->view->message=$this->messages[$ret["error"]];
-      $this->view->message_mail=$ret["message_mail"];
+
+      $this->view->message=$this->view->_($this->messages[$ret["error"]]);
+      $this->view->message_mail=isset($ret["message_mail"])?$ret["message_mail"] : '';
       $this->view->username=$user;
     }
   }
diff --git a/library/Class/Users.php b/library/Class/Users.php
index f5d80659fdf..f5dca6e7d9f 100644
--- a/library/Class/Users.php
+++ b/library/Class/Users.php
@@ -973,7 +973,7 @@ class Class_Users extends Storm_Model_Abstract {
 
   function lostpass($login) {
     if(!trim($login))
-      return array('error' => 1);
+      return ['error' => 1];
 
     if (!$user = Class_Users::getLoader()->findFirstBy(['login' => $login]))
       $user = Class_UsersNonValid::getLoader()->findFirstBy(['login' => $login]);
diff --git a/tests/application/modules/opac/controllers/AuthControllerTest.php b/tests/application/modules/opac/controllers/AuthControllerTest.php
index cb91e60df65..4d6b1be5512 100644
--- a/tests/application/modules/opac/controllers/AuthControllerTest.php
+++ b/tests/application/modules/opac/controllers/AuthControllerTest.php
@@ -1135,7 +1135,49 @@ class AuthControllerLoginActionWithDefaultPreferencesRenderTest extends AuthCont
   }
 }
 
+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 connaître vos identifiants.");
+  }
+
+}
 
 
 class AuthControllerLostPasswordTest extends AuthControllerNobodyLoggedTestCase {
-- 
GitLab