Commit 9f878abc authored by Ivan Tyagov's avatar Ivan Tyagov

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.



git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@24739 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 858601c5
...@@ -1209,6 +1209,10 @@ class SkinTemplateItem(ObjectTemplateItem): ...@@ -1209,6 +1209,10 @@ class SkinTemplateItem(ObjectTemplateItem):
fixZSQLMethod(p, obj) fixZSQLMethod(p, obj)
ps = p.portal_skins 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 # Add new skin selection if not already existing
for relative_url in self._archive.keys(): for relative_url in self._archive.keys():
if context.getTemplateFormatVersion() == 1: if context.getTemplateFormatVersion() == 1:
...@@ -1224,7 +1228,8 @@ class SkinTemplateItem(ObjectTemplateItem): ...@@ -1224,7 +1228,8 @@ class SkinTemplateItem(ObjectTemplateItem):
if isinstance(selection_list, basestring): if isinstance(selection_list, basestring):
selection_list = selection_list.split() selection_list = selection_list.split()
for skin_selection in selection_list: 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. # This skin selection does not exist, so we create a new one.
# We'll initialize it with all skin folders, unless: # We'll initialize it with all skin folders, unless:
# - they explictly define a list of # - they explictly define a list of
...@@ -1241,32 +1246,37 @@ class SkinTemplateItem(ObjectTemplateItem): ...@@ -1241,32 +1246,37 @@ class SkinTemplateItem(ObjectTemplateItem):
skin_path = '%s,%s' % (skin_path, skin_folder.getId()) skin_path = '%s,%s' % (skin_path, skin_folder.getId())
else: else:
skin_path= skin_folder.getId() 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) ps.addSkinSelection(skin_selection, skin_path)
# Add new folders into skin paths. # Add new folders into skin paths.
for skin_name, selection in ps.getSkinPaths(): for skin_name, selection in ps.getSkinPaths():
new_selection = [] # install only if user selected this skin to be reordered according to priority
selection = selection.split(',') if skin_name in skin_layer_list:
for relative_url in self._archive.keys(): new_selection = []
if context.getTemplateFormatVersion() == 1: selection = selection.split(',')
if update_dict.has_key(relative_url) or force: for relative_url in self._archive.keys():
if not force: if context.getTemplateFormatVersion() == 1:
if update_dict[relative_url] == 'nothing': if update_dict.has_key(relative_url) or force:
continue if not force:
obj = self._objects[relative_url] if update_dict[relative_url] == 'nothing':
else: continue
obj = self._archive[relative_url] obj = self._objects[relative_url]
skin_id = relative_url.split('/')[-1] else:
selection_list = obj.getProperty('business_template_registered_skin_selections', None) obj = self._archive[relative_url]
if selection_list is None or skin_name in selection_list: skin_id = relative_url.split('/')[-1]
if skin_id not in selection: selection_list = obj.getProperty('business_template_registered_skin_selections', None)
new_selection.append(skin_id) if selection_list is None or skin_name in selection_list:
new_selection.extend(selection) if skin_id not in selection:
# sort the layer according to skin priorities new_selection.append(skin_id)
new_selection.sort( new_selection.extend(selection)
key=lambda x: x in ps.objectIds() and -ps[x].getProperty( # sort the layer according to skin priorities
'business_template_skin_layer_priority', 0) or 0) if reorder_skin_selection:
ps.manage_skinLayers(skinpath = tuple(new_selection), skinname = skin_name, add_skin = 1) 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). # Make sure that skin data is up-to-date (see CMFCore/Skinnable.py).
p.changeSkin(None) p.changeSkin(None)
......
...@@ -5162,6 +5162,81 @@ class TestBusinessTemplate(ERP5TypeTestCase, LogInterceptor): ...@@ -5162,6 +5162,81 @@ class TestBusinessTemplate(ERP5TypeTestCase, LogInterceptor):
self.failUnless(bt is not None) self.failUnless(bt is not None)
bt.edit(template_site_property_id_list=('a_property',)) 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): def test_39_CheckSiteProperties(self, quiet=quiet, run=run_all_test):
if not run: return if not run: return
if not quiet: if not quiet:
...@@ -5205,8 +5280,8 @@ class TestBusinessTemplate(ERP5TypeTestCase, LogInterceptor): ...@@ -5205,8 +5280,8 @@ class TestBusinessTemplate(ERP5TypeTestCase, LogInterceptor):
' '
sequence_list.addSequenceString(sequence_string) sequence_list.addSequenceString(sequence_string)
sequence_list.play(self, quiet=quiet) sequence_list.play(self, quiet=quiet)
def test_158_BusinessTemplateSkinSelectionRemoveWhenUninstalled(self, quiet=quiet, def test_158_BusinessTemplateSkinSelectionRemove(self, quiet=quiet,
run=run_all_test): run=run_all_test):
if not run: return if not run: return
if not quiet: if not quiet:
...@@ -5227,18 +5302,115 @@ class TestBusinessTemplate(ERP5TypeTestCase, LogInterceptor): ...@@ -5227,18 +5302,115 @@ class TestBusinessTemplate(ERP5TypeTestCase, LogInterceptor):
InstallBusinessTemplate \ InstallBusinessTemplate \
Tic \ Tic \
CheckSkinSelectionAdded \ CheckSkinSelectionAdded \
stepUninstallBusinessTemplate \ UninstallBusinessTemplate \
stepCheckSkinSelectionRemoved \ CheckSkinSelectionRemoved \
'
sequence_list.addSequenceString(sequence_string)
sequence_list.play(self, quiet=quiet)
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.addSequenceString(sequence_string)
sequence_list.play(self, quiet=quiet) 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_suite(): def test_suite():
suite = unittest.TestSuite() suite = unittest.TestSuite()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment