From 0f69875c4006899109351b20141822fb126b67ac Mon Sep 17 00:00:00 2001
From: Romain Courteaud <romain@nexedi.com>
Date: Fri, 25 Sep 2009 16:28:24 +0000
Subject: [PATCH] Keep business_template_registered_skin_selections when
 updating a skin folder

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@29185 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5/Document/BusinessTemplate.py  |  9 +++
 product/ERP5/tests/testBusinessTemplate.py | 86 ++++++++++++++++++++++
 2 files changed, 95 insertions(+)

diff --git a/product/ERP5/Document/BusinessTemplate.py b/product/ERP5/Document/BusinessTemplate.py
index 43a1600dba..3ce13e5ee3 100644
--- a/product/ERP5/Document/BusinessTemplate.py
+++ b/product/ERP5/Document/BusinessTemplate.py
@@ -965,6 +965,15 @@ class ObjectTemplateItem(BaseTemplateItem):
                                  'ERP5 Distributed Ram Cache',):
             assert container.meta_type == 'ERP5 Cache Factory'
             container.getParentValue().updateCache()
+          elif (container.meta_type == 'CMF Skins Tool') and \
+              (old_obj is not None):
+            # Keep previous value of register skin selection for skin folder
+            skin_selection_list = old_obj.getProperty(
+                'business_template_registered_skin_selections', None)
+            if skin_selection_list is not None:
+              obj._setProperty(
+                  'business_template_registered_skin_selections',
+                  skin_selection_list, type='tokens')
            
           recurse(restoreHook, obj)
       # now put original order group
diff --git a/product/ERP5/tests/testBusinessTemplate.py b/product/ERP5/tests/testBusinessTemplate.py
index 2bb5593170..4e45771099 100644
--- a/product/ERP5/tests/testBusinessTemplate.py
+++ b/product/ERP5/tests/testBusinessTemplate.py
@@ -4603,6 +4603,10 @@ class TestBusinessTemplate(ERP5TypeTestCase, LogInterceptor):
     self.assertTrue(skin_id in layers, layers)
     self.assertTrue('erp5_core' in layers, layers)
     self.assertFalse('erp5_xhtml_style' in layers, layers)
+    skin_folder = ps._getOb(skin_id, None)
+    skin_selection_list = skin_folder.getProperty(
+        'business_template_registered_skin_selections', ())
+    self.assertTrue('Foo' in skin_selection_list)
 
   def stepCheckStaticSkinSelection(self, sequence=None, **kw):
     ps = self.getSkinsTool()
@@ -5576,6 +5580,88 @@ class TestBusinessTemplate(ERP5TypeTestCase, LogInterceptor):
     sequence_list.addSequenceString(sequence_string)
     sequence_list.play(self, quiet=quiet)
 
+  def stepModifySkinFolder(self, sequence=None,sequence_list=None, **kw):
+    """
+    Modify the skin folder
+    """
+    ps = self.getSkinsTool()
+    skin_id = sequence.get('skin_folder_id')
+    skin_folder = ps._getOb(skin_id, None)
+    skin_folder._setProperty(
+                    'business_template_skin_layer_priority',
+                    99, type='float')
+
+  def stepUnmodifySkinFolder(self, sequence=None,sequence_list=None, **kw):
+    """
+    Modify the skin folder
+    """
+    ps = self.getSkinsTool()
+    skin_id = sequence.get('skin_folder_id')
+    skin_folder = ps._getOb(skin_id, None)
+    skin_folder._delProperty('business_template_skin_layer_priority')
+
+  def stepCheckModifiedSkinFolderExists(self, sequence=None,
+                                        sequence_list=None, **kw):
+    """
+    Check modified skin folder
+    """
+    ps = self.getSkinsTool()
+    skin_id = sequence.get('skin_folder_id')
+    skin_folder = ps._getOb(skin_id, None)
+    self.assertEquals(
+        99, skin_folder.getProperty('business_template_skin_layer_priority'))
+
+  def test_163_UpdateSkinFolderWithRegisteredSkinSelection(
+                                  self, quiet=quiet, run=run_all_test):
+    if not run: return
+    if not quiet:
+      message = 'Test Update Skin Folder'
+      ZopeTestCase._print('\n%s ' % message)
+      LOG('Testing... ', 0, message)
+    sequence_list = SequenceList()
+
+    sequence_string = '\
+                       CreateSkinFolder \
+                       SetSkinFolderRegistredSelections \
+                       CreateNewBusinessTemplate \
+                       UseExportBusinessTemplate \
+                       AddSkinFolderToBusinessTemplate \
+                       AddRegistredSelectionToBusinessTemplate \
+                       BuildBusinessTemplate \
+                       SaveBusinessTemplate \
+                       RemoveSkinFolder \
+                       RemoveBusinessTemplate \
+                       RemoveAllTrashBins \
+                       \
+                       ImportBusinessTemplate \
+                       UseImportBusinessTemplate \
+                       InstallBusinessTemplate \
+                       Tic \
+                       CheckSkinSelectionAdded \
+                       \
+                       ModifySkinFolder \
+                       \
+                       CopyBusinessTemplate \
+                       Tic \
+                       EditBusinessTemplate \
+                       BuildBusinessTemplate \
+                       CheckBuiltBuildingState \
+                       SaveBusinessTemplate \
+                       \
+                       UnmodifySkinFolder \
+                       \
+                       ImportBusinessTemplate \
+                       Tic \
+                       UseImportBusinessTemplate \
+                       InstallWithoutForceBusinessTemplate \
+                       Tic \
+                       \
+                       CheckModifiedSkinFolderExists \
+                       CheckSkinSelectionAdded \
+                       '
+    sequence_list.addSequenceString(sequence_string)
+    sequence_list.play(self, quiet=quiet)
+
 def test_suite():
   suite = unittest.TestSuite()
   suite.addTest(unittest.makeSuite(TestBusinessTemplate))
-- 
2.30.9