[Erp5-report] r24739 - in /erp5/trunk/products/ERP5: Document/ tests/

nobody at svn.erp5.org nobody at svn.erp5.org
Fri Nov 28 12:41:13 CET 2008


Author: ivan
Date: Fri Nov 28 12:41:12 2008
New Revision: 24739

URL: http://svn.erp5.org?rev=24739&view=rev
Log:
Make it possible to control from business template UI the way Skins are handled.
It's possible to control which Skin Layer should be changed, if new Skin (in case provided by this bt5)
should be installed and if reordering based on skin folder priority should be applied.
Extend test to cover this new features.


Modified:
    erp5/trunk/products/ERP5/Document/BusinessTemplate.py
    erp5/trunk/products/ERP5/tests/testBusinessTemplate.py

Modified: erp5/trunk/products/ERP5/Document/BusinessTemplate.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/BusinessTemplate.py?rev=24739&r1=24738&r2=24739&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/BusinessTemplate.py [utf8] (original)
+++ erp5/trunk/products/ERP5/Document/BusinessTemplate.py [utf8] Fri Nov 28 12:41:12 2008
@@ -1209,6 +1209,10 @@
         fixZSQLMethod(p, obj)
 
     ps = p.portal_skins
+    request = context.REQUEST
+    register_skin_selection = request.get('your_register_skin_selection', 1)
+    reorder_skin_selection = request.get('your_reorder_skin_selection', 1)
+    skin_layer_list = request.get('your_skin_layer_list', ps.getSkinSelections()) 
     # Add new skin selection if not already existing
     for relative_url in self._archive.keys():
       if context.getTemplateFormatVersion() == 1:
@@ -1224,7 +1228,8 @@
       if isinstance(selection_list, basestring):
         selection_list = selection_list.split()
       for skin_selection in selection_list:
-        if skin_selection not in ps.getSkinSelections():
+        # user may explicitly choose not to register skin
+        if skin_selection not in ps.getSkinSelections() and register_skin_selection:
           # This skin selection does not exist, so we create a new one.
           # We'll initialize it with all skin folders, unless:
           #  - they explictly define a list of
@@ -1241,32 +1246,37 @@
                   skin_path = '%s,%s' % (skin_path, skin_folder.getId())
                 else:
                   skin_path= skin_folder.getId()
+          # add newly created skins to list of skins we care for 
+          skin_layer_list.append(skin_selection)
           ps.addSkinSelection(skin_selection, skin_path)
 
     # Add new folders into skin paths.
     for skin_name, selection in ps.getSkinPaths():
-      new_selection = []
-      selection = selection.split(',')
-      for relative_url in self._archive.keys():
-        if context.getTemplateFormatVersion() == 1:
-          if update_dict.has_key(relative_url) or force:
-            if not force:
-              if update_dict[relative_url] == 'nothing':
-                continue
-          obj = self._objects[relative_url]
-        else:
-          obj = self._archive[relative_url]
-        skin_id = relative_url.split('/')[-1]
-        selection_list = obj.getProperty('business_template_registered_skin_selections', None)
-        if selection_list is None or skin_name in selection_list:
-          if skin_id not in selection:
-            new_selection.append(skin_id)
-      new_selection.extend(selection)
-      # sort the layer according to skin priorities
-      new_selection.sort(
-        key=lambda x: x in ps.objectIds() and -ps[x].getProperty(
-        'business_template_skin_layer_priority', 0) or 0)
-      ps.manage_skinLayers(skinpath = tuple(new_selection), skinname = skin_name, add_skin = 1)
+      # install only if user selected this skin to be reordered according to priority
+      if skin_name in skin_layer_list:      
+        new_selection = []
+        selection = selection.split(',')
+        for relative_url in self._archive.keys():
+          if context.getTemplateFormatVersion() == 1:
+            if update_dict.has_key(relative_url) or force:
+              if not force:
+                if update_dict[relative_url] == 'nothing':
+                  continue
+            obj = self._objects[relative_url]
+          else:
+            obj = self._archive[relative_url]
+          skin_id = relative_url.split('/')[-1]
+          selection_list = obj.getProperty('business_template_registered_skin_selections', None)
+          if selection_list is None or skin_name in selection_list:
+            if skin_id not in selection:
+              new_selection.append(skin_id)
+        new_selection.extend(selection)
+        # sort the layer according to skin priorities
+        if reorder_skin_selection:
+          new_selection.sort(
+            key=lambda x: x in ps.objectIds() and -ps[x].getProperty(
+            'business_template_skin_layer_priority', 0) or 0)
+        ps.manage_skinLayers(skinpath = tuple(new_selection), skinname = skin_name, add_skin = 1)
     # Make sure that skin data is up-to-date (see CMFCore/Skinnable.py).
     p.changeSkin(None)
 

