From 4d37c1d964207f55a940b695cbd7675ce6dbfce6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?ANDRE=20s=C3=A9bastien?= <sandre@afi-sa.fr>
Date: Mon, 4 Jul 2022 15:24:08 +0200
Subject: [PATCH] hotline : #159612 : add field mail and idabon for multimedia
 authenticate

---
 VERSIONS_HOTLINE/159612                       |   1 +
 .../opac/controllers/MultimediaController.php |   8 +-
 .../controllers/MultimediaControllerTest.php  | 238 +++++++++++++-----
 3 files changed, 178 insertions(+), 69 deletions(-)
 create mode 100644 VERSIONS_HOTLINE/159612

diff --git a/VERSIONS_HOTLINE/159612 b/VERSIONS_HOTLINE/159612
new file mode 100644
index 00000000000..8bdd02d6e99
--- /dev/null
+++ b/VERSIONS_HOTLINE/159612
@@ -0,0 +1 @@
+ - correctif #159612 : Multimédia : rajouter la gestion des champs abonné email et numéro de carte
\ No newline at end of file
diff --git a/application/modules/opac/controllers/MultimediaController.php b/application/modules/opac/controllers/MultimediaController.php
index 4237ad450ff..78f74604f8e 100644
--- a/application/modules/opac/controllers/MultimediaController.php
+++ b/application/modules/opac/controllers/MultimediaController.php
@@ -21,11 +21,12 @@
 
 class MultimediaController extends ZendAfi_Controller_Action {
   private function _initInfosUser($user, $response) {
-    foreach (['id', 'login', 'password', 'nom',
-                'prenom', 'date_debut', 'date_fin'] as $attribute)
+    foreach (['id', 'login', 'password', 'mail', 'nom',
+              'prenom', 'date_debut', 'date_fin'] as $attribute)
       $response->$attribute = $user->$attribute;
 
     $response->groupes = $user->getUserGroupsLabels();
+    $response->cardnumber = $user->getIdabon();
     $response->date_naissance = $user->getDateNaissanceIso8601();
 
     return $response;
@@ -51,7 +52,6 @@ class MultimediaController extends ZendAfi_Controller_Action {
 
     $response->auth = 1;
     $this->_response->setBody(json_encode($response));
-
   }
 
 
@@ -118,4 +118,4 @@ class MultimediaController extends ZendAfi_Controller_Action {
     $this->_response->setBody(json_encode($response));
   }
 
-}
\ No newline at end of file
+}
diff --git a/tests/application/modules/opac/controllers/MultimediaControllerTest.php b/tests/application/modules/opac/controllers/MultimediaControllerTest.php
index 7371ad0c893..6e5620b1b05 100644
--- a/tests/application/modules/opac/controllers/MultimediaControllerTest.php
+++ b/tests/application/modules/opac/controllers/MultimediaControllerTest.php
@@ -20,28 +20,29 @@
  */
 
 trait TMultimediaControllerAbonneFixtureHoldSuccessOnSept12 {
+
   protected function _launch() {
-    $this->fixture('Class_Bib',
+    $this->fixture(Class_Bib::class,
                    ['id' => 1,
-                    'ouvertures' => [$this->fixture('Class_Ouverture',
+                    'ouvertures' => [$this->fixture(Class_Ouverture::class,
                                                     ['id' => 1,
                                                      'Jour' => '2012-09-12',
                                                      'horaires' => ['08:00', '12:00', '12:00', '18:00'],
                                                      'used_for' => Class_Ouverture::USED_FOR_MULTIMEDIA])]]);
 
-    $this->fixture('Class_Multimedia_Device',
+    $this->fixture(Class_Multimedia_Device::class,
                    ['id' => 1,
                     'id_origine' => '1-1',
-                    'group' => $this->fixture('Class_Multimedia_DeviceGroup',
+                    'group' => $this->fixture(Class_Multimedia_DeviceGroup::class,
                                               ['id' => 1,
-                                               'location' => $this->fixture('Class_Multimedia_Location',
+                                               'location' => $this->fixture(Class_Multimedia_Location::class,
                                                                             ['id' => 1,
                                                                              'id_origine' => 1,
                                                                              'id_site' => 1])
                                               ])
                    ]);
 
-    $this->onLoaderOfModel('Class_Multimedia_DeviceHold')
+    $this->onLoaderOfModel(Class_Multimedia_DeviceHold::class)
          ->whenCalled('getHoldOnDeviceAtTime')
          ->answers(Class_Multimedia_DeviceHold::newInstanceWithId(333)
                    ->setIdUser($this->_user->getId())
@@ -56,6 +57,7 @@ trait TMultimediaControllerAbonneFixtureHoldSuccessOnSept12 {
 
 
 trait TMultimediaControllerAbonneFixtureWithUserLaurentInDevsAgiles {
+
   protected function _initUser() {
     $this->_user = MultimediaControllerUsersFixtures::getLaurent();
     $this->_group= 'Devs agiles';
@@ -63,10 +65,12 @@ trait TMultimediaControllerAbonneFixtureWithUserLaurentInDevsAgiles {
 }
 
 
-abstract class MultimediaControllerAbstractTestCase extends AbstractControllerTestCase {
-  protected
-    $_storm_default_to_volatile=true,
-    $_json;
+
+
+abstract class MultimediaControllerAbstractTestCase
+  extends AbstractControllerTestCase {
+
+  protected $_json;
 
   /**
    * @param $url string
@@ -74,13 +78,17 @@ abstract class MultimediaControllerAbstractTestCase extends AbstractControllerTe
    */
   protected function getJson($url) {
     $this->dispatch($url, true);
+
     return json_decode($this->_response->getBody());
   }
-
 }
 
 
-abstract class MultimediaControllerAuthenticateTestCase extends MultimediaControllerAbstractTestCase {
+
+
+abstract class MultimediaControllerAuthenticateTestCase
+  extends MultimediaControllerAbstractTestCase {
+
   protected $_auth;
 
   public function setUp() {
@@ -99,9 +107,11 @@ abstract class MultimediaControllerAuthenticateTestCase extends MultimediaContro
 
   public function tearDown() {
     ZendAfi_Auth::setInstance(null);
+
     parent::tearDown();
   }
 
+
   /**
    * @param $user Class_Users
    */
@@ -124,10 +134,10 @@ abstract class MultimediaControllerAuthenticateTestCase extends MultimediaContro
    * @param $group_label string
    */
   protected function _expectGroupForUser($user, $group_label) {
-    $this->fixture('Class_UserGroupMembership',
+    $this->fixture(Class_UserGroupMembership::class,
                    ['id' => 1,
                     'user'=> $user,
-                    'user_group'=> $this->fixture('Class_UserGroup',
+                    'user_group'=> $this->fixture(Class_UserGroup::class,
                                                   ['id' => 1,
                                                    'libelle' => $group_label,
                                                    'group_type' => Class_UserGroup::TYPE_MULTIMEDIA])
@@ -137,9 +147,14 @@ abstract class MultimediaControllerAuthenticateTestCase extends MultimediaContro
 }
 
 
-class MultimediaControllerAuthenticateValidationTest extends MultimediaControllerAuthenticateTestCase {
+
+
+class MultimediaControllerAuthenticateValidationTest
+  extends MultimediaControllerAuthenticateTestCase {
+
   public function setUp() {
     parent::setUp();
+
     $this->_expectUserToLoad(MultimediaControllerUsersFixtures::getLaurent());
   }
 
@@ -188,9 +203,14 @@ class MultimediaControllerAuthenticateValidationTest extends MultimediaControlle
 }
 
 
-class MultimeidaControllerAuthenticateMireilleTest extends MultimediaControllerAuthenticateTestCase {
+
+
+class MultimeidaControllerAuthenticateMireilleTest
+  extends MultimediaControllerAuthenticateTestCase {
+
   public function setUp() {
     parent::setUp();
+
     $user = MultimediaControllerUsersFixtures::getMireille();
     $this->_expectUserToLoad($user);
 
@@ -211,9 +231,14 @@ class MultimeidaControllerAuthenticateMireilleTest extends MultimediaControllerA
 }
 
 
-class MultimediaControllerAuthenticateInviteNonAfiMultimediaTest extends MultimediaControllerAuthenticateTestCase {
+
+
+class MultimediaControllerAuthenticateInviteNonAfiMultimediaTest
+  extends MultimediaControllerAuthenticateTestCase {
+
   public function setUp() {
     parent::setUp();
+
     $user = MultimediaControllerUsersFixtures::getInvite();
     $this->_expectUserToLoad($user, 'invite');
 
@@ -228,9 +253,14 @@ class MultimediaControllerAuthenticateInviteNonAfiMultimediaTest extends Multime
 }
 
 
-class MultimediaControllerAuthenticateInviteAfiMultimediaTest extends MultimediaControllerAuthenticateTestCase {
+
+
+class MultimediaControllerAuthenticateInviteAfiMultimediaTest
+  extends MultimediaControllerAuthenticateTestCase {
+
   public function setUp() {
     parent::setUp();
+
     $user = MultimediaControllerUsersFixtures::getInvite();
     $this->_expectUserToLoad($user, 'invite');
     $this->_expectGroupForUser($user, 'Abonne multimedia');
@@ -252,15 +282,62 @@ class MultimediaControllerAuthenticateInviteAfiMultimediaTest extends Multimedia
 }
 
 
-abstract class MultimediaControllerAuthenticateValidTestCase extends MultimediaControllerAuthenticateTestCase {
-  protected $_user;
-  protected $_group;
+
+
+/* hotline: https://forge.afi-sa.net/issues/159612 */
+class MultimediaControllerAuthenticateLaurentMultimediaTest
+  extends MultimediaControllerAuthenticateTestCase {
 
   public function setUp() {
-    Class_Multimedia_Location::setTimeSource(new TimeSourceForTest('2012-09-12 09:00:00'));
+    parent::setUp();
+
+    $user = MultimediaControllerUsersFixtures::getLaurent();
+    $this->_expectUserToLoad($user);
+    $this->_expectGroupForUser($user, 'Abonne multimedia');
+
+    $this->_json = $this->getJson('/multimedia/authenticate/login/laurent/password/afi');
+  }
+
+
+  /** @test */
+  public function shouldReturnAuthIs1() {
+    $this->assertEquals(1, $this->_json->auth);
+  }
+
+
+  /** @test */
+  public function shouldReturnLoginIsLaurent() {
+    $this->assertEquals('laurent', $this->_json->login);
+  }
+
 
+  /** @test */
+  public function shouldReturnMail_lolo_mail_fr() {
+    $this->assertEquals('lolo@mail.fr', $this->_json->mail);
+  }
+
+
+  /** @test */
+  public function shouldReturnCardNumber_bca2() {
+    $this->assertEquals('bca2', $this->_json->cardnumber);
+  }
+}
+
+
+
+
+abstract class MultimediaControllerAuthenticateValidTestCase
+  extends MultimediaControllerAuthenticateTestCase {
+
+  protected
+    $_user,
+    $_group;
+
+  public function setUp() {
     parent::setUp();
 
+    Class_Multimedia_Location::setTimeSource(new TimeSourceForTest('2012-09-12 09:00:00'));
+
     $this->_initUser();
     $this->_expectUserToLoad($this->_user);
     $this->_expectGroupForUser($this->_user, $this->_group);
@@ -270,61 +347,76 @@ abstract class MultimediaControllerAuthenticateValidTestCase extends MultimediaC
     $this->_launch();
   }
 
+
+  public function tearDown() {
+    Class_Multimedia_Location::setTimeSource(null);
+
+    parent::tearDown();
+  }
+
+
   protected function _initUser() {}
 }
 
 
-abstract class MultimediaControllerChangeDateCurrentTestCase extends MultimediaControllerAuthenticateValidTestCase {
+
+
+abstract class MultimediaControllerChangeDateCurrentTestCase
+  extends MultimediaControllerAuthenticateValidTestCase {
 
   protected function _launch() {
     Class_Multimedia_Location::setTimeSource(new TimeSourceForTest('2012-09-18 09:00:00'));
     $this->_json = $this->getJson('/multimedia/is-holdable-day/poste/1/site/1');
   }
-
-
-
-  public function tearDown() {
-    Class_Multimedia_Location::setTimeSource(null);
-    parent::tearDown();
-  }
 }
 
 
 
-class MultimediaControllerNotHoldableDay extends MultimediaControllerChangeDateCurrentTestCase {
-    use
+
+class MultimediaControllerNotHoldableDay
+  extends MultimediaControllerChangeDateCurrentTestCase {
+  use
     TMultimediaControllerAbonneFixtureHoldSuccessOnSept12,
     TMultimediaControllerAbonneFixtureWithUserLaurentInDevsAgiles;
 
-    /** @test */
-    public function shouldNotHaveHolding() {
-      $this->assertEquals(0, $this->_json->holding);
-    }
-
+  /** @test */
+  public function shouldNotHaveHolding() {
+    $this->assertEquals(0, $this->_json->holding);
+  }
 }
 
 
-abstract class MultimediaControllerCheckedHoldableDayTestCase extends MultimediaControllerAuthenticateValidTestCase {
+
+
+abstract class MultimediaControllerCheckedHoldableDayTestCase
+  extends MultimediaControllerAuthenticateValidTestCase {
+
   protected function _launch() {
     $this->_json = $this->getJson('/multimedia/is-holdable-day/poste/1/site/1');
   }
-
 }
 
 
-class MultimediaControllerHoldableDay extends MultimediaControllerCheckedHoldableDayTestCase {
+
+
+class MultimediaControllerHoldableDay
+  extends MultimediaControllerCheckedHoldableDayTestCase {
   use
     TMultimediaControllerAbonneFixtureHoldSuccessOnSept12,
     TMultimediaControllerAbonneFixtureWithUserLaurentInDevsAgiles;
 
-    /** @test */
-    public function shouldHaveHoldDay() {
-      $this->assertEquals(1, $this->_json->holding);
-    }
+  /** @test */
+  public function shouldHaveHoldDay() {
+    $this->assertEquals(1, $this->_json->holding);
+  }
 }
 
 
-abstract class MultimediaControllerHoldedTestCase extends  MultimediaControllerAuthenticateValidTestCase {
+
+
+abstract class MultimediaControllerHoldedTestCase
+  extends MultimediaControllerAuthenticateValidTestCase {
+
   protected function _launch() {
     $this->_json = $this->getJson(sprintf('/multimedia/hold-device/login/%s/password/%s/poste/1/site/1',
                                           $this->_user->getLogin(),
@@ -332,7 +424,11 @@ abstract class MultimediaControllerHoldedTestCase extends  MultimediaControllerA
   }
 }
 
-class MultimediaControllerAuthenticateLaurentTest extends MultimediaControllerHoldedTestCase {
+
+
+
+class MultimediaControllerAuthenticateLaurentTest
+  extends MultimediaControllerHoldedTestCase {
   use
     TMultimediaControllerAbonneFixtureHoldSuccessOnSept12,
     TMultimediaControllerAbonneFixtureWithUserLaurentInDevsAgiles;
@@ -342,7 +438,8 @@ class MultimediaControllerAuthenticateLaurentTest extends MultimediaControllerHo
     $this->assertFalse(property_exists($this->_json, 'error'));
   }
 
-    /** @test */
+
+  /** @test */
   public function idShoudBe8() {
     $this->assertEquals('8', $this->_json->id);
   }
@@ -403,22 +500,24 @@ class MultimediaControllerAuthenticateLaurentTest extends MultimediaControllerHo
 
 
 
-class MultimediaControllerAuthenticateLaurentDeviceNotHeldByUserTest extends MultimediaControllerHoldedTestCase {
+
+class MultimediaControllerAuthenticateLaurentDeviceNotHeldByUserTest
+  extends MultimediaControllerHoldedTestCase {
   use TMultimediaControllerAbonneFixtureWithUserLaurentInDevsAgiles;
 
   protected function _launch() {
-    $this->onLoaderOfModel('Class_Multimedia_Location')
+    $this->onLoaderOfModel(Class_Multimedia_Location::class)
       ->whenCalled('findByIdOrigine')
       ->answers($location = Class_Multimedia_Location::newInstanceWithId(1)
                 ->setAuthDelay(1)
                 ->setAutohold(1));
 
-    $this->onLoaderOfModel('Class_Multimedia_Device')
+    $this->onLoaderOfModel(Class_Multimedia_Device::class)
       ->whenCalled('findByIdOrigineAndLocation')
       ->answers(Class_Multimedia_Device::newInstanceWithId(1)
                 ->setGroup(Class_Multimedia_DeviceGroup::newInstanceWithId(34)->setLocation($location)));
 
-    $this->onLoaderOfModel('Class_Multimedia_DeviceHold')
+    $this->onLoaderOfModel(Class_Multimedia_DeviceHold::class)
       ->whenCalled('getHoldOnDeviceAtTime')
       ->answers(Class_Multimedia_DeviceHold::newInstanceWithId(333)
                 ->setIdUser(9878)
@@ -445,20 +544,21 @@ class MultimediaControllerAuthenticateLaurentDeviceNotHeldByUserTest extends Mul
   public function authShouldBeZero() {
     $this->assertEquals('0', $this->_json->auth);
   }
-
 }
 
 
 
 
-class MultimediaControllerAuthenticateLaurentDeviceNotFoundTest extends MultimediaControllerHoldedTestCase {
+class MultimediaControllerAuthenticateLaurentDeviceNotFoundTest
+  extends MultimediaControllerHoldedTestCase {
   use TMultimediaControllerAbonneFixtureWithUserLaurentInDevsAgiles;
+
   protected function _launch() {
-    $this->onLoaderOfModel('Class_Multimedia_Location')
+    $this->onLoaderOfModel(Class_Multimedia_Location::class)
       ->whenCalled('findByIdOrigine')
       ->answers(Class_Multimedia_Location::newInstanceWithId(1));
 
-    $this->onLoaderOfModel('Class_Multimedia_Device')
+    $this->onLoaderOfModel(Class_Multimedia_Device::class)
       ->whenCalled('findByIdOrigineAndLocation')
       ->answers(null);
 
@@ -479,7 +579,10 @@ class MultimediaControllerAuthenticateLaurentDeviceNotFoundTest extends Multimed
 }
 
 
-class MultimediaControllerAuthenticateArnaudTest extends MultimediaControllerHoldedTestCase {
+
+
+class MultimediaControllerAuthenticateArnaudTest
+  extends MultimediaControllerHoldedTestCase {
   use TMultimediaControllerAbonneFixtureHoldSuccessOnSept12;
 
   protected function _initUser() {
@@ -503,7 +606,8 @@ class MultimediaControllerAuthenticateArnaudTest extends MultimediaControllerHol
 
 
 
-class MultimediaControllerAuthenticateBaptisteTest extends MultimediaControllerHoldedTestCase {
+class MultimediaControllerAuthenticateBaptisteTest
+  extends MultimediaControllerHoldedTestCase {
   use TMultimediaControllerAbonneFixtureHoldSuccessOnSept12;
 
   protected function _initUser() {
@@ -532,27 +636,31 @@ class MultimediaControllerAuthenticateBaptisteTest extends MultimediaControllerH
 }
 
 
+
+
 class MultimediaControllerUsersFixtures {
   use Storm_Test_THelpers;
 
-  protected static $_defaults = ['role_level' => ZendAfi_Acl_AdminControllerRoles::ABONNE_SIGB,
-                                 'id_site' => 1];
+  protected static $_defaults =
+    ['role_level' => ZendAfi_Acl_AdminControllerRoles::ABONNE_SIGB,
+     'id_site' => 1];
 
   public static function getLaurent() {
-    return static::fixture('Class_Users',
+    return static::fixture(Class_Users::class,
                            array_merge(static::$_defaults,
                                        ['id' => 8,
                                         'login' => "laurent",
                                         'password' => "afi",
                                         'nom' => 'laffont',
                                         'prenom' => 'laurent',
+                                        'mail' => 'lolo@mail.fr',
                                         'idabon' => 'bca2',
                                         'naissance' => '1978-02-17']));
   }
 
 
   public static function getBaptiste() {
-    return static::fixture('Class_Users',
+    return static::fixture(Class_Users::class,
                            array_merge(static::$_defaults,
                                        ['id' => 9,
                                         'login' => "baptiste",
@@ -565,7 +673,7 @@ class MultimediaControllerUsersFixtures {
 
 
   public static function getMireille() {
-    return static::fixture('Class_Users',
+    return static::fixture(Class_Users::class,
                            array_merge(static::$_defaults,
                                        ['id' => 10,
                                         'login' => "mireille",
@@ -576,7 +684,7 @@ class MultimediaControllerUsersFixtures {
 
 
   public static function getInvite() {
-    return static::fixture('Class_Users',
+    return static::fixture(Class_Users::class,
                            array_merge(static::$_defaults,
                                        ['id' => 12,
                                         'login' => "invite",
@@ -586,11 +694,11 @@ class MultimediaControllerUsersFixtures {
 
 
   public static function getArnaud() {
-    return static::fixture('Class_Users',
+    return static::fixture(Class_Users::class,
                            array_merge(static::$_defaults,
                                        ['id' => 11,
                                         'login' => "arnaud",
                                         'password' => "lelache",
                                         'idabon' => 'al']));
   }
-}
\ No newline at end of file
+}
-- 
GitLab