From 956efda5cbcd5a0df7506f5503619736e345fd9d Mon Sep 17 00:00:00 2001
From: Ghislain Loas <ghislo@sandbox.pergame.net>
Date: Wed, 5 Oct 2016 15:25:39 +0200
Subject: [PATCH] dev #47780 : refacto

---
 cosmogramme/cosmozend/tests/bootstrap.php     |  1 +
 library/Class/DigitalResource.php             |  3 +-
 library/Class/DigitalResource/Config.php      |  3 +
 library/digital_resources/Assimil/Config.php  | 19 +++--
 .../digital_resources/Assimil/ModuleMenu.php  | 11 +--
 library/digital_resources/Assimil/Service.php |  2 +-
 .../Assimil/tests/AssimilTest.php             | 77 +++++++++++++++----
 .../ProfilOptionsControllerTest.php           |  6 --
 .../fixtures/RessourcesNumeriquesFixtures.php | 11 ---
 9 files changed, 87 insertions(+), 46 deletions(-)

diff --git a/cosmogramme/cosmozend/tests/bootstrap.php b/cosmogramme/cosmozend/tests/bootstrap.php
index 42ef07542e9..8c1584a12e6 100644
--- a/cosmogramme/cosmozend/tests/bootstrap.php
+++ b/cosmogramme/cosmozend/tests/bootstrap.php
@@ -36,6 +36,7 @@ set_include_path( $cosmozendPath
 . PATH_SEPARATOR . $cosmozendPath . '/tests'
 . PATH_SEPARATOR . $cosmozendPath . '/application'
 . PATH_SEPARATOR . $cosmozendPath . '/library'
+. PATH_SEPARATOR . $cosmozendPath . '/../../library/digital_resources'
 . PATH_SEPARATOR . get_include_path());
 
 Zend_Session::start();
