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 !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