Modified: erp5/trunk/products/ERP5/tests/testBusinessTemplate.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testBusinessTemplate.py?rev=24739&r1=24738&r2=24739&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testBusinessTemplate.py [utf8] (original)
+++ erp5/trunk/products/ERP5/tests/testBusinessTemplate.py [utf8] Fri Nov 28 12:41:12 2008
@@ -5162,6 +5162,81 @@
     self.failUnless(bt is not None)
     bt.edit(template_site_property_id_list=('a_property',))
 
+  def stepCheckSkinSelectionRemoved(self, sequence=None, sequence_list=None, **kw):
+    """
+    Check that a skin selection has been removed.
+    """
+    self.assertTrue('Foo' not in self.portal.portal_skins.getSkinSelections())
+
+  def stepUserDisableSkinSelectionRegistration(self, sequence=None, sequence_list=None, **kw):
+    """
+    Simulate User disabling skin registration from UI.
+    """
+    self.app.REQUEST.set('your_register_skin_selection', 0)
+
+  def stepUserSelectSkinToBeChanged(self, sequence=None, sequence_list=None, **kw):
+    """
+    User selects skin to be changed from UI.
+    """
+    select_skin_to_be_changed_list = self.portal.portal_skins.getSkinSelections()[:1]
+    select_skin_not_to_be_changed_list = self.portal.portal_skins.getSkinSelections()[1:] 
+    sequence.edit(select_skin_to_be_changed_list = select_skin_to_be_changed_list, \
+                  select_skin_not_to_be_changed_list = select_skin_not_to_be_changed_list)
+    self.app.REQUEST.set('your_skin_layer_list', select_skin_to_be_changed_list)
+
+  def stepCheckUserSelectedSkinToBeChanged(self, sequence=None, sequence_list=None, **kw):
+    """
+    Check that only selected to be changed skins are affected.
+    """
+    skin_folder_id = sequence.get('skin_folder_id')
+    select_skin_to_be_changed_list = sequence.get('select_skin_to_be_changed_list')
+    select_skin_not_to_be_changed_list = sequence.get('select_skin_not_to_be_changed_list')
+    for skin_name in select_skin_to_be_changed_list:
+      self.assertTrue(skin_folder_id in self.portal.portal_skins.getSkinPath(skin_name))
+    for skin_name in select_skin_not_to_be_changed_list:
+      self.assertTrue(skin_folder_id not in self.portal.portal_skins.getSkinPath(skin_name))
+
+  def stepCheckSkinFolderPriorityOn(self, sequence=None, sequence_list=None, **kw):
+    """ 
+    Check skin folder priority 
+    """
+    ps = self.portal.portal_skins
+    for skin in ps.getSkinSelections():
+      self.assertEquals('erp5_core', ps.getSkinPath(skin).split(',')[0])
+      self.assertEquals('erp5_geek', ps.getSkinPath(skin).split(',')[1])
+
+  def stepCheckSkinFolderPriorityOff(self, sequence=None, sequence_list=None, **kw):
+    """ 
+    Check skin folder priority off
+    """
+    ps = self.portal.portal_skins
+    for skin in ps.getSkinSelections():
+      self.assertEquals('erp5_geek', ps.getSkinPath(skin).split(',')[0])
+      self.assertEquals('erp5_core', ps.getSkinPath(skin).split(',')[1])
+
+  def stepUserDisableSkinFolderPriority(self, sequence=None, sequence_list=None, **kw):
+    """ 
+    User chooses skin folder priority off from UI
+    """
+    self.app.REQUEST.set('your_reorder_skin_selection', 0)
+
+  def stepSetExistingSkinFolderPriority(self, sequence=None, sequence_list=None, **kw):
+    """ 
+    Set exisitng skin priority for test
+    """
+    skin_folder = self.portal.portal_skins['erp5_core']
+    if not skin_folder.hasProperty('business_template_skin_layer_priority'):
+      skin_folder.manage_addProperty('business_template_skin_layer_priority', \
+                                     10000.0, 'float')
+
+  def stepSetBusinessTemplateSkinFolderPriority(self, sequence=None, sequence_list=None, **kw):
+    """
+    Set skin folder priority.
+    """
+    skin_folder_id = sequence.get('skin_folder_id')
+    skin_folder = self.portal.portal_skins[skin_folder_id]
+    skin_folder.manage_addProperty('business_template_skin_layer_priority', 9999.0, 'float')
+
   def test_39_CheckSiteProperties(self, quiet=quiet, run=run_all_test):
     if not run: return
     if not quiet:
@@ -5205,8 +5280,8 @@
                        '
     sequence_list.addSequenceString(sequence_string)
     sequence_list.play(self, quiet=quiet)
