diff --git a/VERSIONS_STABLE/hotline_#20093_save_2Cols_widget_delete_insite_widget_settings b/VERSIONS_STABLE/hotline_#20093_save_2Cols_widget_delete_insite_widget_settings new file mode 100644 index 0000000000000000000000000000000000000000..b8b042c2306ac0631a429177565a04f3d271e246 --- /dev/null +++ b/VERSIONS_STABLE/hotline_#20093_save_2Cols_widget_delete_insite_widget_settings @@ -0,0 +1 @@ + - ticket: #20093: la sauvegarde de la configuration d'une boîte deux colonnes ne réinitialise plus les paramètres des boîtes déjà sélectionnées. \ No newline at end of file diff --git a/application/modules/admin/controllers/AccueilController.php b/application/modules/admin/controllers/AccueilController.php index 4d4435354e6c95d6cf26dcf76cf479f39d636d67..de17d8ce4886e1f5502d4d8a8c9327ade917176c 100644 --- a/application/modules/admin/controllers/AccueilController.php +++ b/application/modules/admin/controllers/AccueilController.php @@ -360,7 +360,7 @@ class Admin_AccueilController extends Zend_Controller_Action { } $modules_accueil = Class_Systeme_ModulesAccueil::getModules(); - $modules = array(); + $modules = []; foreach ($modules_accueil as $key => $module) $modules[$key] = $module->getLibelle(); diff --git a/library/Class/Profil.php b/library/Class/Profil.php index 54189d465716c1e3048293dc259f66db7f85fce6..55bd1bc50c31c8a135517dc6d1bc73fdcbfb7b1e 100644 --- a/library/Class/Profil.php +++ b/library/Class/Profil.php @@ -564,7 +564,6 @@ class Class_Profil extends Storm_Model_Abstract { : ['type_module' => $type_module, 'preferences' => Class_Systeme_ModulesAccueil::getInstance()->getValeursParDefaut($type_module)]; - if ($this->isModulePreferencesSharedBetweenProfils($module, $type_module)) return $this->getModuleAccueilConfigByType($type_module, self::DIV_BANNIERE); @@ -594,7 +593,7 @@ class Class_Profil extends Storm_Model_Abstract { $default_prefs = array_merge($default_prefs, ['id_module' => $id_module]); $module['preferences'] = (!array_isset('preferences', $module)) ? - $default_prefs : array_merge($default_prefs, $module['preferences']); + $default_prefs : array_merge($default_prefs, array_filter($module['preferences'])); return $module; } @@ -1933,23 +1932,47 @@ class Class_Profil extends Storm_Model_Abstract { public function getModuleTitle($id_module) { - if(! $cfg_accueil = $this->getCfgAccueilAsArray()) + if(!array_key_exists('titre', ($pref_module = $this->getModulePref($id_module)))) return ''; - if(! array_key_exists($id_module, $cfg_accueil['modules'])) - return ''; + return $pref_module['titre']; + } - $module = $cfg_accueil['modules'][$id_module]; - if(! array_key_exists('preferences', $module)) - return ''; + public function getModulePref($id_module) { + if(! array_key_exists('preferences', ($module = $this->getLocalModuleAccueilConfig($id_module)))) + return []; - $pref_module = $module['preferences']; + return $module['preferences']; - if(!array_key_exists('titre', $pref_module)) - return ''; + } - return $pref_module['titre']; + + public function getModules() { + if(!$cfg_accueil = $this->getCfgAccueilAsArray()) + return []; + + if(! array_key_exists('modules', $cfg_accueil)) + return []; + + return $cfg_accueil['modules']; + } + + + public function getModuleIdFromCol($id, $type_module, $colonne) { + $modules = $this->getModules(); + if(!$two_cols_pref = $this->getModulePref($id)) + return ''; + + $keys = []; + foreach($modules as $key => $module) { + if( $module['type_module'] == $type_module + && $module['parent_id'] == $id + && $key >= 1000 + && $key == $two_cols_pref['col_' . $colonne . '_module_id']) + return $key; + } + return ''; } } ?> diff --git a/library/Class/Systeme/ModulesAccueil/ConteneurDeuxColonnes.php b/library/Class/Systeme/ModulesAccueil/ConteneurDeuxColonnes.php index 62faf5a2d0eab508df3af66b34817882e6e24774..107cb95a03745ced359177afe5ae38494eec2792 100644 --- a/library/Class/Systeme/ModulesAccueil/ConteneurDeuxColonnes.php +++ b/library/Class/Systeme/ModulesAccueil/ConteneurDeuxColonnes.php @@ -51,12 +51,9 @@ class Class_Systeme_ModulesAccueil_ConteneurDeuxColonnes extends Class_Systeme_M $type_module = $preferences[$type_key]; $profil = Class_Profil::getCurrentProfil(); - $id_module = $profil->createNewModuleAccueilId(1000); + $id_module = self::getOrCreateModuleForCol($profil, $parent_id, $type_module, $colonne); - $modules_accueil = new Class_Systeme_ModulesAccueil(); - $preferences = $modules_accueil->getValeursParDefaut($type_module); - - $config = ['preferences' => $preferences, + $config = ['preferences' => self::getOrCreateModulePref($profil, $id_module, $type_module), 'type_module' => $type_module, 'parent_id' => $parent_id]; @@ -72,5 +69,19 @@ class Class_Systeme_ModulesAccueil_ConteneurDeuxColonnes extends Class_Systeme_M return $id_module; } + + + public static function getOrCreateModuleForCol($profil, $id, $type_module, $colonne) { + if(!$id = $profil->getModuleIdFromCol($id, $type_module, $colonne)) + return $profil->createNewModuleAccueilId(1000); + return $id; + } + + + public static function getOrCreateModulePref($profil, $id_module, $type_module) { + if(!$pref = $profil->getModulePref($id_module)) + return (new Class_Systeme_ModulesAccueil())->getValeursParDefaut($type_module); + return $pref; + } } ?> \ No newline at end of file diff --git a/library/Class/Systeme/ModulesAccueil/DomainBrowser.php b/library/Class/Systeme/ModulesAccueil/DomainBrowser.php index d5048065b2f3c93429dc3a9c97de710e5fdbb1d4..c1d4e173d8a88d785b4ab9eaf25272bda697784e 100644 --- a/library/Class/Systeme/ModulesAccueil/DomainBrowser.php +++ b/library/Class/Systeme/ModulesAccueil/DomainBrowser.php @@ -16,12 +16,12 @@ * * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE * along with BOKEH; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ class Class_Systeme_ModulesAccueil_DomainBrowser extends Class_Systeme_ModulesAccueil_Null{ - + protected $_group = Class_Systeme_ModulesAccueil::GROUP_RECH; protected $_libelle = 'Domaines'; @@ -34,6 +34,7 @@ class Class_Systeme_ModulesAccueil_DomainBrowser extends Class_Systeme_ModulesAc protected $_popupHeight = 700; protected $_defaultValues = ['titre' => 'Domaines', + 'allow_breadcrumb' => 0, 'root_domain_id' => 0, 'display_mode' => Class_Systeme_ModulesAppli::LISTE_FORMAT_ACCORDEON]; diff --git a/library/ZendAfi/Form/Configuration/FormationsWidget.php b/library/ZendAfi/Form/Configuration/FormationsWidget.php index cf5950347b4f51719a36c7bbd261dccfa9cef7d5..d28c0d01e513534195a377f2eb718a577c164654 100644 --- a/library/ZendAfi/Form/Configuration/FormationsWidget.php +++ b/library/ZendAfi/Form/Configuration/FormationsWidget.php @@ -23,9 +23,12 @@ class ZendAfi_Form_Configuration_FormationsWidget extends ZendAfi_Form { public static function newWith($module_settings = [], $custom_form = null) { $form = new self(); + + $selected_formations = array_key_exists('selected_formations', $module_settings) ? $module_settings['selected_formations'] : ''; + $form ->populate($module_settings) - ->addToWith('formations_selector', $module_settings['selected_formations']) + ->addToWith('formations_selector', $selected_formations) ->addDisplayGroup(['titre', 'boite'], 'Base', diff --git a/tests/application/modules/admin/controllers/AccueilControllerConteneurDeuxColonnesTest.php b/tests/application/modules/admin/controllers/AccueilControllerConteneurDeuxColonnesTest.php new file mode 100644 index 0000000000000000000000000000000000000000..16cdc53ae4819a89aaefcce0149ebd9775bc2729 --- /dev/null +++ b/tests/application/modules/admin/controllers/AccueilControllerConteneurDeuxColonnesTest.php @@ -0,0 +1,316 @@ +<?php +/** + * Copyright (c) 2012-2014, Agence Française Informatique (AFI). All rights reserved. + * + * BOKEH is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation. + * + * There are special exceptions to the terms and conditions of the AGPL as it + * is applied to this software (see README file). + * + * BOKEH is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with BOKEH; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +abstract class AccueilControllerConteneurDeuxColonnesTestCase + extends Admin_AbstractControllerTestCase { + protected $_request_url = '/admin/accueil/conteneur2colonnes?id_profil=34&id_module=3&type_module=CONTENEUR_DEUX_COLONNES&config=accueil'; + + public function setUp() { + parent::setUp(); + + Class_AdminVar::newInstanceWithId('MENU_BOITE', ['valeur' => 1]); + + $this + ->fixture('Class_Profil', ['id' => 1, + 'libelle' => 'Main']) + ->addBoiteOfTypeInBanniere('NEWS') + ->save(); + + $this->profil_biologie = $this + ->fixture('Class_Profil', + ['id' => 34, + 'parent_id' => 1, + 'libelle' => 'Biologie']) + ->updateModuleConfigAccueil(3, + ['type_module' => 'CONTENEUR_DEUX_COLONNES', + 'division' => 2, + 'id_module' => 3, + 'preferences' => ['col_gauche_type' => 'NEWS', + 'col_droite_type' => 'CRITIQUES', + 'boite' => 'boite_de_la_division_du_milieu', + 'titre' => 'A la Une']]); + $this->profil_biologie->save(); + $this->profil_biologie->beCurrentProfil(); + } +} + + + +class AccueilControllerConteneurDeuxColonnesEmptyRenderTest extends AccueilControllerConteneurDeuxColonnesTestCase { + public function setUp() { + parent::setUp(); + $this->dispatch('/index/index/id_profil/34', true); + } + + /** @test */ + public function firsModuleShouldHaveId1000() { + $this->assertXPath('//div[@class="conteneur2colonnes"]//div[@id="boite_1000"]'); + } + + + /** @test */ + public function secondModuleShouldHaveId1001() { + $this->assertXPath('//div[@class="conteneur2colonnes"]//div[@id="boite_1001"]'); + } + + /** @test */ + public function secondModuleShouldBeCritics() { + $this->assertXPath('//div[@class="conteneur2colonnes"]//div[@class="boite critiques"]'); + } + + + /** @test */ + public function moduleNewsShouldHaveParentid3() { + $config = $this->profil_biologie->getModuleAccueilConfig(1000, 'NEWS'); + $this->assertEquals(3, $config['parent_id']); + } +} + + + + +class AccueilControllerConteneurDeuxColonnesUpdateNewsTest extends AccueilControllerConteneurDeuxColonnesTestCase { + public function setUp() { + parent::setUp(); + + $this + ->profil_biologie + ->updateModuleConfigAccueil(3, + ['type_module' => 'CONTENEUR_DEUX_COLONNES', + 'division' => 2, + 'id_module' => 3, + 'preferences' => ['col_gauche_type' => 'NEWS', + 'col_gauche_module_id' => 1000, + 'col_droite_type' => 'CRITIQUES', + 'boite' => 'boite_de_la_division_du_milieu', + 'titre' => 'A la Une']]) + ->updateModuleConfigAccueil(1000, + ['type_module' => 'NEWS', + 'id_module' => 1000, + 'parent_id' => 3, + 'preferences' => ['titre' => 'Les infos']]) + ->save(); + } + + + /** @test */ + public function renderedModuleNewsTitleShouldBeLesInfos() { + $this->dispatch('/index/index/id_profil/34', true); + $this->assertXPathContentContains('//div[@class="boite news"]//div', 'Les infos', + $this->_response->getBody()); + } + + /** @test */ + public function updatedModuleNewsTitleShouldBeDesNews() { + $this->postDispatch('/admin/accueil/news/config/accueil/id_profil/34/id_module/1000/type_module/NEWS', + ['id_items' => '34-12', + 'titre' => 'des news']); + $config = $this->profil_biologie->getModuleAccueilConfig(1000, 'NEWS'); + $this->assertEquals('des news', $config['preferences']['titre']); + } +} + + + + +class AccueilControllerConteneurDeuxColonnesDefaultTest extends AccueilControllerConteneurDeuxColonnesTestCase { + public function setUp() { + parent::setUp(); + $this->dispatch($this->_request_url, true); + } + + + /** @test */ + public function profilShouldBeValid() { + $this->assertTrue($this->profil_biologie->isValid()); + } + + + /** @test */ + public function shouldRenderConteneur2ColonnesView() { + $this->assertController('accueil'); + $this->assertAction('conteneur2colonnes'); + } + + + /** @test */ + public function inputTitleShouldDisplayALaUne() { + $this->assertXPath("//input[@name='titre'][@value='A la Une']"); + } + + + /** @test */ + public function selectColGaucheTypeShouldHaveNEWSSelected() { + $this->assertXPath("//select[@name='col_gauche_type']/option[@value='NEWS'][@selected='selected']"); + } + + + /** @test */ + public function selectColDroiteTypeShouldHaveCRITIQUESSelected() { + $this->assertXPath("//select[@name='col_droite_type']/option[@value='CRITIQUES'][@selected='selected']"); + } +} + + + +class AccueilControllerConteneurDeuxColonnesPostTest extends AccueilControllerConteneurDeuxColonnesTestCase { + public function setUp() { + parent::setUp(); + $this->postDispatch($this->_request_url, ['col_gauche_type' => 'KIOSQUE', + 'col_droite_type' => 'TAGS', + 'titre' => 'Ce mois ci']); + } + + + /** @test */ + public function moduleKiosqueShouldHaveBeenCreated() { + $this->assertEquals('KIOSQUE', $this->_getModuleTypeOf(1000, 'KIOSQUE')); + } + + + /** @test */ + public function moduleKiosqueParentIdShouldBe() { + $this->assertEquals(3, + $this->profil_biologie->getModuleAccueilConfig(1000, 'KIOSQUE')['parent_id']); + } + + + /** @test */ + public function moduleKiosqueShouldHaveBeenAddedToBox() { + $this->assertEquals(1000, + $this->_getModulePrefOf(3, 'col_gauche_module_id', 'CONTENEUR_DEUX_COLONNES')); + } + + + /** @test */ + public function moduleTagsShouldHaveBeenCreated() { + $this->assertEquals('TAGS', $this->_getModuleTypeOf(1001, 'TAGS')); + } + + + /** @test */ + public function moduleTagsShouldHaveBeenAddedToBox() { + $this->assertEquals(1001, + $this->_getModulePrefOf(3, 'col_droite_module_id', 'CONTENEUR_DEUX_COLONNES')); + } + + + /** @test */ + public function moduleTagShouldHaveParentId3() { + $config = $this->profil_biologie->getModuleAccueilConfig(1001, 'TAG'); + $this->assertEquals(3, $config['parent_id']); + } + + + protected function _getModuleTypeOf($id_module, $type) { + return $this->profil_biologie + ->getModuleAccueilConfig($id_module, $type)['type_module']; + } + + + protected function _getModulePrefOf($id_module, $pref, $type) { + return $this->profil_biologie + ->getModuleAccueilConfig($id_module, $type)['preferences'][$pref]; + } +} + + + +class AccueilControllerConteneurDeuxColonnesNewTest extends Admin_AbstractControllerTestCase { + public function setUp() { + parent::setUp(); + + $this->boite2cols = array('type_module' => 'CONTENEUR_DEUX_COLONNES', + 'division' => 2, + 'id_module' => 3); + + $this->profil_biologie = Class_Profil::getLoader() + ->newInstanceWithId(34) + ->setMenuHautOn(false) + ->setLibelle('Biologie') + ->updateModuleConfigAccueil(3, $this->boite2cols); + + Class_Profil::setCurrentProfil($this->profil_biologie); + $this->assertTrue($this->profil_biologie->isValid()); + } + + + /** @test */ + public function shouldRenderConteneur2ColonnesView() { + $this->request_url = '/admin/accueil/conteneur2colonnes?id_profil=34&id_module=3&type_module=CONTENEUR_DEUX_COLONNES&config=accueil'; + $this->dispatch($this->request_url); + + $this->assertController('accueil'); + $this->assertAction('conteneur2colonnes'); + } + + + /** @test */ + public function fonctionAdminOnClickShouldHaveActionConteneur2Colonnes() { + $this->dispatch('/opac?id_profil=34'); + $this->assertXPath("//img[contains(@onclick, 'conteneur2colonnes')]", $this->_response->getBody()); + } + + + /** @test */ + public function withModuleIdModulesShouldBeCreated() { + $this->boite2cols['preferences'] = ['col_gauche_module_id' => 234, + 'col_gauche_type' => 'COMPTEURS', + 'col_droite_module_id' => 235, + 'col_droite_type' => 'RECH_GUIDEE']; + + $this->profil_biologie->updateModuleConfigAccueil(3, $this->boite2cols); + $this->dispatch('/opac?id_profil=34'); + + $this->assertXPathContentContains('//div', 'Le catalogue contient'); + $this->assertXPathContentContains('//div', 'Recherche guidée', $this->_response->getBody()); + } +} + + + + +class AccueilControllerConteneurDeuxColonnesEditPostTest extends AccueilControllerConteneurDeuxColonnesTestCase { + public function setUp() { + parent::setUp(); + $this->postDispatch($this->_request_url, ['col_gauche_type' => 'NEWS', + 'col_droite_type' => 'CRITIQUES', + 'titre' => 'Ce mois ci']); + + $this->postDispatch($this->_request_url, ['col_gauche_type' => 'NEWS', + 'col_droite_type' => 'NEWS', + 'titre' => 'Ce mois ci']); + + } + + + /** @test */ + public function newsWidgetInLeftColShouldRemainTheSame() { + $this->assertEquals(1000, $this->profil_biologie->getCfgAccueilAsArray()['modules'][3]['preferences']['col_gauche_module_id']); + } + + + /** @test */ + public function newsWidgetInRightColShouldBeNew() { + $this->assertEquals(1002, $this->profil_biologie->getCfgAccueilAsArray()['modules'][3]['preferences']['col_droite_module_id']); + } + +} \ No newline at end of file diff --git a/tests/application/modules/admin/controllers/AccueilControllerFormationsTest.php b/tests/application/modules/admin/controllers/AccueilControllerFormationsTest.php index 5352c37be5542036ed1cf1503862ffb3c3ba3dd5..e95931f167eeafea35e53dca4f76117293eeb1ad 100644 --- a/tests/application/modules/admin/controllers/AccueilControllerFormationsTest.php +++ b/tests/application/modules/admin/controllers/AccueilControllerFormationsTest.php @@ -16,23 +16,18 @@ * * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE * along with BOKEH; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -class Admin_AccueilControllerFormationsTestWithDefaultSettings extends Admin_AbstractControllerTestCase { +class Admin_AccueilControllerFormationsTestWithDefaultSettings extends Admin_AbstractControllerTestCase { public function setUp() { parent::setUp(); - - $this->fixture('Class_Profil', + + $this->fixture('Class_Profil', ['id' => 1, - 'libelle' => 'Afibre']) - ->updateModuleConfigAccueil(1, ['type_module' => 'FORMATIONS_WIDGET', - 'division' => 1, - 'id_module' => 1, - 'preferences' => ['selected_formations' => '']]) - ->beCurrentProfil(); + 'libelle' => 'Afibre'])->beCurrentProfil(); $this->dispatch('admin/accueil/formations-widget?config=accueil&id_profil=1&id_module=1&type_module=FORMATIONS_WIDGET', true); } @@ -43,10 +38,10 @@ class Admin_AccueilControllerFormationsTestWithDefaultSettings extends Admin_Abs $this->assertXPathContentContains('//select/option', 'Boite par défaut de la division'); } - + /** @test */ public function treeselectFormationsBeDisplay() { - $this->assertXPath('//div[@class="treeselect"]', $this->_response->getBody()); + $this->assertXPath('//div[@class="treeselect"]'); } /** @test **/ @@ -58,12 +53,12 @@ class Admin_AccueilControllerFormationsTestWithDefaultSettings extends Admin_Abs -class Admin_AccueilControllerFormationsPostTest extends Admin_AbstractControllerTestCase { +class Admin_AccueilControllerFormationsPostTest extends Admin_AbstractControllerTestCase { public function setUp() { parent::setUp(); - - $this->fixture('Class_Profil', + + $this->fixture('Class_Profil', ['id' => 1, 'libelle' => 'Afibre']) ->updateModuleConfigAccueil(1, ['type_module' => 'FORMATIONS_WIDGET', @@ -71,15 +66,15 @@ class Admin_AccueilControllerFormationsPostTest extends Admin_AbstractController 'id_module' => 1]) ->beCurrentProfil(); - $this->postDispatch('admin/accueil/formations-widget?config=accueil&id_profil=1&id_module=1&type_module=FORMATIONS_WIDGET', + $this->postDispatch('admin/accueil/formations-widget?config=accueil&id_profil=1&id_module=1&type_module=FORMATIONS_WIDGET', ['selected_formations' => '1;2']); } - + /** @test */ public function formations1And2ShouldHaveBeenSaved() { $this->assertEquals( - '1;2', + '1;2', Class_Profil::getCurrentProfil() ->getModuleAccueilConfig(1, 'FORMATIONS_WIDGET')['preferences']['selected_formations']); } diff --git a/tests/application/modules/admin/controllers/AccueilControllerTest.php b/tests/application/modules/admin/controllers/AccueilControllerTest.php index 8e29a946fdc62f129eb9482809f05c9cdc3a1541..9619879583b39cc35acb62c15d4545f0569596b9 100644 --- a/tests/application/modules/admin/controllers/AccueilControllerTest.php +++ b/tests/application/modules/admin/controllers/AccueilControllerTest.php @@ -21,276 +21,6 @@ require_once 'AdminAbstractControllerTestCase.php'; -abstract class AccueilControllerBoite2ColTestCase - extends Admin_AbstractControllerTestCase { - protected $_request_url = '/admin/accueil/conteneur2colonnes?id_profil=34&id_module=3&type_module=CONTENEUR_DEUX_COLONNES&config=accueil'; - - public function setUp() { - parent::setUp(); - - Class_AdminVar::newInstanceWithId('MENU_BOITE', ['valeur' => 1]); - - $this - ->fixture('Class_Profil', ['id' => 1, - 'libelle' => 'Main']) - ->addBoiteOfTypeInBanniere('NEWS') - ->save(); - - $this->profil_biologie = $this - ->fixture('Class_Profil', - ['id' => 34, - 'parent_id' => 1, - 'libelle' => 'Biologie']) - ->updateModuleConfigAccueil(3, - ['type_module' => 'CONTENEUR_DEUX_COLONNES', - 'division' => 2, - 'id_module' => 3, - 'preferences' => ['col_gauche_type' => 'NEWS', - 'col_droite_type' => 'CRITIQUES', - 'boite' => 'boite_de_la_division_du_milieu', - 'titre' => 'A la Une']]); - $this->profil_biologie->save(); - $this->profil_biologie->beCurrentProfil(); - } -} - - - -class AccueilControllerEmptyBoite2ColRenderTest extends AccueilControllerBoite2ColTestCase { - public function setUp() { - parent::setUp(); - $this->dispatch('/index/index/id_profil/34', true); - } - - /** @test */ - public function firsModuleShouldHaveId1000() { - $this->assertXPath('//div[@class="conteneur2colonnes"]//div[@id="boite_1000"]'); - } - - - /** @test */ - public function secondModuleShouldHaveId1001() { - $this->assertXPath('//div[@class="conteneur2colonnes"]//div[@id="boite_1001"]'); - } - - /** @test */ - public function secondModuleShouldBeCritics() { - $this->assertXPath('//div[@class="conteneur2colonnes"]//div[@class="boite critiques"]'); - } - - - /** @test */ - public function moduleNewsShouldHaveParentid3() { - $config = $this->profil_biologie->getModuleAccueilConfig(1000, 'NEWS'); - $this->assertEquals(3, $config['parent_id']); - } -} - - - - -class AccueilControllerBoite2ColUpdateNewsTest extends AccueilControllerBoite2ColTestCase { - public function setUp() { - parent::setUp(); - - $this - ->profil_biologie - ->updateModuleConfigAccueil(3, - ['type_module' => 'CONTENEUR_DEUX_COLONNES', - 'division' => 2, - 'id_module' => 3, - 'preferences' => ['col_gauche_type' => 'NEWS', - 'col_gauche_module_id' => 1000, - 'col_droite_type' => 'CRITIQUES', - 'boite' => 'boite_de_la_division_du_milieu', - 'titre' => 'A la Une']]) - ->updateModuleConfigAccueil(1000, - ['type_module' => 'NEWS', - 'id_module' => 1000, - 'parent_id' => 3, - 'preferences' => ['titre' => 'Les infos']]) - ->save(); - } - - - /** @test */ - public function renderedModuleNewsTitleShouldBeLesInfos() { - $this->dispatch('/index/index/id_profil/34', true); - $this->assertXPathContentContains('//div[@class="boite news"]//div', 'Les infos', - $this->_response->getBody()); - } - - /** @test */ - public function updatedModuleNewsTitleShouldBeDesNews() { - $this->postDispatch('/admin/accueil/news/config/accueil/id_profil/34/id_module/1000/type_module/NEWS', - ['id_items' => '34-12', - 'titre' => 'des news']); - $config = $this->profil_biologie->getModuleAccueilConfig(1000, 'NEWS'); - $this->assertEquals('des news', $config['preferences']['titre']); - } -} - - - - -class AccueilControllerBoite2ColTest extends AccueilControllerBoite2ColTestCase { - public function setUp() { - parent::setUp(); - $this->dispatch($this->_request_url, true); - } - - - /** @test */ - public function profilShouldBeValid() { - $this->assertTrue($this->profil_biologie->isValid()); - } - - - /** @test */ - public function shouldRenderConteneur2ColonnesView() { - $this->assertController('accueil'); - $this->assertAction('conteneur2colonnes'); - } - - - /** @test */ - public function inputTitleShouldDisplayALaUne() { - $this->assertXPath("//input[@name='titre'][@value='A la Une']"); - } - - - /** @test */ - public function selectColGaucheTypeShouldHaveNEWSSelected() { - $this->assertXPath("//select[@name='col_gauche_type']/option[@value='NEWS'][@selected='selected']"); - } - - - /** @test */ - public function selectColDroiteTypeShouldHaveCRITIQUESSelected() { - $this->assertXPath("//select[@name='col_droite_type']/option[@value='CRITIQUES'][@selected='selected']"); - } -} - - - - -class AccueilControllerBoite2ColPostTest extends AccueilControllerBoite2ColTestCase { - public function setUp() { - parent::setUp(); - $this->postDispatch($this->_request_url, ['col_gauche_type' => 'KIOSQUE', - 'col_droite_type' => 'TAGS', - 'titre' => 'Ce mois ci']); - } - - - /** @test */ - public function moduleKiosqueShouldHaveBeenCreated() { - $this->assertEquals('KIOSQUE', $this->_getModuleTypeOf(1000, 'KIOSQUE')); - } - - - /** @test */ - public function moduleKiosqueParentIdShouldBe() { - $this->assertEquals(3, - $this->profil_biologie->getModuleAccueilConfig(1000, 'KIOSQUE')['parent_id']); - } - - - /** @test */ - public function moduleKiosqueShouldHaveBeenAddedToBox() { - $this->assertEquals(1000, - $this->_getModulePrefOf(3, 'col_gauche_module_id', 'CONTENEUR_DEUX_COLONNES')); - } - - - /** @test */ - public function moduleTagsShouldHaveBeenCreated() { - $this->assertEquals('TAGS', $this->_getModuleTypeOf(1001, 'TAGS')); - } - - - /** @test */ - public function moduleTagsShouldHaveBeenAddedToBox() { - $this->assertEquals(1001, - $this->_getModulePrefOf(3, 'col_droite_module_id', 'CONTENEUR_DEUX_COLONNES')); - } - - - /** @test */ - public function moduleTagShouldHaveParentId3() { - $config = $this->profil_biologie->getModuleAccueilConfig(1001, 'TAG'); - $this->assertEquals(3, $config['parent_id']); - } - - - protected function _getModuleTypeOf($id_module, $type) { - return $this->profil_biologie - ->getModuleAccueilConfig($id_module, $type)['type_module']; - } - - - protected function _getModulePrefOf($id_module, $pref, $type) { - return $this->profil_biologie - ->getModuleAccueilConfig($id_module, $type)['preferences'][$pref]; - } -} - - - -class AccueilControllerNewBoite2ColTest extends Admin_AbstractControllerTestCase { - public function setUp() { - parent::setUp(); - - $this->boite2cols = array('type_module' => 'CONTENEUR_DEUX_COLONNES', - 'division' => 2, - 'id_module' => 3); - - $this->profil_biologie = Class_Profil::getLoader() - ->newInstanceWithId(34) - ->setMenuHautOn(false) - ->setLibelle('Biologie') - ->updateModuleConfigAccueil(3, $this->boite2cols); - - Class_Profil::setCurrentProfil($this->profil_biologie); - $this->assertTrue($this->profil_biologie->isValid()); - } - - - /** @test */ - public function shouldRenderConteneur2ColonnesView() { - $this->request_url = '/admin/accueil/conteneur2colonnes?id_profil=34&id_module=3&type_module=CONTENEUR_DEUX_COLONNES&config=accueil'; - $this->dispatch($this->request_url); - - $this->assertController('accueil'); - $this->assertAction('conteneur2colonnes'); - } - - - /** @test */ - public function fonctionAdminOnClickShouldHaveActionConteneur2Colonnes() { - $this->dispatch('/opac?id_profil=34'); - $this->assertXPath("//img[contains(@onclick, 'conteneur2colonnes')]", $this->_response->getBody()); - } - - - /** @test */ - public function withModuleIdModulesShouldBeCreated() { - $this->boite2cols['preferences'] = array('col_gauche_module_id' => 234, - 'col_gauche_type' => 'COMPTEURS', - 'col_droite_module_id' => 235, - 'col_droite_type' => 'RECH_GUIDEE'); - - $this->profil_biologie->updateModuleConfigAccueil(3, $this->boite2cols); - $this->dispatch('/opac?id_profil=34'); - - $this->assertXPathContentContains('//div', 'Le catalogue contient'); - $this->assertXPathContentContains('//div', 'Recherche guidée'); - } -} - - - - class AccueilControllerLangueConfigurationTest extends Admin_AbstractControllerTestCase { public function setUp() { parent::setUp();