diff --git a/library/Class/DigitalResource.php b/library/Class/DigitalResource.php
index 117c4a302d6..00d77bad214 100644
--- a/library/Class/DigitalResource.php
+++ b/library/Class/DigitalResource.php
@@ -124,7 +124,8 @@ class Class_DigitalResource extends Class_Entity {
     $modules = [];
     $this->withPluginsDo(
                          function($name, $config) use (&$modules){
-                           $modules[$config->getName()] = $config->getModuleMenu();
+                           $moduleMenu = $config->getModuleMenu();
+                           $modules[$config->getName()] = new $moduleMenu;
                          });
 
     return $modules;
diff --git a/library/Class/DigitalResource/Config.php b/library/Class/DigitalResource/Config.php
index 7c7a6889fd2..ac5e01862c0 100644
--- a/library/Class/DigitalResource/Config.php
+++ b/library/Class/DigitalResource/Config.php
@@ -31,6 +31,9 @@ class Class_DigitalResource_Config extends Class_Entity {
       : (new Class_DigitalResource())->configFor(static::getBaseName());
   }
 
+  public function getName() {
+    return static::getBaseName();
+  }
 
   public function __construct($attribs) {
     $this->updateAttributes($attribs);
diff --git a/library/digital_resources/Assimil/Config.php b/library/digital_resources/Assimil/Config.php
index 2f5d2441eae..62d73a0f2c4 100644
--- a/library/digital_resources/Assimil/Config.php
+++ b/library/digital_resources/Assimil/Config.php
@@ -22,16 +22,19 @@
 class Assimil_Config extends Class_DigitalResource_Config {
   public function __construct($digital_resource) {
     $this
-      ->updateAttributes(['Name' => 'ASSIMIL'])
-      ->updateAttributes(['SsoAction' => 'assimil',
-                          'DocTypeLabel' => $this->_('ASSIMIL e-méthode'),
-                          'Batch' => new Assimil_Batch(),
-                          'AdminVars' => [$this->getName() => Class_AdminVar_Meta::newOnOff($this->_('Activer ou désactiver la ressource numérique Assimil'))->bePrivate()],
-                          'ModuleMenu' => new Assimil_ModuleMenu(),
-                          'PermissionLabel' => $this->_('Bibliothèque numérique: accéder à ASSIMIL'),
-                          'DigitalResource' => $digital_resource]);
+      ->updateAttributes($this->getConfig($digital_resource));
   }
 
+  public function getConfig($digital_resource) {
+    return ['SsoAction' => 'assimil',
+            'DocTypeLabel' => $this->_('ASSIMIL e-méthode'),
+            'Batch' => new Assimil_Batch(),
+            'AdminVars' => [$this->getName() => Class_AdminVar_Meta::newOnOff($this->_('Activer ou désactiver la ressource numérique Assimil'))->bePrivate()],
+            'ModuleMenu' => 'Assimil_ModuleMenu',
+            'PermissionLabel' => $this->_('Bibliothèque numérique: accéder à ASSIMIL'),
+            'MenuLabel' => $this->_('Lien vers Assimil'),
+            'DigitalResource' => $digital_resource];
+  }
 
   public static function getBaseName() {
     return basename(__DIR__);
diff --git a/library/digital_resources/Assimil/ModuleMenu.php b/library/digital_resources/Assimil/ModuleMenu.php
index c9f91304df4..af11e942b13 100644
--- a/library/digital_resources/Assimil/ModuleMenu.php
+++ b/library/digital_resources/Assimil/ModuleMenu.php
@@ -22,12 +22,13 @@ class Assimil_ModuleMenu extends Class_Systeme_ModulesMenu_SSOAbstract {
 
   /** @var string */
   protected $_group = Class_Systeme_ModulesMenu::GROUP_MENU_ABONNES;
+  protected $_type_module;
 
-  /** @var string */
-  protected $_type_module = 'ASSIMIL';
-
-  /** @var string */
-  protected $_libelle = 'Lien vers ASSIMIL';
+ public function __construct() {
+   $config = Assimil_Config::getInstance();
+   $this->_type_module=$config->getName();
+   $this->_libelle = $config->getMenuLabel();
+ }
 
 
   public function urlForUser($user) {
diff --git a/library/digital_resources/Assimil/Service.php b/library/digital_resources/Assimil/Service.php
index e31e38496ff..8a9844c8eb2 100644
--- a/library/digital_resources/Assimil/Service.php
+++ b/library/digital_resources/Assimil/Service.php
@@ -22,7 +22,7 @@
 class Assimil_Service extends Class_WebService_BibNumerique_Abstract {
   use Trait_Timesource;
 
-  const CATEGORY_LABEL = 'ASSIMIL';
+  const CATEGORY_LABEL = 'Assimil';
 
   const XML_URL = 'http://fr.assimil.com/extraits/catalogueXML/catalogue_XML_Assimil.xml';
 
diff --git a/library/digital_resources/Assimil/tests/AssimilTest.php b/library/digital_resources/Assimil/tests/AssimilTest.php
index f3bb5ebc66d..7620d9e03f2 100644
--- a/library/digital_resources/Assimil/tests/AssimilTest.php
+++ b/library/digital_resources/Assimil/tests/AssimilTest.php
@@ -20,6 +20,17 @@
  */
 
 
+class ActivateAssimil {
+
+  public static function activate() {
+    Class_AdminVar::newInstanceWithId('Assimil_Assimil', ['valeur' => '1']);
+  }
+
+  public static function deactivate() {
+    Class_AdminVar::newInstanceWithId('Assimil_Assimil', ['valeur' => '']);
+  }
+}
+
 class AssimilConfigTest extends ModelTestCase {
 
   protected
@@ -32,6 +43,7 @@ class AssimilConfigTest extends ModelTestCase {
   }
 
 
+
   /** @test */
   public function docTypeShouldBeAssimil() {
     $this->assertEquals('Assimil', $this->_config->getDocType());
@@ -40,14 +52,14 @@ class AssimilConfigTest extends ModelTestCase {
 
   /** @test */
   public function withAdminVarOffShouldBeDisabled() {
-    $this->fixture('Class_AdminVar', ['id' => 'Assimil_ASSIMIL', 'valeur' => '']);
+    $this->fixture('Class_AdminVar', ['id' => 'Assimil_Assimil', 'valeur' => '']);
     $this->assertFalse($this->_config->isEnabled());
   }
 
 
   /** @test */
   public function withAdminVarOnShouldBeEnabled() {
-    $this->fixture('Class_AdminVar', ['id' => 'Assimil_ASSIMIL', 'valeur' => '1']);
+    $this->fixture('Class_AdminVar', ['id' => 'Assimil_Assimil', 'valeur' => '1']);
     $this->assertTrue($this->_config->isEnabled());
   }
 }
@@ -60,7 +72,7 @@ class AssimilActivatedAdminTest extends Admin_AbstractControllerTestCase {
 
   public function setUp() {
     parent::setUp();
-    RessourcesNumeriquesFixtures::activateAssimil();
+    ActivateAssimil::activate();
     $bib = $this->fixture('Class_Bib',
                           ['id' => 2,
                            'libelle' => 'Tombouctou']);
@@ -92,7 +104,7 @@ class AssimilActivatedAdminTest extends Admin_AbstractControllerTestCase {
   /** @test */
   public function userGroupPermissionsShouldContainsAssimil() {
     $this->dispatch('admin/usergroup/edit/id/1', true);
-    $this->assertXPath('//label[contains(text(), "accéder à ASSIMIL")]/input[@name="permissions_access[]"][@value="ASSIMIL"]');
+    $this->assertXPath('//label[contains(text(), "accéder à ASSIMIL")]/input[@name="permissions_access[]"][@value="Assimil"]');
   }
 
 
@@ -100,20 +112,20 @@ class AssimilActivatedAdminTest extends Admin_AbstractControllerTestCase {
   public function userGroupPermissionsShouldContainsAssimilChecked() {
     $this->fixture('Class_Permission',
                    ['id' => 1,
-                    'code' => 'ASSIMIL']);
+                    'code' => 'Assimil']);
     Class_UserGroup::find(1)->setPermissions([1]);
     $this->dispatch('admin/usergroup/edit/id/1', true);
-    $this->assertXPath('//label[contains(text(), "accéder à ASSIMIL")]/input[@name="permissions_access[]"][@value="ASSIMIL"][@checked]');
+    $this->assertXPath('//label[contains(text(), "accéder à ASSIMIL")]/input[@name="permissions_access[]"][@value="Assimil"][@checked]');
   }
 
 
   /** @test */
   public function userGroupPostShouldSaveUserGroup() {
     $this->postDispatch('admin/usergroup/edit/id/1',
-                        ['permissions_access[]' => 'ASSIMIL',
+                        ['permissions_access[]' => 'Assimil',
                          'libelle' => 'Group Assimil']);
     $this->assertNotEmpty(Class_UserGroup::find(1)->getPermissions());
-    $this->assertEquals('ASSIMIL', Class_UserGroup::find(1)->getPermissions()[0]->getCode());
+    $this->assertEquals('Assimil', Class_UserGroup::find(1)->getPermissions()[0]->getCode());
   }
 
 
@@ -121,13 +133,50 @@ class AssimilActivatedAdminTest extends Admin_AbstractControllerTestCase {
   /** @test */
   public function profilAvailableMenusShouldContainsAssimil() {
     $this->dispatch('admin/profil/menusmaj/id_profil/5/id_menu/H/mode/edit', true);
-    $this->assertXPathContentContains('//option[@value="ASSIMIL"]',
-                                      'Lien vers ',
+    $this->assertXPathContentContains('//option[@value="Assimil"]',
+                                      'Lien vers Assimil',
                                       $this->_response->getBody());
   }
 }
 
+class AssimilOpacIndexControllerWithMenuTest extends AbstractControllerTestCase {
+  public function setUp() {
+    parent::setUp();
+    ActivateAssimil::activate();
+    $cfg_menus = ['H' => ['libelle' => 'Menu horizontal',
+                          'picto' => 'vide.gif',
+                          'menus' => [['type_menu' => 'MENU',
+                                       'libelle' => 'Pratique',
+                                       'picto' => 'bookmark.png',
+                                       'preferences' => [],
+                                       'sous_menus' => [['type_menu' => 'ACCUEIL',
+                                                         'libelle' => 'Accueil',
+                                                         'picto' => 'vide.gif',
+                                                         'preferences' => [],
+                                                         'sous_menus' => ''],
 
+                                                        ['type_menu' => 'Assimil',
+                                                         'libelle' => 'Lien vers Assimil',
+                                                         'preferences' => [],
+                                                         'picto' => 'vide.gif'] ]]]]];
+
+    $profil_adulte = $this->fixture('Class_Profil', ['id' => 22, 'rewrite_url' => 'adulte'])
+                                ->setBrowser('opac')
+                                ->setLibelle('Profil Adulte')
+                                ->setCfgMenus($cfg_menus);
+
+    Class_Profil::setCurrentProfil($profil_adulte);
+
+    $this->dispatch('/');
+  }
+
+    /** @test */
+  public function linkToAssimilShouldBePresent() {
+    $this->assertXPathContentContains('//ul//li//a[contains(@href, "/modules/assimil")]',
+                                      'Lien vers Assimil',$this->_response->getBody());
+  }
+
+}
 
 abstract class AssimilServiceTestCase extends ModelTestCase {
   protected
@@ -137,7 +186,7 @@ abstract class AssimilServiceTestCase extends ModelTestCase {
   public function setUp() {
     parent::setUp();
 
-    RessourcesNumeriquesFixtures::activateAssimil();
+    ActivateAssimil::activate();
 
     $catalogue_xml = file_get_contents(__DIR__. '/assimil.xml');
 
@@ -165,7 +214,7 @@ class AssimilServiceHarvestTest extends AssimilServiceTestCase {
 
   /** @test */
   public function nameShouldAssimil() {
-    $this->assertEquals('ASSIMIL', $this->_service->getName());
+    $this->assertEquals('Assimil', $this->_service->getName());
   }
 
 
@@ -213,7 +262,7 @@ class AssimilServiceHarvestTest extends AssimilServiceTestCase {
 
   /** @test */
   public function albumEditeurShouldContainsAssimil() {
-    $this->assertEquals('ASSIMIL', $this->_e_course->getEditors()[0]);
+    $this->assertEquals('Assimil', $this->_e_course->getEditors()[0]);
   }
 
 
@@ -414,7 +463,7 @@ abstract class AssimilModulesControllerAssimilTestCase extends AbstractControlle
   public function setUp() {
     parent::setUp();
 
-    RessourcesNumeriquesFixtures::activateAssimil();
+    ActivateAssimil::activate();
 
     $right = Class_UserGroup::RIGHT_ACCESS_ASSIMIL;
 
diff --git a/tests/application/modules/opac/controllers/ProfilOptionsControllerTest.php b/tests/application/modules/opac/controllers/ProfilOptionsControllerTest.php
index 89fc7c63abe..4e59ddcf81b 100644
--- a/tests/application/modules/opac/controllers/ProfilOptionsControllerTest.php
+++ b/tests/application/modules/opac/controllers/ProfilOptionsControllerTest.php
@@ -51,7 +51,6 @@ abstract class ProfilOptionsControllerWithProfilAdulteTestCase extends AbstractC
 
 
   function setUpProfilAdulte() {
-    RessourcesNumeriquesFixtures::activateAssimil();
 
     $cfg_menus = ['H' => ['libelle' => 'Menu horizontal',
                           'picto' => 'vide.gif',
@@ -371,11 +370,6 @@ class ProfilOptionsControllerProfilAdulteWithCacheTest extends ProfilOptionsCont
   }
 
 
-  /** @test */
-  public function linkToAssimilShouldBePresent() {
-    $this->assertXPathContentContains('//ul//li//a[contains(@href, "/modules/assimil")]',
-                                      'Lien vers Assimil',$this->_response->getBody());
-  }
 }
 
 
diff --git a/tests/fixtures/RessourcesNumeriquesFixtures.php b/tests/fixtures/RessourcesNumeriquesFixtures.php
index bf105c46817..91ac48fac8c 100644
--- a/tests/fixtures/RessourcesNumeriquesFixtures.php
+++ b/tests/fixtures/RessourcesNumeriquesFixtures.php
@@ -40,7 +40,6 @@ class RessourcesNumeriquesFixtures {
     self::deactivateOrthodidacte();
     self::deactivateLeSocial();
     self::deactivateCiteDeLaMusique();
-    self::deactivateAssimil();
   }
 
 
@@ -65,7 +64,6 @@ class RessourcesNumeriquesFixtures {
     self::activateOrthodidacte();
     self::activateLeSocial();
     self::activateCiteDeLaMusique();
-    self::activateAssimil();
   }
 
 
@@ -324,13 +322,4 @@ class RessourcesNumeriquesFixtures {
     Class_AdminVar::newInstanceWithId('CITEDELAMUSIQUE_SETS', ['valeur' => '']);
   }
 
-
-  public static function activateAssimil() {
-    Class_AdminVar::newInstanceWithId('Assimil_ASSIMIL', ['valeur' => '1']);
-  }
-
-
-  public static function deactivateAssimil() {
-    Class_AdminVar::newInstanceWithId('Assimil_ASSIMIL', ['valeur' => '']);
-  }
 }
-- 
GitLab