-    
-  def test_158_BusinessTemplateSkinSelectionRemoveWhenUninstalled(self, quiet=quiet,
+
+  def test_158_BusinessTemplateSkinSelectionRemove(self, quiet=quiet,
                                                         run=run_all_test):
     if not run: return
     if not quiet:
@@ -5227,18 +5302,115 @@
                        InstallBusinessTemplate \
                        Tic \
                        CheckSkinSelectionAdded \
-                       stepUninstallBusinessTemplate \
-                       stepCheckSkinSelectionRemoved \
+                       UninstallBusinessTemplate \
+                       CheckSkinSelectionRemoved \
                        '
     sequence_list.addSequenceString(sequence_string)
     sequence_list.play(self, quiet=quiet)
- 
-  def stepCheckSkinSelectionRemoved(self, sequence=None, sequence_list=None, **kw):
-    """
-    Check that a skin selection has been removed.
-    """
-    self.assertTrue('Foo' not in self.portal.portal_skins.getSkinSelections())
- 
+
+  def test_159_BusinessTemplateNotRegisterSkin(self, quiet=quiet,
+                                                        run=run_all_test):
+    if not run: return
+    if not quiet:
+      message = 'Test Business Template will not register existing Skin'
+      ZopeTestCase._print('\n%s ' % message)
+      LOG('Testing... ', 0, message)
+    sequence_list = SequenceList()
+    sequence_string = 'CreateSkinFolder \
+                       SetSkinFolderRegistredSelections \
+                       CreateNewBusinessTemplate \
+                       UseExportBusinessTemplate \
+                       AddSkinFolderToBusinessTemplate \
+                       BuildBusinessTemplate \
+                       SaveBusinessTemplate \
+                       RemoveSkinFolder \
+                       ImportBusinessTemplate \
+                       UseImportBusinessTemplate \
+                       UserDisableSkinSelectionRegistration \
+                       InstallBusinessTemplate \
+                       Tic \
+                       CheckSkinSelectionRemoved \
+                       '
+    sequence_list.addSequenceString(sequence_string)
+    sequence_list.play(self, quiet=quiet)
+
+  def test_160_BusinessTemplateChangeOnlySelectedSkin(self, quiet=quiet,
+                                                        run=run_all_test):
+    if not run: return
+    if not quiet:
+      message = 'Test Business Template will change only selected skins'
+      ZopeTestCase._print('\n%s ' % message)
+      LOG('Testing... ', 0, message)
+    sequence_list = SequenceList()
+    sequence_string = 'CreateSkinFolder \
+                       CreateNewBusinessTemplate \
+                       UseExportBusinessTemplate \
+                       AddSkinFolderToBusinessTemplate \
+                       BuildBusinessTemplate \
+                       SaveBusinessTemplate \
+                       RemoveSkinFolder \
+                       ImportBusinessTemplate \
+                       UseImportBusinessTemplate \
+                       UserSelectSkinToBeChanged \
+                       InstallBusinessTemplate \
+                       Tic \
+                       CheckUserSelectedSkinToBeChanged \
+                       '
+    sequence_list.addSequenceString(sequence_string)
+    sequence_list.play(self, quiet=quiet)
+
+  def test_161_BusinessTemplateCheckSkinPriorityOrderingEnabled(self, quiet=quiet,
+                                                        run=run_all_test):
+    if not run: return
+    if not quiet:
+      message = 'Test Business Template will reorder skins path in Skin'
+      ZopeTestCase._print('\n%s ' % message)
+      LOG('Testing... ', 0, message)
+    sequence_list = SequenceList()
+    sequence_string = 'CreateSkinFolder \
+                       SetBusinessTemplateSkinFolderPriority \
+                       SetExistingSkinFolderPriority \
+                       CreateNewBusinessTemplate \
+                       UseExportBusinessTemplate \
+                       AddSkinFolderToBusinessTemplate \
+                       BuildBusinessTemplate \
+                       SaveBusinessTemplate \
+                       RemoveSkinFolder \
+                       ImportBusinessTemplate \
+                       UseImportBusinessTemplate \
+                       InstallBusinessTemplate \
+                       Tic \
+                       CheckSkinFolderPriorityOn \
+                       '
+    sequence_list.addSequenceString(sequence_string)
+    sequence_list.play(self, quiet=quiet)
+
+  def test_162_BusinessTemplateCheckSkinPriorityOrderingDisabled(self, quiet=quiet,
+                                                        run=run_all_test):
+    if not run: return
+    if not quiet:
+      message = 'Test Business Template will not reorder skins path in Skin'
+      ZopeTestCase._print('\n%s ' % message)
+      LOG('Testing... ', 0, message)
+    sequence_list = SequenceList()
+    sequence_string = 'CreateSkinFolder \
+                       SetBusinessTemplateSkinFolderPriority \
+                       SetExistingSkinFolderPriority \
+                       CreateNewBusinessTemplate \
+                       UseExportBusinessTemplate \
+                       AddSkinFolderToBusinessTemplate \
+                       BuildBusinessTemplate \
+                       SaveBusinessTemplate \
+                       RemoveSkinFolder \
+                       ImportBusinessTemplate \
+                       UseImportBusinessTemplate \
+                       UserDisableSkinFolderPriority \
+                       InstallBusinessTemplate \
+                       Tic \
+                       CheckSkinFolderPriorityOff \
+                       '
+    sequence_list.addSequenceString(sequence_string)
+    sequence_list.play(self, quiet=quiet)
 
 def test_suite():
   suite = unittest.TestSuite()




More information about the Erp5-report mailing list