Commit 9e5ee389 authored by Jérome Perrin's avatar Jérome Perrin

Fix bugs in erp5_forge scripts

* "Create Skin Folder" action had a typo, so it was not setting the `business_template_skin_layer_priorty` property that business template is using when installing.
* "Create Report" was not updated for the new "action title" feature of forms.

This time, add the missing tests that should have prevented these problems.

See merge request nexedi/erp5!1133
parents e17f69f3 2d34bbea
...@@ -11,10 +11,10 @@ skin_folder = portal.portal_skins[skin_folder_name] ...@@ -11,10 +11,10 @@ skin_folder = portal.portal_skins[skin_folder_name]
if skin_layer_priority: if skin_layer_priority:
marker = [] marker = []
if skin_folder.getProperty("business_template_skin_layer_priorty", marker) is marker: if skin_folder.getProperty("business_template_skin_layer_priority", marker) is marker:
skin_folder.manage_addProperty("business_template_skin_layer_priorty", skin_layer_priority, "string") skin_folder.manage_addProperty("business_template_skin_layer_priority", skin_layer_priority, "float")
else: else:
skin_folder.manage_changeProperties({"business_template_skin_layer_priorty": skin_layer_priority}) skin_folder.manage_changeProperties({"business_template_skin_layer_priority": skin_layer_priority})
if skin_layer_list: if skin_layer_list:
all_skin_layers_selected = len(skin_layer_list) == len(portal.portal_skins.getSkinPaths()) all_skin_layers_selected = len(skin_layer_list) == len(portal.portal_skins.getSkinPaths())
......
...@@ -20,6 +20,7 @@ dialog.manage_settings( ...@@ -20,6 +20,7 @@ dialog.manage_settings(
field_name=dialog.name, field_name=dialog.name,
field_description=dialog.description, field_description=dialog.description,
field_action=report_form_name, field_action=report_form_name,
field_action_title=dialog.action_title,
field_update_action=dialog.update_action, field_update_action=dialog.update_action,
field_update_action_title=dialog.update_action_title, field_update_action_title=dialog.update_action_title,
field_enctype=dialog.enctype, field_enctype=dialog.enctype,
...@@ -110,6 +111,7 @@ report.manage_settings( ...@@ -110,6 +111,7 @@ report.manage_settings(
field_name=report.name, field_name=report.name,
field_description=report.description, field_description=report.description,
field_action=report_form_name, field_action=report_form_name,
field_action_title=report.action_title,
field_update_action=report.update_action, field_update_action=report.update_action,
field_update_action_title=report.update_action_title, field_update_action_title=report.update_action_title,
field_enctype=report.enctype, field_enctype=report.enctype,
...@@ -130,6 +132,7 @@ report_section_form.manage_settings( ...@@ -130,6 +132,7 @@ report_section_form.manage_settings(
field_name=report_section_form.name, field_name=report_section_form.name,
field_description=report_section_form.description, field_description=report_section_form.description,
field_action='', field_action='',
field_action_title=report_section_form.action_title,
field_update_action=report_section_form.update_action, field_update_action=report_section_form.update_action,
field_update_action_title=report_section_form.update_action_title, field_update_action_title=report_section_form.update_action_title,
field_enctype=report_section_form.enctype, field_enctype=report_section_form.enctype,
......
##############################################################################
#
# Copyright (c) 2020 Nexedi SA and Contributors.
# All Rights Reserved.
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
import urlparse
class TestBusinessTemplateScripts(ERP5TypeTestCase):
"""Test for erp5_toolbox helpers for business template creation
"""
def afterSetUp(self):
super(TestBusinessTemplateScripts, self).afterSetUp()
self.business_template = self.portal.portal_templates.newContent(
portal_type='Business Template')
self.skin_folder = self.portal.portal_skins.custom
def test_BusinessTemplate_createReport(self):
resp = self.business_template.BusinessTemplate_createReport(
portal_type='Foo Module',
report_name='Dummy Report',
skin_folder=self.skin_folder.getId(),
use_from_date_at_date=None)
resp_url = urlparse.urlparse(resp)
self.assertEqual(
['Report created.'],
urlparse.parse_qs(resp_url.query)['portal_status_message'])
# report is usable
action, = [
a for a in self.portal.portal_actions.listFilteredActionsFor(
self.portal.foo_module)['object_report']
if a['name'] == 'Dummy Report'
]
self.assertEqual('dummy_report_report', action['id'])
self.assertEqual(
'FooModule_viewDummyReportReportDialog',
urlparse.urlparse(action['url']).path.split('/')[-1])
self.assertIn(
'FooModule_viewDummyReportReportDialog', self.skin_folder.objectIds())
self.assertIn(
'FooModule_viewDummyReportReport', self.skin_folder.objectIds())
self.assertIn(
'FooModule_getDummyReportReportSectionList',
self.skin_folder.objectIds())
self.assertIn(
'FooModule_viewDummyReportReportSection', self.skin_folder.objectIds())
self.assertIn(
'FooModule_getDummyReportLineList', self.skin_folder.objectIds())
# actions were added to business template
self.assertEqual(
(
'Foo Module | dummy_export_export',
'Foo Module | dummy_report_report'),
self.business_template.getTemplateActionPathList(),
)
def test_BusinessTemplate_createSkinFolder(self):
self.business_template.setTemplateSkinIdList(['existing'])
resp = self.business_template.BusinessTemplate_createSkinFolder(
skin_folder_name='dummy_skin_folder',
skin_layer_priority=None,
skin_layer_list=self.portal.portal_skins.getSkinSelections(),
)
resp_url = urlparse.urlparse(resp)
self.assertEqual(
['Skin folder created.'],
urlparse.parse_qs(resp_url.query)['portal_status_message'])
self.assertIn('dummy_skin_folder', self.portal.portal_skins.objectIds())
# skin is added to business template
self.assertEqual(
('dummy_skin_folder', 'existing'),
self.business_template.getTemplateSkinIdList())
def test_BusinessTemplate_createSkinFolder_priority(self):
resp = self.business_template.BusinessTemplate_createSkinFolder(
skin_folder_name='dummy_skin_folder',
skin_layer_priority=99,
skin_layer_list=self.portal.portal_skins.getSkinSelections(),
)
resp_url = urlparse.urlparse(resp)
self.assertEqual(
['Skin folder created.'],
urlparse.parse_qs(resp_url.query)['portal_status_message'])
self.assertIn('dummy_skin_folder', self.portal.portal_skins.objectIds())
self.assertEqual(
99,
self.portal.portal_skins.dummy_skin_folder.getProperty(
'business_template_skin_layer_priority'))
def test_BusinessTemplate_createSkinFolder_skin_selection(self):
self.business_template.setTemplateRegisteredSkinSelectionList(
['existing | SelectedSkinSelection'])
self.portal.portal_skins.addSkinSelection(
'SelectedSkinSelection', 'erp5_core')
self.portal.portal_skins.addSkinSelection(
'NotSelectedSkinSelection', 'erp5_core')
resp = self.business_template.BusinessTemplate_createSkinFolder(
skin_folder_name='dummy_skin_folder',
skin_layer_priority=99,
skin_layer_list=['View', 'SelectedSkinSelection'])
resp_url = urlparse.urlparse(resp)
self.assertEqual(
['Skin folder created.'],
urlparse.parse_qs(resp_url.query)['portal_status_message'])
self.assertIn('dummy_skin_folder', self.portal.portal_skins.objectIds())
skin_folders_by_skin_selection = {
k: v.split(',') for (k, v) in self.portal.portal_skins.getSkinPaths()
}
self.assertIn('dummy_skin_folder', skin_folders_by_skin_selection['View'])
self.assertIn(
'dummy_skin_folder',
skin_folders_by_skin_selection['SelectedSkinSelection'])
self.assertNotIn(
'dummy_skin_folder',
skin_folders_by_skin_selection['NotSelectedSkinSelection'])
self.assertEqual(
['SelectedSkinSelection', 'View'],
sorted(
self.portal.portal_skins.dummy_skin_folder.getProperty(
'business_template_registered_skin_selections')))
# skin is added to business template
self.assertEqual(
(
'dummy_skin_folder | SelectedSkinSelection',
'dummy_skin_folder | View',
'existing | SelectedSkinSelection',
), self.business_template.getTemplateRegisteredSkinSelectionList())
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Test Component" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_recorded_property_dict</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>default_reference</string> </key>
<value> <string>testERP5Toolbox</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>test.erp5.testERP5Toolbox</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Test Component</string> </value>
</item>
<item>
<key> <string>sid</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>text_content_error_message</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>text_content_warning_message</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>version</string> </key>
<value> <string>erp5</string> </value>
</item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>component_validation_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
test.erp5.testERP5Toolbox
\ No newline at end of file
erp5_ui_test
erp5_full_text_mroonga_catalog
\ No newline at end of file
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