From e28c67d34a840bcd9ac8639468c47b71128734a8 Mon Sep 17 00:00:00 2001 From: Ghislain Loas <ghislo@sandbox.pergame.net> Date: Fri, 17 Apr 2015 16:07:19 +0200 Subject: [PATCH] hotline_#24018_fix_duplicate_id_module_in_same_page fix missing save --- library/Class/Profil.php | 8 +- .../ProfilOptionsControllerTest.php | 97 ++++++++++++++----- 2 files changed, 78 insertions(+), 27 deletions(-) diff --git a/library/Class/Profil.php b/library/Class/Profil.php index fcc9a3844cb..cd3e6c45915 100644 --- a/library/Class/Profil.php +++ b/library/Class/Profil.php @@ -1597,6 +1597,12 @@ class Class_Profil extends Storm_Model_Abstract { public function afterSave() { $this->_has_parent_profil = null; $this->_should_forward_attributes = []; + $this->syncModulesIds(); + } + + + + protected function syncModulesIds() { $this->syncModulesIdsWithParentProfil(); } @@ -1641,7 +1647,7 @@ class Class_Profil extends Storm_Model_Abstract { $module_cfg = $cfg_accueil['modules'][$id]; unset($cfg_accueil['modules'][$id]); $cfg_accueil['modules'][$new_id] = $module_cfg; - $this->setCfgAccueil($cfg_accueil); + $this->setCfgAccueil($cfg_accueil)->save(); return $this; } diff --git a/tests/application/modules/opac/controllers/ProfilOptionsControllerTest.php b/tests/application/modules/opac/controllers/ProfilOptionsControllerTest.php index dd314b0bddd..fcdc094e1b5 100644 --- a/tests/application/modules/opac/controllers/ProfilOptionsControllerTest.php +++ b/tests/application/modules/opac/controllers/ProfilOptionsControllerTest.php @@ -1101,7 +1101,7 @@ class ProfilOptionsControllerPageJeuxViewModuleCritiquesTest extends ProfilOptio */ public function breadcrumbShouldNotContainsSpanProfilJeunesse() { $this->assertNotXPathContentContains('//div[@class="barre_nav"]//span', - 'Jeunesse',$this->_response->getBody()); + 'Jeunesse',$this->_response->getBody()); } @@ -1184,7 +1184,7 @@ class ProfilOptionsControllerProfilBreadcrumbHomePageTest extends ProfilOptionsC */ public function breadcrumbShouldNotContainsSpanProfilHomePage() { $this->assertNotXPathContentContains('//div[@class="barre_nav"]//span', - 'HomePage',$this->_response->getBody()); + 'HomePage',$this->_response->getBody()); } } @@ -2367,48 +2367,93 @@ class ProfilOptionsControllerSelectedActionInMenuVerticalWidgetInHomeTest extend -class ProfilOptionControllerWithHeritedBannerTest extends AbstractControllerTestCase { +abstract class ProfilOptionControllerHeritedModulesTestCase extends AbstractControllerTestCase { + protected $_profil_portal, $_profil_gnu; + public function setUp() { parent::setUp(); - $profil_portal = $this->fixture('Class_Profil', - ['id' => 1, - 'browser' => 'opac', - 'libelle' => 'Bokeh Portal']) - ->setCfgAccueil(['modules' => ['1' => ['division' => '4', - 'type_module' => 'RECH_SIMPLE', - 'preferences' => []], - '4' => ['division' => '4', - 'type_module' => 'NEWS']]]); - - $profil_gnu = $this->fixture('Class_profil', - ['id' => 2, - 'parent_profil' => $profil_portal, - 'browser' => 'opac', - 'libelle' => 'A GNU Portal']) - ->setCfgAccueil(['modules' => ['4' => ['division' => '1', - 'type_module' => 'NEWS'], - '10' => ['division' => '1', - 'type_module' => 'NEWS']]]); - $profil_gnu->save(); - $profil_gnu->beCurrentProfil(); + $this->fixture('Class_AdminVar',['id'=>'MENU_BOITE', 'valeur' => 0]); + + $this->_profil_portal = $this->fixture('Class_Profil', + ['id' => 1, + 'browser' => 'opac', + 'libelle' => 'Bokeh Portal']) + ->setCfgAccueil(['modules' => ['1' => ['division' => '4', + 'type_module' => 'RECH_SIMPLE', + 'preferences' => []], + '4' => ['division' => '4', + 'type_module' => 'NEWS']]]); + + $this->_profil_gnu = $this->fixture('Class_profil', + ['id' => 2, + 'parent_profil' => $this->_profil_portal, + 'browser' => 'opac', + 'libelle' => 'A GNU Portal']) + ->setCfgAccueil(['modules' => ['4' => ['division' => '1', + 'type_module' => 'NEWS'], + '10' => ['division' => '1', + 'type_module' => 'NEWS']]]); + } +} + + +class ProfilOptionControllerWithHeritedBannerTest extends ProfilOptionControllerHeritedModulesTestCase { + + public function setUp() { + parent::setUp(); + $this->_profil_gnu->beCurrentProfil()->save(); $this->dispatch('/opac', true); } /** @test */ - public function htmlShouldCOntainsOnlyOneIdBoite4() { + public function htmlShouldContainsOnlyOneIdBoite4() { $this->assertXPathCount('//div[@id="boite_4"]', 1); } /** @test */ - public function htmlShouldCOntainsIdBoite11() { + public function htmlShouldContainsIdBoite11() { $this->assertXPathCount('//div[@id="boite_11"]', 1); } + /** @test */ + public function profilShouldIncrementCfgIdsAndDeleteOldId() { + $this->assertEquals([10,11], array_keys(Class_Profil::find(2)->getCfgAccueilAsArray()['modules'])); + } +} + + + +class ProfilOptionControllerWithHeritedPagesTest extends ProfilOptionControllerHeritedModulesTestCase { + + public function setUp() { + parent::setUp(); + + $this->_profil_portal + ->setSubProfils([$this->_profil_gnu]) + ->beCurrentProfil() + ->save(); + + $this->dispatch('/opac', true); + } + + + /** @test */ + public function htmlShouldContainsIdBoite1() { + $this->assertXPathCount('//div[@id="boite_1"]', 1); + } + + + /** @test */ + public function htmlShouldContainsIdBoite4() { + $this->assertXPathCount('//div[@id="boite_4"]', 1); + } + + /** @test */ public function profilShouldIncrementCfgIdsAndDeleteOldId() { $this->assertEquals([10,11], array_keys(Class_Profil::find(2)->getCfgAccueilAsArray()['modules'])); -- GitLab