From e1effdd1fd4cf20c3c00eeefcefb3fc6806df08d Mon Sep 17 00:00:00 2001 From: Ayush Tiwari <ayush.tiwari@nexedi.com> Date: Mon, 24 Jul 2017 10:26:24 +0000 Subject: [PATCH] bt5_config: Migrate erp5_ui_test_core to BM format --- .../extension.erp5.ERP5Zuite.py | 93 ------- .../extension.erp5.ERP5Zuite.xml | 84 ------ .../extension.erp5.MailHostUtils.py | 44 --- .../extension.erp5.MailHostUtils.xml | 123 --------- .../extension.erp5.SeleniumTestUtils.py | 42 --- .../extension.erp5.SeleniumTestUtils.xml | 84 ------ .../portal_skins/erp5_ui_test_core.xml | 26 -- .../erp5_ui_test_core/Base_clearCache.py | 3 - .../erp5_ui_test_core/Base_clearCache.xml | 62 ----- .../Base_setLanguageWithoutRedirect.py | 7 - .../Base_setLanguageWithoutRedirect.xml | 62 ----- .../ERP5Site_setupDummyMailHost.xml | 28 -- .../ErrorLog_reportErrorList.py | 8 - .../ErrorLog_reportErrorList.xml | 62 ----- .../MailHost_reportMessageList.py | 29 -- .../MailHost_reportMessageList.xml | 62 ----- .../TestTool_cleanUpTestResults.py | 10 - .../TestTool_cleanUpTestResults.xml | 66 ----- .../TestTool_getLatestReportId.py | 13 - .../TestTool_getLatestReportId.xml | 62 ----- .../erp5_ui_test_core/TestTool_getResults.py | 17 -- .../erp5_ui_test_core/TestTool_getResults.xml | 62 ----- .../erp5_ui_test_core/TestTool_getSkinName.py | 3 - .../TestTool_getSkinName.xml | 62 ----- .../TestTool_reportResult.py | 39 --- .../TestTool_reportResult.xml | 62 ----- .../TestTool_setSkinNameCookie.py | 5 - .../TestTool_setSkinNameCookie.xml | 62 ----- .../Zuite_CommonTemplate.xml | 79 ------ .../Zuite_CommonTemplate.zpt | 39 --- .../erp5_ui_test_core/Zuite_addTest.py | 21 -- .../erp5_ui_test_core/Zuite_addTest.xml | 62 ----- .../erp5_ui_test_core/Zuite_addZuite.py | 21 -- .../erp5_ui_test_core/Zuite_addZuite.xml | 68 ----- .../Zuite_createAndLaunchSeleniumTest.py | 11 - .../Zuite_createAndLaunchSeleniumTest.xml | 74 ----- .../erp5_ui_test_core/Zuite_editZPT.xml | 28 -- .../Zuite_generateFilename.py | 14 - .../Zuite_generateFilename.xml | 62 ----- .../Zuite_getFilenameLocation.py | 2 - .../Zuite_getFilenameLocation.xml | 70 ----- .../erp5_ui_test_core/Zuite_getObjectUid.py | 4 - .../erp5_ui_test_core/Zuite_getObjectUid.xml | 62 ----- .../Zuite_getTestDocumentsHome.xml | 28 -- .../Zuite_isReportGenerated.xml | 28 -- .../Zuite_prepareReportDirectory.xml | 28 -- .../Zuite_runSeleniumTest.py | 18 -- .../Zuite_runSeleniumTest.xml | 74 ----- .../erp5_ui_test_core/Zuite_setPreference.py | 20 -- .../erp5_ui_test_core/Zuite_setPreference.xml | 66 ----- .../erp5_ui_test_core/Zuite_updateImage.xml | 28 -- .../Zuite_uploadScreenshot.py | 27 -- .../Zuite_uploadScreenshot.xml | 70 ----- .../erp5_ui_test_core/Zuite_urlRead.xml | 28 -- .../Zuite_viewZeleniumTestLauncher.xml | 154 ----------- .../your_description.xml | 260 ------------------ .../your_url_list.xml | 123 --------- .../your_zuite_id.xml | 123 --------- ...Zuite_viewZeleniumTestLauncherValidator.py | 33 --- ...uite_viewZeleniumTestLauncherValidator.xml | 62 ----- .../Zuite_waitForActivities.xml | 28 -- .../erp5_ui_test_core/user-extensions.js.js | 84 ------ .../erp5_ui_test_core/user-extensions.js.xml | 32 --- bt5/erp5_ui_test_core/bt/change_log | 33 --- bt5/erp5_ui_test_core/bt/copyright_list | 1 - bt5/erp5_ui_test_core/bt/dependency_list | 2 - bt5/erp5_ui_test_core/bt/description | 3 - bt5/erp5_ui_test_core/bt/license | 1 - bt5/erp5_ui_test_core/bt/maintainer_list | 1 - .../bt/template_extension_id_list | 3 - .../bt/template_format_version | 1 - .../bt/template_skin_id_list | 1 - bt5/erp5_ui_test_core/bt/title | 1 - bt5/erp5_ui_test_core/bt/version | 1 - bt5/erp5_ui_test_core/erp5_ui_test_core.zexp | Bin 0 -> 64327 bytes 75 files changed, 3261 deletions(-) delete mode 100644 bt5/erp5_ui_test_core/ExtensionTemplateItem/portal_components/extension.erp5.ERP5Zuite.py delete mode 100644 bt5/erp5_ui_test_core/ExtensionTemplateItem/portal_components/extension.erp5.ERP5Zuite.xml delete mode 100644 bt5/erp5_ui_test_core/ExtensionTemplateItem/portal_components/extension.erp5.MailHostUtils.py delete mode 100644 bt5/erp5_ui_test_core/ExtensionTemplateItem/portal_components/extension.erp5.MailHostUtils.xml delete mode 100644 bt5/erp5_ui_test_core/ExtensionTemplateItem/portal_components/extension.erp5.SeleniumTestUtils.py delete mode 100644 bt5/erp5_ui_test_core/ExtensionTemplateItem/portal_components/extension.erp5.SeleniumTestUtils.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Base_clearCache.py delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Base_clearCache.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Base_setLanguageWithoutRedirect.py delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Base_setLanguageWithoutRedirect.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/ERP5Site_setupDummyMailHost.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/ErrorLog_reportErrorList.py delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/ErrorLog_reportErrorList.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/MailHost_reportMessageList.py delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/MailHost_reportMessageList.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_cleanUpTestResults.py delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_cleanUpTestResults.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_getLatestReportId.py delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_getLatestReportId.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_getResults.py delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_getResults.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_getSkinName.py delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_getSkinName.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_reportResult.py delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_reportResult.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_setSkinNameCookie.py delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_setSkinNameCookie.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_CommonTemplate.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_CommonTemplate.zpt delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_addTest.py delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_addTest.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_addZuite.py delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_addZuite.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_createAndLaunchSeleniumTest.py delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_createAndLaunchSeleniumTest.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_editZPT.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_generateFilename.py delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_generateFilename.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_getFilenameLocation.py delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_getFilenameLocation.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_getObjectUid.py delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_getObjectUid.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_getTestDocumentsHome.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_isReportGenerated.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_prepareReportDirectory.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_runSeleniumTest.py delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_runSeleniumTest.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_setPreference.py delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_setPreference.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_updateImage.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_uploadScreenshot.py delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_uploadScreenshot.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_urlRead.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_viewZeleniumTestLauncher.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_viewZeleniumTestLauncher/your_description.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_viewZeleniumTestLauncher/your_url_list.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_viewZeleniumTestLauncher/your_zuite_id.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_viewZeleniumTestLauncherValidator.py delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_viewZeleniumTestLauncherValidator.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_waitForActivities.xml delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/user-extensions.js.js delete mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/user-extensions.js.xml delete mode 100644 bt5/erp5_ui_test_core/bt/change_log delete mode 100644 bt5/erp5_ui_test_core/bt/copyright_list delete mode 100644 bt5/erp5_ui_test_core/bt/dependency_list delete mode 100644 bt5/erp5_ui_test_core/bt/description delete mode 100644 bt5/erp5_ui_test_core/bt/license delete mode 100644 bt5/erp5_ui_test_core/bt/maintainer_list delete mode 100644 bt5/erp5_ui_test_core/bt/template_extension_id_list delete mode 100644 bt5/erp5_ui_test_core/bt/template_format_version delete mode 100644 bt5/erp5_ui_test_core/bt/template_skin_id_list delete mode 100644 bt5/erp5_ui_test_core/bt/title delete mode 100644 bt5/erp5_ui_test_core/bt/version create mode 100644 bt5/erp5_ui_test_core/erp5_ui_test_core.zexp diff --git a/bt5/erp5_ui_test_core/ExtensionTemplateItem/portal_components/extension.erp5.ERP5Zuite.py b/bt5/erp5_ui_test_core/ExtensionTemplateItem/portal_components/extension.erp5.ERP5Zuite.py deleted file mode 100644 index eb31da73e3..0000000000 --- a/bt5/erp5_ui_test_core/ExtensionTemplateItem/portal_components/extension.erp5.ERP5Zuite.py +++ /dev/null @@ -1,93 +0,0 @@ -from time import sleep - -def waitForActivities(self, count=1000): - """ - We wait until all activities are finished - - RuntimeError is raised in case there is no way - to finish activities. - """ - activity_tool = self.getPortalObject().portal_activities - for x in xrange(count): - x = activity_tool.getMessageList() - if not x: - return 'Done.' - if all(x.processing_node == -2 for x in x): - break - activity_tool.process_timer(None, None) - sleep(1) - raise RuntimeError('tic is looping forever.') - -def UpdateImage(image): - image._update_image_info() - -def urlread(url, safe_return=0): - import urllib - try: - return urllib.urlopen(url).read() - except IOError, e: - if safe_return: - # Return an Selenium test code that will obviously fail. This - # prevent zelenium test run get Stalled. - return """<html><body><table><tr><td>assertTextPresent</td> - <td>An error occurred when dowload %s : %s </td> - <td></td><tr></body></html>""" % (url , e) - raise IOError(e) - - -def editZPT(zpt, text): - zpt.pt_edit(text, 'text/html') - -""" - Add the test at the end of the webpage (overwrite the current test if there's already one) and hide it -""" -def appendTestToWebPage(text, test_text): - import lxml.html - root = lxml.html.fromstring(text) - test_root = lxml.html.fromstring(test_text) - test_root = test_root.xpath('//table')[0] - tutorial_test = lxml.html.fromstring('<table></table>') - tutorial_test.tag = test_root.tag - for att in test_root.attrib.keys(): - tutorial_test.attrib[att] = test_root.attrib[att] - tutorial_test.append(test_root[1]) - hidden_list = [tutorial_test] + tutorial_test.xpath('//span') - for element in hidden_list: - element.attrib['style']='display:none;' - table_list = root.xpath('//table[@id="SELENIUM-TEST"]') - if(len(table_list) == 0): - root.append(tutorial_test) - else: - root.replace(table_list[0], tutorial_test) - return lxml.html.tostring(root).replace('\n','').replace("\'","'") - -from App.config import getConfiguration -import os - -def prepareReportDirectory(self, expected_filename): - """ - Remove existing report with the given filename if any. This must be called - before a report button is clicked - """ - filename_path = os.path.join(getConfiguration().instancehome, 'var', - expected_filename) - - if os.path.exists(filename_path): - os.remove(filename_path) - - return 'Done' - -def isReportGenerated(self, expected_filename): - """ - Check that the report has been generated. Firefox will not prompt for PDF - files as defined in ERP5Type.tests.ERP5TypeFunctionalTestCase.Firefox in - getPrefJs() method - """ - filename_path = os.path.join(getConfiguration().instancehome, 'var', - expected_filename) - - if os.path.isfile(filename_path): - os.remove(filename_path) - return 'Done' - - return 'Report not generated!' diff --git a/bt5/erp5_ui_test_core/ExtensionTemplateItem/portal_components/extension.erp5.ERP5Zuite.xml b/bt5/erp5_ui_test_core/ExtensionTemplateItem/portal_components/extension.erp5.ERP5Zuite.xml deleted file mode 100644 index db63caf545..0000000000 --- a/bt5/erp5_ui_test_core/ExtensionTemplateItem/portal_components/extension.erp5.ERP5Zuite.xml +++ /dev/null @@ -1,84 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Extension Component" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>default_reference</string> </key> - <value> <string>ERP5Zuite</string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>extension.erp5.ERP5Zuite</string> </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Extension Component</string> </value> - </item> - <item> - <key> <string>sid</string> </key> - <value> - <none/> - </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">AAAAAAAAAAI=</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> - <item> - <key> <string>component_validation_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> - </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="3" aka="AAAAAAAAAAM="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <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> - </tuple> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/ExtensionTemplateItem/portal_components/extension.erp5.MailHostUtils.py b/bt5/erp5_ui_test_core/ExtensionTemplateItem/portal_components/extension.erp5.MailHostUtils.py deleted file mode 100644 index 40ae701f23..0000000000 --- a/bt5/erp5_ui_test_core/ExtensionTemplateItem/portal_components/extension.erp5.MailHostUtils.py +++ /dev/null @@ -1,44 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002-2009 Nexedi SA and Contributors. All Rights Reserved. -# Rafael Monnerat <rafael@nexedi.com> -# -# 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 ExtensionClass import pmc_init_of -from Products.ERP5Type.tests.utils import DummyMailHostMixin - -def setupDummyMailHost(self): - """Replace Original Mail Host by Dummy Mail Host in a non-persistent way - and reset the list of already sent messages. - - Copied & pasted from ERP5TypeTestCaseMixin._setUpDummyMailHost - """ - mailhost = self.getPortalObject().MailHost - cls = mailhost.__class__ - if not issubclass(cls, DummyMailHostMixin): - cls.__bases__ = (DummyMailHostMixin,) + cls.__bases__ - pmc_init_of(cls) - mailhost.reset() - return True diff --git a/bt5/erp5_ui_test_core/ExtensionTemplateItem/portal_components/extension.erp5.MailHostUtils.xml b/bt5/erp5_ui_test_core/ExtensionTemplateItem/portal_components/extension.erp5.MailHostUtils.xml deleted file mode 100644 index ac59c855e5..0000000000 --- a/bt5/erp5_ui_test_core/ExtensionTemplateItem/portal_components/extension.erp5.MailHostUtils.xml +++ /dev/null @@ -1,123 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Extension 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>MailHostUtils</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>extension.erp5.MailHostUtils</string> </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Extension 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.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <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> - </tuple> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/ExtensionTemplateItem/portal_components/extension.erp5.SeleniumTestUtils.py b/bt5/erp5_ui_test_core/ExtensionTemplateItem/portal_components/extension.erp5.SeleniumTestUtils.py deleted file mode 100644 index 5d96c082f0..0000000000 --- a/bt5/erp5_ui_test_core/ExtensionTemplateItem/portal_components/extension.erp5.SeleniumTestUtils.py +++ /dev/null @@ -1,42 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# Copyright (c) 2002-2009 Nexedi SA and Contributors. All Rights Reserved. -# Ivan Tyagov <ivan@nexedi.com> -# -# 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. -# -############################################################################## - -import os -from Products.ERP5 import tests - -def Zuite_getTestDocumentsHome(self): - """ - Get test documents folder as string. - """ - return os.path.join( - os.path.abspath( - os.path.dirname(tests.__file__)),'test_data') - - - diff --git a/bt5/erp5_ui_test_core/ExtensionTemplateItem/portal_components/extension.erp5.SeleniumTestUtils.xml b/bt5/erp5_ui_test_core/ExtensionTemplateItem/portal_components/extension.erp5.SeleniumTestUtils.xml deleted file mode 100644 index 78d4ac31e0..0000000000 --- a/bt5/erp5_ui_test_core/ExtensionTemplateItem/portal_components/extension.erp5.SeleniumTestUtils.xml +++ /dev/null @@ -1,84 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Extension Component" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>default_reference</string> </key> - <value> <string>SeleniumTestUtils</string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>extension.erp5.SeleniumTestUtils</string> </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Extension Component</string> </value> - </item> - <item> - <key> <string>sid</string> </key> - <value> - <none/> - </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">AAAAAAAAAAI=</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> - <item> - <key> <string>component_validation_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> - </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="3" aka="AAAAAAAAAAM="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <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> - </tuple> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core.xml deleted file mode 100644 index 9073b9d4f6..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Folder" module="OFS.Folder"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_objects</string> </key> - <value> - <tuple/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>erp5_ui_test_core</string> </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string></string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Base_clearCache.py b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Base_clearCache.py deleted file mode 100644 index ec5c3d3918..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Base_clearCache.py +++ /dev/null @@ -1,3 +0,0 @@ -"""User the cache tool in order to clear the cache""" -context.portal_caches.clearAllCache() -return "Cleared." diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Base_clearCache.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Base_clearCache.xml deleted file mode 100644 index cf79dedc77..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Base_clearCache.xml +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="PythonScript" module="Products.PythonScripts.PythonScript"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>Script_magic</string> </key> - <value> <int>3</int> </value> - </item> - <item> - <key> <string>_bind_names</string> </key> - <value> - <object> - <klass> - <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/> - </klass> - <tuple/> - <state> - <dictionary> - <item> - <key> <string>_asgns</string> </key> - <value> - <dictionary> - <item> - <key> <string>name_container</string> </key> - <value> <string>container</string> </value> - </item> - <item> - <key> <string>name_context</string> </key> - <value> <string>context</string> </value> - </item> - <item> - <key> <string>name_m_self</string> </key> - <value> <string>script</string> </value> - </item> - <item> - <key> <string>name_subpath</string> </key> - <value> <string>traverse_subpath</string> </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </state> - </object> - </value> - </item> - <item> - <key> <string>_params</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>Base_clearCache</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Base_setLanguageWithoutRedirect.py b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Base_setLanguageWithoutRedirect.py deleted file mode 100644 index 01895d3df2..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Base_setLanguageWithoutRedirect.py +++ /dev/null @@ -1,7 +0,0 @@ -context.Base_doLanguage(select_language) -# Don't redirect. Base_doLanguage tries to redirect to the same page -# and then selenium main page is loaded again in the bottom frame of -# the original selenium main page and one more selenium test starts -# running in another frame. This happens recursively. -context.REQUEST.RESPONSE.setStatus(200) -return 'done' diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Base_setLanguageWithoutRedirect.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Base_setLanguageWithoutRedirect.xml deleted file mode 100644 index 8e8536ea69..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Base_setLanguageWithoutRedirect.xml +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="PythonScript" module="Products.PythonScripts.PythonScript"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>Script_magic</string> </key> - <value> <int>3</int> </value> - </item> - <item> - <key> <string>_bind_names</string> </key> - <value> - <object> - <klass> - <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/> - </klass> - <tuple/> - <state> - <dictionary> - <item> - <key> <string>_asgns</string> </key> - <value> - <dictionary> - <item> - <key> <string>name_container</string> </key> - <value> <string>container</string> </value> - </item> - <item> - <key> <string>name_context</string> </key> - <value> <string>context</string> </value> - </item> - <item> - <key> <string>name_m_self</string> </key> - <value> <string>script</string> </value> - </item> - <item> - <key> <string>name_subpath</string> </key> - <value> <string>traverse_subpath</string> </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </state> - </object> - </value> - </item> - <item> - <key> <string>_params</string> </key> - <value> <string>select_language</string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>Base_setLanguageWithoutRedirect</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/ERP5Site_setupDummyMailHost.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/ERP5Site_setupDummyMailHost.xml deleted file mode 100644 index 6b3bed816c..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/ERP5Site_setupDummyMailHost.xml +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="ExternalMethod" module="Products.ExternalMethod.ExternalMethod"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_function</string> </key> - <value> <string>setupDummyMailHost</string> </value> - </item> - <item> - <key> <string>_module</string> </key> - <value> <string>MailHostUtils</string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>ERP5Site_setupDummyMailHost</string> </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string></string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/ErrorLog_reportErrorList.py b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/ErrorLog_reportErrorList.py deleted file mode 100644 index b2e72db624..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/ErrorLog_reportErrorList.py +++ /dev/null @@ -1,8 +0,0 @@ -for error_entry in context.error_log.getLogEntries(): - for key in error_entry: - if key not in ["tb_text", "tb_html", 'req_html']: - print '%s : %s' % (key, error_entry[key]) - print '------------- Traceback ------------' - print error_entry["tb_text"] - print "="*79 -return printed diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/ErrorLog_reportErrorList.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/ErrorLog_reportErrorList.xml deleted file mode 100644 index 4af0c7baeb..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/ErrorLog_reportErrorList.xml +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="PythonScript" module="Products.PythonScripts.PythonScript"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>Script_magic</string> </key> - <value> <int>3</int> </value> - </item> - <item> - <key> <string>_bind_names</string> </key> - <value> - <object> - <klass> - <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/> - </klass> - <tuple/> - <state> - <dictionary> - <item> - <key> <string>_asgns</string> </key> - <value> - <dictionary> - <item> - <key> <string>name_container</string> </key> - <value> <string>container</string> </value> - </item> - <item> - <key> <string>name_context</string> </key> - <value> <string>context</string> </value> - </item> - <item> - <key> <string>name_m_self</string> </key> - <value> <string>script</string> </value> - </item> - <item> - <key> <string>name_subpath</string> </key> - <value> <string>traverse_subpath</string> </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </state> - </object> - </value> - </item> - <item> - <key> <string>_params</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>ErrorLog_reportErrorList</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/MailHost_reportMessageList.py b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/MailHost_reportMessageList.py deleted file mode 100644 index 913a975e91..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/MailHost_reportMessageList.py +++ /dev/null @@ -1,29 +0,0 @@ -""" - Get the Message List from DummyMailHost. - - This is used by functional tests to get all - emails sent by the instance. This will prevent - the instance spam mailing lists during the - Functional Tests. -""" -if getattr(context.MailHost, "getMessageList", None) is None: - return "ERROR: MailHost is not a DummyMailHost" - -message_list = context.MailHost.getMessageList() -for mail in message_list: - for part in mail: - print part - print "="*79 - print "" - -print "Total messages: %s" %len(message_list) - -# If messages "looks like html", zope will set content type to text/html, -# and the assertTextPresent from selenium will be applied after the emails -# are interpreted as html. -# For example, the email "Name <email@example.com>" would be interpreted as -# an html entity and we cannot use assertTextPresent on it. -# To prevent that, we force content type to text. -container.REQUEST.RESPONSE.setHeader('Content-Type', 'text/plain;charset=utf-8') - -return printed diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/MailHost_reportMessageList.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/MailHost_reportMessageList.xml deleted file mode 100644 index d042e82ad6..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/MailHost_reportMessageList.xml +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="PythonScript" module="Products.PythonScripts.PythonScript"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>Script_magic</string> </key> - <value> <int>3</int> </value> - </item> - <item> - <key> <string>_bind_names</string> </key> - <value> - <object> - <klass> - <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/> - </klass> - <tuple/> - <state> - <dictionary> - <item> - <key> <string>_asgns</string> </key> - <value> - <dictionary> - <item> - <key> <string>name_container</string> </key> - <value> <string>container</string> </value> - </item> - <item> - <key> <string>name_context</string> </key> - <value> <string>context</string> </value> - </item> - <item> - <key> <string>name_m_self</string> </key> - <value> <string>script</string> </value> - </item> - <item> - <key> <string>name_subpath</string> </key> - <value> <string>traverse_subpath</string> </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </state> - </object> - </value> - </item> - <item> - <key> <string>_params</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>MailHost_reportMessageList</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_cleanUpTestResults.py b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_cleanUpTestResults.py deleted file mode 100644 index f9f410e7c0..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_cleanUpTestResults.py +++ /dev/null @@ -1,10 +0,0 @@ -portal_tests = container.portal_tests -if test_zuite_relative_url is not None: - # we care for a specific test zuite - portal_tests = portal_tests.restrictedTraverse(test_zuite_relative_url,\ - portal_tests) -# remove test results from previous test runs -portal_tests.manage_delObjects([x.getId() \ - for x in portal_tests.objectValues('Zuite Results')]) -print "OK" -return printed diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_cleanUpTestResults.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_cleanUpTestResults.xml deleted file mode 100644 index e5046f06b1..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_cleanUpTestResults.xml +++ /dev/null @@ -1,66 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="PythonScript" module="Products.PythonScripts.PythonScript"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>Script_magic</string> </key> - <value> <int>3</int> </value> - </item> - <item> - <key> <string>_bind_names</string> </key> - <value> - <object> - <klass> - <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/> - </klass> - <tuple/> - <state> - <dictionary> - <item> - <key> <string>_asgns</string> </key> - <value> - <dictionary> - <item> - <key> <string>name_container</string> </key> - <value> <string>container</string> </value> - </item> - <item> - <key> <string>name_context</string> </key> - <value> <string>context</string> </value> - </item> - <item> - <key> <string>name_m_self</string> </key> - <value> <string>script</string> </value> - </item> - <item> - <key> <string>name_subpath</string> </key> - <value> <string>traverse_subpath</string> </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </state> - </object> - </value> - </item> - <item> - <key> <string>_params</string> </key> - <value> <string>test_zuite_relative_url=None</string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>TestTool_cleanUpTestResults</string> </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Clean up test results from previous test runs</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_getLatestReportId.py b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_getLatestReportId.py deleted file mode 100644 index f1d649fab7..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_getLatestReportId.py +++ /dev/null @@ -1,13 +0,0 @@ -portal_tests = container.portal_tests -if test_zuite_relative_url is not None: - # we care for a specific test zuite - portal_tests = portal_tests.restrictedTraverse(test_zuite_relative_url, - portal_tests) - -results = portal_tests.objectValues('Zuite Results') -#results.sort() - -if not results: - return None - -return results[len(results) - 1].getId() diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_getLatestReportId.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_getLatestReportId.xml deleted file mode 100644 index 977caa225f..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_getLatestReportId.xml +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="PythonScript" module="Products.PythonScripts.PythonScript"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>Script_magic</string> </key> - <value> <int>3</int> </value> - </item> - <item> - <key> <string>_bind_names</string> </key> - <value> - <object> - <klass> - <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/> - </klass> - <tuple/> - <state> - <dictionary> - <item> - <key> <string>_asgns</string> </key> - <value> - <dictionary> - <item> - <key> <string>name_container</string> </key> - <value> <string>container</string> </value> - </item> - <item> - <key> <string>name_context</string> </key> - <value> <string>context</string> </value> - </item> - <item> - <key> <string>name_m_self</string> </key> - <value> <string>script</string> </value> - </item> - <item> - <key> <string>name_subpath</string> </key> - <value> <string>traverse_subpath</string> </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </state> - </object> - </value> - </item> - <item> - <key> <string>_params</string> </key> - <value> <string>test_zuite_relative_url=None</string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>TestTool_getLatestReportId</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_getResults.py b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_getResults.py deleted file mode 100644 index 66c473b30f..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_getResults.py +++ /dev/null @@ -1,17 +0,0 @@ -portal_tests = container.portal_tests -if test_zuite_relative_url is not None: - # we care for a specific test zuite - portal_tests = portal_tests.restrictedTraverse(test_zuite_relative_url, - portal_tests) - -results = portal_tests.objectValues('Zuite Results') -if not results: - return None - -# Selenium results tests are just named "testTable.1", "testTable.2" and so forth. -# We replace this by the path of the test, this way we can easily see which test has failed. -html = results[len(results) - 1].index_html() -for idx, test_case in enumerate(portal_tests.listTestCases()): - html = html.replace('>testTable.%s</a>' % (idx + 1), '>%s</a>' % test_case['path']) - -return html diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_getResults.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_getResults.xml deleted file mode 100644 index 8659f07178..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_getResults.xml +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="PythonScript" module="Products.PythonScripts.PythonScript"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>Script_magic</string> </key> - <value> <int>3</int> </value> - </item> - <item> - <key> <string>_bind_names</string> </key> - <value> - <object> - <klass> - <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/> - </klass> - <tuple/> - <state> - <dictionary> - <item> - <key> <string>_asgns</string> </key> - <value> - <dictionary> - <item> - <key> <string>name_container</string> </key> - <value> <string>container</string> </value> - </item> - <item> - <key> <string>name_context</string> </key> - <value> <string>context</string> </value> - </item> - <item> - <key> <string>name_m_self</string> </key> - <value> <string>script</string> </value> - </item> - <item> - <key> <string>name_subpath</string> </key> - <value> <string>traverse_subpath</string> </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </state> - </object> - </value> - </item> - <item> - <key> <string>_params</string> </key> - <value> <string>test_zuite_relative_url=None</string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>TestTool_getResults</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_getSkinName.py b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_getSkinName.py deleted file mode 100644 index de90fdf5ec..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_getSkinName.py +++ /dev/null @@ -1,3 +0,0 @@ -portal = context.getPortalObject() -return portal.getSkinNameFromRequest(context.REQUEST) or \ - portal.portal_skins.getDefaultSkin() diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_getSkinName.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_getSkinName.xml deleted file mode 100644 index e987b1991f..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_getSkinName.xml +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="PythonScript" module="Products.PythonScripts.PythonScript"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>Script_magic</string> </key> - <value> <int>3</int> </value> - </item> - <item> - <key> <string>_bind_names</string> </key> - <value> - <object> - <klass> - <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/> - </klass> - <tuple/> - <state> - <dictionary> - <item> - <key> <string>_asgns</string> </key> - <value> - <dictionary> - <item> - <key> <string>name_container</string> </key> - <value> <string>container</string> </value> - </item> - <item> - <key> <string>name_context</string> </key> - <value> <string>context</string> </value> - </item> - <item> - <key> <string>name_m_self</string> </key> - <value> <string>script</string> </value> - </item> - <item> - <key> <string>name_subpath</string> </key> - <value> <string>traverse_subpath</string> </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </state> - </object> - </value> - </item> - <item> - <key> <string>_params</string> </key> - <value> <string>skin_name=\'\'</string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>TestTool_getSkinName</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_reportResult.py b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_reportResult.py deleted file mode 100644 index 8a5c1847c0..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_reportResult.py +++ /dev/null @@ -1,39 +0,0 @@ -# This script is called when you invoke a browser with "?auto=true" to portal_tests. -# FIXME: this script should send the result by email. - -get = request.form.get - -# Summary. -result = ['Report on Functional Tests', ''] -result.append('Passed: %s' % (get('result').lower() == 'passed' and 'Yes' or 'No')) -result.append('Total Time: %s' % get('totalTime')) -result.append('Passed Tests: %s' % get('numTestPasses')) -result.append('Failed Tests: %s' % get('numTestFailures')) -result.append('Passed Commands: %s' % get('numCommandPasses')) -result.append('Failed Commands: %s' % get('numCommandFailures')) -result.append('Commands with Errors: %s' % get('numCommandErrors')) -result.append('') - -# Details. -table_list = [] -for key in request.form.keys(): - if key.startswith('testTable'): - prefix, num = key.split('.') - table_list.append((prefix, int(num))) -table_list.sort() -for table in table_list: - key = '%s.%d' % table - html = get(key) - - # Ugly, but get the title somehow. - i = html.index('<td') - start = html.index('>', i) + 1 - end = html.index('<', start) - title = html[start:end] - - # Count passes and failures. - num_passed_commands = html.count('bgcolor="#cfffcf"', end) - num_failed_commands = html.count('bgcolor="#ffcfcf"', end) - result.append('%s: %d passed, %d failed' % (title, num_passed_commands, num_failed_commands)) - -return '\n'.join(result) diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_reportResult.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_reportResult.xml deleted file mode 100644 index 8c025f5d48..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_reportResult.xml +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="PythonScript" module="Products.PythonScripts.PythonScript"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>Script_magic</string> </key> - <value> <int>3</int> </value> - </item> - <item> - <key> <string>_bind_names</string> </key> - <value> - <object> - <klass> - <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/> - </klass> - <tuple/> - <state> - <dictionary> - <item> - <key> <string>_asgns</string> </key> - <value> - <dictionary> - <item> - <key> <string>name_container</string> </key> - <value> <string>container</string> </value> - </item> - <item> - <key> <string>name_context</string> </key> - <value> <string>context</string> </value> - </item> - <item> - <key> <string>name_m_self</string> </key> - <value> <string>script</string> </value> - </item> - <item> - <key> <string>name_subpath</string> </key> - <value> <string>traverse_subpath</string> </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </state> - </object> - </value> - </item> - <item> - <key> <string>_params</string> </key> - <value> <string>request</string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>TestTool_reportResult</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_setSkinNameCookie.py b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_setSkinNameCookie.py deleted file mode 100644 index c528c5b4d0..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_setSkinNameCookie.py +++ /dev/null @@ -1,5 +0,0 @@ -if skin_name: - context.REQUEST.RESPONSE.setCookie('portal_skin', skin_name) -else: - context.REQUEST.RESPONSE.expireCookie('portal_skin') -return context.REQUEST.RESPONSE.redirect(context.absolute_url()) diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_setSkinNameCookie.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_setSkinNameCookie.xml deleted file mode 100644 index 2a10faa047..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/TestTool_setSkinNameCookie.xml +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="PythonScript" module="Products.PythonScripts.PythonScript"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>Script_magic</string> </key> - <value> <int>3</int> </value> - </item> - <item> - <key> <string>_bind_names</string> </key> - <value> - <object> - <klass> - <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/> - </klass> - <tuple/> - <state> - <dictionary> - <item> - <key> <string>_asgns</string> </key> - <value> - <dictionary> - <item> - <key> <string>name_container</string> </key> - <value> <string>container</string> </value> - </item> - <item> - <key> <string>name_context</string> </key> - <value> <string>context</string> </value> - </item> - <item> - <key> <string>name_m_self</string> </key> - <value> <string>script</string> </value> - </item> - <item> - <key> <string>name_subpath</string> </key> - <value> <string>traverse_subpath</string> </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </state> - </object> - </value> - </item> - <item> - <key> <string>_params</string> </key> - <value> <string>skin_name=\'\'</string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>TestTool_setSkinNameCookie</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_CommonTemplate.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_CommonTemplate.xml deleted file mode 100644 index b4dbd40615..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_CommonTemplate.xml +++ /dev/null @@ -1,79 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_bind_names</string> </key> - <value> - <object> - <klass> - <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/> - </klass> - <tuple/> - <state> - <dictionary> - <item> - <key> <string>_asgns</string> </key> - <value> - <dictionary> - <item> - <key> <string>name_subpath</string> </key> - <value> <string>traverse_subpath</string> </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </state> - </object> - </value> - </item> - <item> - <key> <string>_local_properties</string> </key> - <value> - <tuple> - <dictionary> - <item> - <key> <string>id</string> </key> - <value> <string>description</string> </value> - </item> - <item> - <key> <string>type</string> </key> - <value> <string>text</string> </value> - </item> - </dictionary> - </tuple> - </value> - </item> - <item> - <key> <string>content_type</string> </key> - <value> <string>text/html</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> <string>Common Template for PTZuite, it will reuse parts of the Listbox Zuite</string> </value> - </item> - <item> - <key> <string>expand</string> </key> - <value> <int>0</int> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>Zuite_CommonTemplate</string> </value> - </item> - <item> - <key> <string>output_encoding</string> </key> - <value> <string>utf-8</string> </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <unicode>Common Template for All Zuite</unicode> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_CommonTemplate.zpt b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_CommonTemplate.zpt deleted file mode 100644 index 18bb1b9eff..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_CommonTemplate.zpt +++ /dev/null @@ -1,39 +0,0 @@ -<tal:block xmlns:tal="http://xml.zope.org/namespaces/tal" - xmlns:metal="http://xml.zope.org/namespaces/metal"> - <tal:block metal:define-macro="init"> - <tr> - <td>setTimeout</td> - <td>90000</td> - <td></td> - </tr> - <tr> - <td>store</td> - <td tal:content="python:here.getPortalObject().absolute_url()">http://example.com/erp5</td> - <td>base_url</td> - </tr> - <tr> <!-- reset language to en, in case previous test failed and left the language changed --> - <td>open</td> - <td>${base_url}/Base_setLanguageWithoutRedirect?select_language=en</td> - <td></td> - </tr> - </tal:block> - -<tal:block metal:define-macro="wait_for_activities"> - <!-- Wait for activities to finish --> - <tr> - <td>openAndWait</td> - <td>${base_url}/Zuite_waitForActivities</td> - <td></td> - </tr> - <tr> - <td>verifyTextPresent</td> - <td>Done.</td> - <td></td> - </tr> -</tal:block> - -<tal:block metal:define-macro="expected_failure_for_anonymous_selection"> - <tal:block tal:condition="here/portal_selections/isAnonymous"> (expected failure)</tal:block> -</tal:block> - -</tal:block> \ No newline at end of file diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_addTest.py b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_addTest.py deleted file mode 100644 index 7bf6b94e8e..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_addTest.py +++ /dev/null @@ -1,21 +0,0 @@ -""" - Include a page template contains a into a Zuite -""" -if REQUEST: - raise RuntimeError("You can not call this script from the URL") - -assert context.getPortalType() == "Test Tool", "bad context" - -if test_id is None or test_id == '': - test_id = ''.join(list(filter(lambda a: a not in ["'",'_', '-','.',' ','~', ':', '/', '?', '#', '[', ']', '@', '!', '$', '&', '(', ')', '*','+',';','='], title))) - -if test_id not in context.objectIds(): - factory = context.manage_addProduct['PageTemplates'] - factory.manage_addPageTemplate(test_id, title=title, text=text, REQUEST=None) - test = getattr(context, test_id, None) -else: - test = getattr(context, test_id, None) - context.Zuite_editZPT(test, text) - test.setTitle(text) - -return test diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_addTest.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_addTest.xml deleted file mode 100644 index 6b9f79b5a1..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_addTest.xml +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="PythonScript" module="Products.PythonScripts.PythonScript"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>Script_magic</string> </key> - <value> <int>3</int> </value> - </item> - <item> - <key> <string>_bind_names</string> </key> - <value> - <object> - <klass> - <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/> - </klass> - <tuple/> - <state> - <dictionary> - <item> - <key> <string>_asgns</string> </key> - <value> - <dictionary> - <item> - <key> <string>name_container</string> </key> - <value> <string>container</string> </value> - </item> - <item> - <key> <string>name_context</string> </key> - <value> <string>context</string> </value> - </item> - <item> - <key> <string>name_m_self</string> </key> - <value> <string>script</string> </value> - </item> - <item> - <key> <string>name_subpath</string> </key> - <value> <string>traverse_subpath</string> </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </state> - </object> - </value> - </item> - <item> - <key> <string>_params</string> </key> - <value> <string>test_id, title, text, REQUEST=None</string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>Zuite_addTest</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_addZuite.py b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_addZuite.py deleted file mode 100644 index 5f28be10db..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_addZuite.py +++ /dev/null @@ -1,21 +0,0 @@ -""" - Create a zuite or return an existing one after remove his contents. -""" -assert context.getPortalType() == "Test Tool", "bad context" -if REQUEST: - raise RuntimeError("You can not call this script from the URL") - -if zuite_id is None: - raise ValueError("Zuite_id cannot be None!") - -if zuite_id not in context.objectIds(): - factory = context.portal_tests.manage_addProduct['Zelenium'] - factory.manage_addZuite(id=zuite_id) - -zuite = getattr(context.portal_tests, zuite_id) -if zuite.getMetaType() != "ERP5 Test Tool": - raise ValueError("Zuite is not a ERP5 Test Tool") - -zuite.manage_delObjects(zuite.objectIds()) - -return zuite diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_addZuite.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_addZuite.xml deleted file mode 100644 index 3a96feb5c2..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_addZuite.xml +++ /dev/null @@ -1,68 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="PythonScript" module="Products.PythonScripts.PythonScript"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>Script_magic</string> </key> - <value> <int>3</int> </value> - </item> - <item> - <key> <string>_bind_names</string> </key> - <value> - <object> - <klass> - <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/> - </klass> - <tuple/> - <state> - <dictionary> - <item> - <key> <string>_asgns</string> </key> - <value> - <dictionary> - <item> - <key> <string>name_container</string> </key> - <value> <string>container</string> </value> - </item> - <item> - <key> <string>name_context</string> </key> - <value> <string>context</string> </value> - </item> - <item> - <key> <string>name_m_self</string> </key> - <value> <string>script</string> </value> - </item> - <item> - <key> <string>name_subpath</string> </key> - <value> <string>traverse_subpath</string> </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </state> - </object> - </value> - </item> - <item> - <key> <string>_params</string> </key> - <value> <string>zuite_id, REQUEST=None</string> </value> - </item> - <item> - <key> <string>guard</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>Zuite_addZuite</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_createAndLaunchSeleniumTest.py b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_createAndLaunchSeleniumTest.py deleted file mode 100644 index d7b575cb28..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_createAndLaunchSeleniumTest.py +++ /dev/null @@ -1,11 +0,0 @@ -""" - test_list is composed by [(full_test_html , title), ] - -""" - -zuite = context.getPortalObject().portal_tests.Zuite_addZuite(zuite_id) - -for text, title in test_list: - zuite.Zuite_addTest(None, title, text) - -return zuite.Base_redirect("core/TestRunner.html?auto=true&test=..%2Ftest_suite_html&resultsUrl=..%2FpostResults") diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_createAndLaunchSeleniumTest.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_createAndLaunchSeleniumTest.xml deleted file mode 100644 index 65461b810f..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_createAndLaunchSeleniumTest.xml +++ /dev/null @@ -1,74 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="PythonScript" module="Products.PythonScripts.PythonScript"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>Script_magic</string> </key> - <value> <int>3</int> </value> - </item> - <item> - <key> <string>_bind_names</string> </key> - <value> - <object> - <klass> - <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/> - </klass> - <tuple/> - <state> - <dictionary> - <item> - <key> <string>_asgns</string> </key> - <value> - <dictionary> - <item> - <key> <string>name_container</string> </key> - <value> <string>container</string> </value> - </item> - <item> - <key> <string>name_context</string> </key> - <value> <string>context</string> </value> - </item> - <item> - <key> <string>name_m_self</string> </key> - <value> <string>script</string> </value> - </item> - <item> - <key> <string>name_subpath</string> </key> - <value> <string>traverse_subpath</string> </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </state> - </object> - </value> - </item> - <item> - <key> <string>_params</string> </key> - <value> <string>test_list, zuite_id</string> </value> - </item> - <item> - <key> <string>_proxy_roles</string> </key> - <value> - <tuple> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>Zuite_createAndLaunchSeleniumTest</string> </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Display Selenium Test</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_editZPT.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_editZPT.xml deleted file mode 100644 index 6bc4deca47..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_editZPT.xml +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="ExternalMethod" module="Products.ExternalMethod.ExternalMethod"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_function</string> </key> - <value> <string>editZPT</string> </value> - </item> - <item> - <key> <string>_module</string> </key> - <value> <string>ERP5Zuite</string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>Zuite_editZPT</string> </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Edit Page Template</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_generateFilename.py b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_generateFilename.py deleted file mode 100644 index 24c7c5e6e8..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_generateFilename.py +++ /dev/null @@ -1,14 +0,0 @@ -request = context.REQUEST -now = DateTime() -expire_timeout_days = 1 -session_id = request.get('session_id', None) -if session_id is None or not session_id.startswith("erp5zuite"): - ## first call so generate session_id and send back via cookie - session_id = 'erp5zuite_' + context.REQUEST.other['AUTHENTICATED_USER'].getIdOrUserName() - request.RESPONSE.setCookie('erp5_session_id', session_id, expires=(now +expire_timeout_days).fCommon(), path='/') - -session = context.portal_sessions[session_id] -if not session.has_key('tempfolder') or session['tempfolder'] == '': - session['tempfolder'] = context.Zuite_createTempFolder() + '/' - -return session['tempfolder'] + str(context.portal_ids.generateNewId(id_generator='zuite', id_group=context.getId(), default=1)) + '.png' diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_generateFilename.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_generateFilename.xml deleted file mode 100644 index 73fecdb6f0..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_generateFilename.xml +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="PythonScript" module="Products.PythonScripts.PythonScript"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>Script_magic</string> </key> - <value> <int>3</int> </value> - </item> - <item> - <key> <string>_bind_names</string> </key> - <value> - <object> - <klass> - <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/> - </klass> - <tuple/> - <state> - <dictionary> - <item> - <key> <string>_asgns</string> </key> - <value> - <dictionary> - <item> - <key> <string>name_container</string> </key> - <value> <string>container</string> </value> - </item> - <item> - <key> <string>name_context</string> </key> - <value> <string>context</string> </value> - </item> - <item> - <key> <string>name_m_self</string> </key> - <value> <string>script</string> </value> - </item> - <item> - <key> <string>name_subpath</string> </key> - <value> <string>traverse_subpath</string> </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </state> - </object> - </value> - </item> - <item> - <key> <string>_params</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>Zuite_generateFilename</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_getFilenameLocation.py b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_getFilenameLocation.py deleted file mode 100644 index 7dd71400cb..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_getFilenameLocation.py +++ /dev/null @@ -1,2 +0,0 @@ -test_documents_home = context.Zuite_getTestDocumentsHome() -return '%s/%s' %(test_documents_home, filename) diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_getFilenameLocation.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_getFilenameLocation.xml deleted file mode 100644 index 7e169e6a58..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_getFilenameLocation.xml +++ /dev/null @@ -1,70 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="PythonScript" module="Products.PythonScripts.PythonScript"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>Script_magic</string> </key> - <value> <int>3</int> </value> - </item> - <item> - <key> <string>_bind_names</string> </key> - <value> - <object> - <klass> - <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/> - </klass> - <tuple/> - <state> - <dictionary> - <item> - <key> <string>_asgns</string> </key> - <value> - <dictionary> - <item> - <key> <string>name_container</string> </key> - <value> <string>container</string> </value> - </item> - <item> - <key> <string>name_context</string> </key> - <value> <string>context</string> </value> - </item> - <item> - <key> <string>name_m_self</string> </key> - <value> <string>script</string> </value> - </item> - <item> - <key> <string>name_subpath</string> </key> - <value> <string>traverse_subpath</string> </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </state> - </object> - </value> - </item> - <item> - <key> <string>_params</string> </key> - <value> <string>filename</string> </value> - </item> - <item> - <key> <string>_proxy_roles</string> </key> - <value> - <tuple> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>Zuite_getFilenameLocation</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_getObjectUid.py b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_getObjectUid.py deleted file mode 100644 index 4424ad46c4..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_getObjectUid.py +++ /dev/null @@ -1,4 +0,0 @@ -""" - Get object's uid. -""" -return context.portal_catalog.getResultValue(**kw).getUid() diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_getObjectUid.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_getObjectUid.xml deleted file mode 100644 index cdc219d55d..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_getObjectUid.xml +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="PythonScript" module="Products.PythonScripts.PythonScript"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>Script_magic</string> </key> - <value> <int>3</int> </value> - </item> - <item> - <key> <string>_bind_names</string> </key> - <value> - <object> - <klass> - <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/> - </klass> - <tuple/> - <state> - <dictionary> - <item> - <key> <string>_asgns</string> </key> - <value> - <dictionary> - <item> - <key> <string>name_container</string> </key> - <value> <string>container</string> </value> - </item> - <item> - <key> <string>name_context</string> </key> - <value> <string>context</string> </value> - </item> - <item> - <key> <string>name_m_self</string> </key> - <value> <string>script</string> </value> - </item> - <item> - <key> <string>name_subpath</string> </key> - <value> <string>traverse_subpath</string> </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </state> - </object> - </value> - </item> - <item> - <key> <string>_params</string> </key> - <value> <string>**kw</string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>Zuite_getObjectUid</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_getTestDocumentsHome.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_getTestDocumentsHome.xml deleted file mode 100644 index 575d795868..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_getTestDocumentsHome.xml +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="ExternalMethod" module="Products.ExternalMethod.ExternalMethod"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_function</string> </key> - <value> <string>Zuite_getTestDocumentsHome</string> </value> - </item> - <item> - <key> <string>_module</string> </key> - <value> <string>SeleniumTestUtils</string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>Zuite_getTestDocumentsHome</string> </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string></string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_isReportGenerated.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_isReportGenerated.xml deleted file mode 100644 index ad21402d3b..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_isReportGenerated.xml +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="ExternalMethod" module="Products.ExternalMethod.ExternalMethod"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_function</string> </key> - <value> <string>isReportGenerated</string> </value> - </item> - <item> - <key> <string>_module</string> </key> - <value> <string>ERP5Zuite</string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>Zuite_isReportGenerated</string> </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Zuite_isReportGenerated</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_prepareReportDirectory.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_prepareReportDirectory.xml deleted file mode 100644 index c9fe46a6b6..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_prepareReportDirectory.xml +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="ExternalMethod" module="Products.ExternalMethod.ExternalMethod"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_function</string> </key> - <value> <string>prepareReportDirectory</string> </value> - </item> - <item> - <key> <string>_module</string> </key> - <value> <string>ERP5Zuite</string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>Zuite_prepareReportDirectory</string> </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Zuite_prepareReportDirectory</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_runSeleniumTest.py b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_runSeleniumTest.py deleted file mode 100644 index c644c04b4a..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_runSeleniumTest.py +++ /dev/null @@ -1,18 +0,0 @@ -""" - Generate a Zuite (if necessary), create/update the test and redirect to the selenium test created/updated - url, web_page or web_page_reference must be set for it to work (or the context should be the Web Page in question) -""" -test_list = [] -count = 0 -portal = context.getPortalObject() -for url in url_list: - count += 1 - if "http" not in url: - # local content - data = portal.restrictedTraverse(url).TestPage_viewSeleniumTest() - else: - data = context.Zuite_urlRead(url, safe_return=1) - test_list.append((data, '%s %s' % (count, url)),) - -return context.Zuite_createAndLaunchSeleniumTest(test_list=test_list, - zuite_id=zuite_id) diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_runSeleniumTest.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_runSeleniumTest.xml deleted file mode 100644 index f5b9bf30f8..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_runSeleniumTest.xml +++ /dev/null @@ -1,74 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="PythonScript" module="Products.PythonScripts.PythonScript"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>Script_magic</string> </key> - <value> <int>3</int> </value> - </item> - <item> - <key> <string>_bind_names</string> </key> - <value> - <object> - <klass> - <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/> - </klass> - <tuple/> - <state> - <dictionary> - <item> - <key> <string>_asgns</string> </key> - <value> - <dictionary> - <item> - <key> <string>name_container</string> </key> - <value> <string>container</string> </value> - </item> - <item> - <key> <string>name_context</string> </key> - <value> <string>context</string> </value> - </item> - <item> - <key> <string>name_m_self</string> </key> - <value> <string>script</string> </value> - </item> - <item> - <key> <string>name_subpath</string> </key> - <value> <string>traverse_subpath</string> </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </state> - </object> - </value> - </item> - <item> - <key> <string>_params</string> </key> - <value> <string>url_list, zuite_id=\'tutorial_zuite\'</string> </value> - </item> - <item> - <key> <string>_proxy_roles</string> </key> - <value> - <tuple> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>Zuite_runSeleniumTest</string> </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Display Selenium Test</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_setPreference.py b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_setPreference.py deleted file mode 100644 index 2fcbf56c93..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_setPreference.py +++ /dev/null @@ -1,20 +0,0 @@ -"""Set subversion working copy list and enable preference. - -This script is called by Products.ERP5Type.tests.runFunctionalTest to set -subversion working copy paths and conversion server address. -It's not meant to be called by zelenium tests directly. -""" - -pref = getattr(context.portal_preferences, "erp5_ui_test_preference", None) -if pref is None: - pref = context.portal_preferences.newContent(id="erp5_ui_test_preference", - portal_type="Preference", - priority=1) - -pref.setPreferredSubversionWorkingCopyList(tuple(working_copy_list.split(','))) -pref.setPreferredHtmlStyleUnsavedFormWarning(False) - -if pref.getPreferenceState() == 'disabled': - pref.enable() - -return 'Set Preference Successfully.' diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_setPreference.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_setPreference.xml deleted file mode 100644 index eb611af52d..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_setPreference.xml +++ /dev/null @@ -1,66 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="PythonScript" module="Products.PythonScripts.PythonScript"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>Script_magic</string> </key> - <value> <int>3</int> </value> - </item> - <item> - <key> <string>_bind_names</string> </key> - <value> - <object> - <klass> - <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/> - </klass> - <tuple/> - <state> - <dictionary> - <item> - <key> <string>_asgns</string> </key> - <value> - <dictionary> - <item> - <key> <string>name_container</string> </key> - <value> <string>container</string> </value> - </item> - <item> - <key> <string>name_context</string> </key> - <value> <string>context</string> </value> - </item> - <item> - <key> <string>name_m_self</string> </key> - <value> <string>script</string> </value> - </item> - <item> - <key> <string>name_subpath</string> </key> - <value> <string>traverse_subpath</string> </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </state> - </object> - </value> - </item> - <item> - <key> <string>_params</string> </key> - <value> <string>working_copy_list</string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>Zuite_setPreference</string> </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Set Test Runner Preferences</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_updateImage.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_updateImage.xml deleted file mode 100644 index 763eaf11ae..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_updateImage.xml +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="ExternalMethod" module="Products.ExternalMethod.ExternalMethod"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_function</string> </key> - <value> <string>UpdateImage</string> </value> - </item> - <item> - <key> <string>_module</string> </key> - <value> <string>ERP5Zuite</string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>Zuite_updateImage</string> </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Zuite_updateImage</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_uploadScreenshot.py b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_uploadScreenshot.py deleted file mode 100644 index 7f5f765765..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_uploadScreenshot.py +++ /dev/null @@ -1,27 +0,0 @@ -""" - Upload a screenshot taken by the test to ERP5 -""" -from Products.ERP5Type.Log import log - -data_uri = context.REQUEST.form.get('data_uri', 'default') - -image_module = getattr(context, "image_module", None) -if image_module is None: - return "erp5_dms is not Installed" - -image = image_module.getPortalObject().WebSection_getDocumentValue( - name=image_reference) - -if image is None or image.getPortalType() != "Image": - # Image is an embedded file or not an image - return "Image: " + str(image_reference) + " not found" - -image.setContentType('image/png') -data_text = data_uri.read() -data = data_text.decode('base64') - -image.edit(data=data, - filename=str(image_reference) + '.png', - content_type = 'image/png') - -context.Zuite_updateImage(image) diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_uploadScreenshot.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_uploadScreenshot.xml deleted file mode 100644 index 865998bb2d..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_uploadScreenshot.xml +++ /dev/null @@ -1,70 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="PythonScript" module="Products.PythonScripts.PythonScript"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>Script_magic</string> </key> - <value> <int>3</int> </value> - </item> - <item> - <key> <string>_bind_names</string> </key> - <value> - <object> - <klass> - <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/> - </klass> - <tuple/> - <state> - <dictionary> - <item> - <key> <string>_asgns</string> </key> - <value> - <dictionary> - <item> - <key> <string>name_container</string> </key> - <value> <string>container</string> </value> - </item> - <item> - <key> <string>name_context</string> </key> - <value> <string>context</string> </value> - </item> - <item> - <key> <string>name_m_self</string> </key> - <value> <string>script</string> </value> - </item> - <item> - <key> <string>name_subpath</string> </key> - <value> <string>traverse_subpath</string> </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </state> - </object> - </value> - </item> - <item> - <key> <string>_params</string> </key> - <value> <string>data_uri, image_reference</string> </value> - </item> - <item> - <key> <string>_proxy_roles</string> </key> - <value> - <tuple> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>Zuite_uploadScreenshot</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_urlRead.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_urlRead.xml deleted file mode 100644 index 466caf5569..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_urlRead.xml +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="ExternalMethod" module="Products.ExternalMethod.ExternalMethod"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_function</string> </key> - <value> <string>urlread</string> </value> - </item> - <item> - <key> <string>_module</string> </key> - <value> <string>ERP5Zuite</string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>Zuite_urlRead</string> </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Fetch content from Url</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_viewZeleniumTestLauncher.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_viewZeleniumTestLauncher.xml deleted file mode 100644 index 1fc61a3c39..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_viewZeleniumTestLauncher.xml +++ /dev/null @@ -1,154 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="ERP5 Form" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_bind_names</string> </key> - <value> - <object> - <klass> - <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/> - </klass> - <tuple/> - <state> - <dictionary> - <item> - <key> <string>_asgns</string> </key> - <value> - <dictionary/> - </value> - </item> - </dictionary> - </state> - </object> - </value> - </item> - <item> - <key> <string>_objects</string> </key> - <value> - <tuple/> - </value> - </item> - <item> - <key> <string>action</string> </key> - <value> <string>Zuite_runSeleniumTest</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>edit_order</string> </key> - <value> - <list/> - </value> - </item> - <item> - <key> <string>encoding</string> </key> - <value> <string>UTF-8</string> </value> - </item> - <item> - <key> <string>enctype</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>group_list</string> </key> - <value> - <list> - <string>left</string> - <string>right</string> - <string>center</string> - <string>bottom</string> - <string>hidden</string> - </list> - </value> - </item> - <item> - <key> <string>groups</string> </key> - <value> - <dictionary> - <item> - <key> <string>bottom</string> </key> - <value> - <list/> - </value> - </item> - <item> - <key> <string>center</string> </key> - <value> - <list> - <string>your_description</string> - <string>your_url_list</string> - <string>your_zuite_id</string> - </list> - </value> - </item> - <item> - <key> <string>hidden</string> </key> - <value> - <list/> - </value> - </item> - <item> - <key> <string>left</string> </key> - <value> - <list/> - </value> - </item> - <item> - <key> <string>right</string> </key> - <value> - <list/> - </value> - </item> - </dictionary> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>Zuite_viewZeleniumTestLauncher</string> </value> - </item> - <item> - <key> <string>method</string> </key> - <value> <string>POST</string> </value> - </item> - <item> - <key> <string>name</string> </key> - <value> <string>Zuite_runZeleniumTestview</string> </value> - </item> - <item> - <key> <string>pt</string> </key> - <value> <string>form_dialog</string> </value> - </item> - <item> - <key> <string>row_length</string> </key> - <value> <int>4</int> </value> - </item> - <item> - <key> <string>stored_encoding</string> </key> - <value> <string>UTF-8</string> </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Run Zelenium Test</string> </value> - </item> - <item> - <key> <string>unicode_mode</string> </key> - <value> <int>0</int> </value> - </item> - <item> - <key> <string>update_action</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>update_action_title</string> </key> - <value> <string></string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_viewZeleniumTestLauncher/your_description.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_viewZeleniumTestLauncher/your_description.xml deleted file mode 100644 index e9f34fde27..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_viewZeleniumTestLauncher/your_description.xml +++ /dev/null @@ -1,260 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="StringField" module="Products.Formulator.StandardFields"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>id</string> </key> - <value> <string>your_description</string> </value> - </item> - <item> - <key> <string>message_values</string> </key> - <value> - <dictionary> - <item> - <key> <string>external_validator_failed</string> </key> - <value> <string>The input failed the external validator.</string> </value> - </item> - <item> - <key> <string>required_not_found</string> </key> - <value> <string>Input is required but no input given.</string> </value> - </item> - <item> - <key> <string>too_long</string> </key> - <value> <string>Too much input was given.</string> </value> - </item> - </dictionary> - </value> - </item> - <item> - <key> <string>overrides</string> </key> - <value> - <dictionary> - <item> - <key> <string>alternate_name</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>css_class</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>default</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>display_maxwidth</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>display_width</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>editable</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>enabled</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>external_validator</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>extra</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>hidden</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>max_length</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>required</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>truncate</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>unicode</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>whitespace_preserve</string> </key> - <value> <string></string> </value> - </item> - </dictionary> - </value> - </item> - <item> - <key> <string>tales</string> </key> - <value> - <dictionary> - <item> - <key> <string>alternate_name</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>css_class</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>default</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>display_maxwidth</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>display_width</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>editable</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>enabled</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>external_validator</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>extra</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>hidden</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>max_length</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>required</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>truncate</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>unicode</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>whitespace_preserve</string> </key> - <value> <string></string> </value> - </item> - </dictionary> - </value> - </item> - <item> - <key> <string>values</string> </key> - <value> - <dictionary> - <item> - <key> <string>alternate_name</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>css_class</string> </key> - <value> <string>noLabel</string> </value> - </item> - <item> - <key> <string>default</string> </key> - <value> <string>Include a URL for a HTML that contains a Selenium Test Code, in case of Test Page use TestPage_getSeleniumTest at the end of URL.</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>display_maxwidth</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>display_width</string> </key> - <value> <int>20</int> </value> - </item> - <item> - <key> <string>editable</string> </key> - <value> <int>0</int> </value> - </item> - <item> - <key> <string>enabled</string> </key> - <value> <int>1</int> </value> - </item> - <item> - <key> <string>external_validator</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>extra</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>hidden</string> </key> - <value> <int>0</int> </value> - </item> - <item> - <key> <string>max_length</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>required</string> </key> - <value> <int>0</int> </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Information</string> </value> - </item> - <item> - <key> <string>truncate</string> </key> - <value> <int>0</int> </value> - </item> - <item> - <key> <string>unicode</string> </key> - <value> <int>0</int> </value> - </item> - <item> - <key> <string>whitespace_preserve</string> </key> - <value> <int>0</int> </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_viewZeleniumTestLauncher/your_url_list.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_viewZeleniumTestLauncher/your_url_list.xml deleted file mode 100644 index 48fde99cd6..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_viewZeleniumTestLauncher/your_url_list.xml +++ /dev/null @@ -1,123 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="ProxyField" module="Products.ERP5Form.ProxyField"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>delegated_list</string> </key> - <value> - <list> - <string>description</string> - <string>height</string> - <string>title</string> - <string>width</string> - </list> - </value> - </item> - <item> - <key> <string>delegated_message_list</string> </key> - <value> - <list> - <string>external_validator_failed</string> - </list> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>your_url_list</string> </value> - </item> - <item> - <key> <string>message_values</string> </key> - <value> - <dictionary> - <item> - <key> <string>external_validator_failed</string> </key> - <value> <string>Input at least one and only ONE of those three fields.</string> </value> - </item> - </dictionary> - </value> - </item> - <item> - <key> <string>overrides</string> </key> - <value> - <dictionary> - <item> - <key> <string>field_id</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>form_id</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>target</string> </key> - <value> <string></string> </value> - </item> - </dictionary> - </value> - </item> - <item> - <key> <string>tales</string> </key> - <value> - <dictionary> - <item> - <key> <string>field_id</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>form_id</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>target</string> </key> - <value> <string></string> </value> - </item> - </dictionary> - </value> - </item> - <item> - <key> <string>values</string> </key> - <value> - <dictionary> - <item> - <key> <string>description</string> </key> - <value> <string>Type the url of the page containing the Zelenium Test. (for external webpages only)</string> </value> - </item> - <item> - <key> <string>display_width</string> </key> - <value> <int>120</int> </value> - </item> - <item> - <key> <string>field_id</string> </key> - <value> <string>my_lines_field</string> </value> - </item> - <item> - <key> <string>form_id</string> </key> - <value> <string>Base_viewFieldLibrary</string> </value> - </item> - <item> - <key> <string>height</string> </key> - <value> <int>10</int> </value> - </item> - <item> - <key> <string>target</string> </key> - <value> <string>Click to edit the target</string> </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>External URLs</string> </value> - </item> - <item> - <key> <string>width</string> </key> - <value> <int>90</int> </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_viewZeleniumTestLauncher/your_zuite_id.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_viewZeleniumTestLauncher/your_zuite_id.xml deleted file mode 100644 index 892510ffa8..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_viewZeleniumTestLauncher/your_zuite_id.xml +++ /dev/null @@ -1,123 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="ProxyField" module="Products.ERP5Form.ProxyField"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>delegated_list</string> </key> - <value> - <list> - <string>default</string> - <string>description</string> - <string>required</string> - <string>title</string> - </list> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>your_zuite_id</string> </value> - </item> - <item> - <key> <string>message_values</string> </key> - <value> - <dictionary> - <item> - <key> <string>external_validator_failed</string> </key> - <value> <string>The input failed the external validator.</string> </value> - </item> - </dictionary> - </value> - </item> - <item> - <key> <string>overrides</string> </key> - <value> - <dictionary> - <item> - <key> <string>field_id</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>form_id</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>target</string> </key> - <value> <string></string> </value> - </item> - </dictionary> - </value> - </item> - <item> - <key> <string>tales</string> </key> - <value> - <dictionary> - <item> - <key> <string>default</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>field_id</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>form_id</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>target</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string></string> </value> - </item> - </dictionary> - </value> - </item> - <item> - <key> <string>values</string> </key> - <value> - <dictionary> - <item> - <key> <string>default</string> </key> - <value> <string>tutorial_zuite</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> <string>Enter the id of the Zuite containing your test.</string> </value> - </item> - <item> - <key> <string>field_id</string> </key> - <value> <string>my_string_field</string> </value> - </item> - <item> - <key> <string>form_id</string> </key> - <value> <string>Base_viewFieldLibrary</string> </value> - </item> - <item> - <key> <string>required</string> </key> - <value> <int>1</int> </value> - </item> - <item> - <key> <string>target</string> </key> - <value> <string>Click to edit the target</string> </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Zuite ID</string> </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_viewZeleniumTestLauncherValidator.py b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_viewZeleniumTestLauncherValidator.py deleted file mode 100644 index e1454ef2c7..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_viewZeleniumTestLauncherValidator.py +++ /dev/null @@ -1,33 +0,0 @@ -web_page_context = context.getPortalType() in ['Test Page', 'Web Page'] - -if web_page_context: - no_web_page = False - form_id = 'view' -else: - no_web_page = not request.has_key('web_page') or request['web_page'] is None or not request['web_page'] - form_id = 'Zuite_viewZeleniumTestLauncher' - -no_reference = not request.has_key('web_page_reference') or request['web_page_reference'] is None or not request['web_page_reference'] -no_url = not request.has_key('url') or request['url'] is None or not request['url'] - -if no_web_page and no_url and no_reference: - if validator: - return 0 - else: - return dict(result = False, form_id = form_id, portal_status_message=context.Base_translateString("External Url (url), ERP5 Web Page Path (web_page) and ERP5 Web Page Reference (web_page_reference): were omitted, one of them must be set.")) -elif not (no_url or no_web_page) or not (no_reference or no_web_page): - if validator: - return 0 - elif web_page_context: - return dict(result=False, - form_id=form_id, - portal_status_message=context.Base_translateString("url, web_page and web_page_reference don't need to be set in Web Page context.")) - else: - return dict(result=False, - form_id=form_id, - portal_status_message=context.Base_translateString("You have to choose between External Url (url), ERP5 Web Page Path (web_page) and ERP5 Web Page Reference (web_page_reference). Only ONE of them must be set.")) - -if validator: - return 1 -else: - return dict(result = True) diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_viewZeleniumTestLauncherValidator.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_viewZeleniumTestLauncherValidator.xml deleted file mode 100644 index 8e3892e6d2..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_viewZeleniumTestLauncherValidator.xml +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="PythonScript" module="Products.PythonScripts.PythonScript"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>Script_magic</string> </key> - <value> <int>3</int> </value> - </item> - <item> - <key> <string>_bind_names</string> </key> - <value> - <object> - <klass> - <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/> - </klass> - <tuple/> - <state> - <dictionary> - <item> - <key> <string>_asgns</string> </key> - <value> - <dictionary> - <item> - <key> <string>name_container</string> </key> - <value> <string>container</string> </value> - </item> - <item> - <key> <string>name_context</string> </key> - <value> <string>context</string> </value> - </item> - <item> - <key> <string>name_m_self</string> </key> - <value> <string>script</string> </value> - </item> - <item> - <key> <string>name_subpath</string> </key> - <value> <string>traverse_subpath</string> </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </state> - </object> - </value> - </item> - <item> - <key> <string>_params</string> </key> - <value> <string>editor, request, validator = True</string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>Zuite_viewZeleniumTestLauncherValidator</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_waitForActivities.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_waitForActivities.xml deleted file mode 100644 index 4a3db25edd..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_waitForActivities.xml +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="ExternalMethod" module="Products.ExternalMethod.ExternalMethod"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_function</string> </key> - <value> <string>waitForActivities</string> </value> - </item> - <item> - <key> <string>_module</string> </key> - <value> <string>ERP5Zuite</string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>Zuite_waitForActivities</string> </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Wait activities</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/user-extensions.js.js b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/user-extensions.js.js deleted file mode 100644 index 978491376d..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/user-extensions.js.js +++ /dev/null @@ -1,84 +0,0 @@ -/** - * Selenium extensions for the ERP5 project - */ - - -/** - * Checks the element referenced by `locator` is a float equals to `text`. - * Values are converted to float, to be format-independant (ie. 1 000 = 1000.0) - */ -Selenium.prototype.assertFloat = function(locator, text) { - var actualValueText = getText(this.page().findElement(locator)); - var actualValue = parseFloat(actualValueText.replace(/ /g, "").replace(/ /g, "")); - var expectedValue = parseFloat(text.replace(/ /g, "").replace(/ /g, "")); - - if (isNaN(actualValue)) { - Assert.fail("Actual value "+ actualValueText + - " cannot be parsed as float"); - } - Assert.matches(expectedValue.toString(), actualValue.toString()); -}; - - -/** - * like assertFloat, but for the value of <input elements. - */ -Selenium.prototype.assertFloatValue = function(locator, text) { - var actualValueText = getInputValue(this.page().findElement(locator)); - var actualValue = parseFloat(actualValueText.replace(/ /g, "").replace(/ /g, "")); - var expectedValue = parseFloat(text.replace(/ /g, "").replace(/ /g, "")); - - if (isNaN(actualValue)) { - Assert.fail("Actual value "+ actualValueText + - " cannot be parsed as float"); - } - Assert.matches(expectedValue.toString(), actualValue.toString()); -}; - - -/** - * Checks the portal status message. - */ -Selenium.prototype.assertPortalStatusMessage = function(text) { - var psm_locator = "//div[@id='transition_message']"; - var actualValue = getText(this.page().findElement(psm_locator)); - Assert.matches(text, actualValue); -}; - -Selenium.prototype.doType = function(locator, newText) { - if (typeof(netscape) != "undefined" && typeof(netscape.security.PrivilegeManager) != "undefined" ) { - // On old firefox versions, we enable privilege to upload file in javascript. - // The user needs to have signed.applets.codebase_principal_support set to true in about:config - // This is done in prefs.js generated by product/ERP5Type/tests/runFunctionalTest.py - // This approach no longer work in newer firefox versions https://developer.mozilla.org/en-US/docs/Bypassing_Security_Restrictions_and_Signing_Code - // Without this, tests dealing with file upload will fail - netscape.security.PrivilegeManager.enablePrivilege("UniversalFileRead"); - } - var element = this.page().findElement(locator); - this.page().replaceText(element, newText); -}; - -/* - * Get the location of the current page. This function is missing in - * Selenium 0.8 or later. - */ -Selenium.prototype.getAbsoluteLocation = function() { - return this.page().location || this.browserbot.getCurrentWindow().location; -}; - -Selenium.prototype.doPhantomRender = function(filename) { - if (window.page && window.page.render) { - page.render(filename); - } -}; - -Selenium.prototype.assertElementPositionRangeTop = function(locator, range){ - var positionTop = parseFloat(this.getElementPositionTop(locator)); - /* example of range 450..455 */ - var rangeList = range.split(".."); - var minimumPositionTop = parseFloat(rangeList[0]); - var maximumPositionTop = parseFloat(rangeList[1]); - if (positionTop < minimumPositionTop || positionTop > maximumPositionTop ){ - Assert.fail(positionTop + " is not between " + minimumPositionTop + " and " + maximumPositionTop); - } -}; diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/user-extensions.js.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/user-extensions.js.xml deleted file mode 100644 index a74ed761c6..0000000000 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/user-extensions.js.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="File" module="OFS.Image"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_Cacheable__manager_id</string> </key> - <value> <string>http_cache</string> </value> - </item> - <item> - <key> <string>__name__</string> </key> - <value> <string>user-extensions.js</string> </value> - </item> - <item> - <key> <string>content_type</string> </key> - <value> <string>application/javascript</string> </value> - </item> - <item> - <key> <string>precondition</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string></string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_ui_test_core/bt/change_log b/bt5/erp5_ui_test_core/bt/change_log deleted file mode 100644 index c576b050df..0000000000 --- a/bt5/erp5_ui_test_core/bt/change_log +++ /dev/null @@ -1,33 +0,0 @@ -2013-09-03 arnaud.fontaine -* ZODB Components: Workflow History must always be kept, so avoid an extra step for developers. - -2013-08-28 arnaud.fontaine -* ZODB Components: Migrate Documents, Extensions and Tests. - -2013-04-05 arnaud.fontaine -* Implement Extensions to be able to check whether a report has been generated. - -2011-10-11 Xavier -* Selenium core updated (2.6.0) -* captureEntirePageScreenshot is available to take screenshots with Selenium (Firefox only) -* captureEntirePageScreenshotAndUpload is available to upload the screenshots to the instance -* showOptions/hideOptions functions to help displaying drop down menus - -2011-11-01 Cedric -* Add phantomRender Selenium user extension. - -2010-06-07 yusei -* Remove short title. - -2009-11-08 Rafael -* added Script for getMessageList from DummyMailHost - -2009-04-20 Kazuhiko -* add Zuite_CommonTemplate that should a common template for all functional tests. -* add TestTool_getSkinName and TestTool_setSkinNameCookie so as to unify functional tests for normal skin and mobile skin. - -2009-02-03 Kazuhiko -* define getAbsoluteLocation() in user-extensions.js for compatible with Zelenium based of Selenium 0.8 or later. - -2008-10-01 fabien -* initial version \ No newline at end of file diff --git a/bt5/erp5_ui_test_core/bt/copyright_list b/bt5/erp5_ui_test_core/bt/copyright_list deleted file mode 100644 index f7f420b9be..0000000000 --- a/bt5/erp5_ui_test_core/bt/copyright_list +++ /dev/null @@ -1 +0,0 @@ -Copyright (C) 2008 Nexedi SA \ No newline at end of file diff --git a/bt5/erp5_ui_test_core/bt/dependency_list b/bt5/erp5_ui_test_core/bt/dependency_list deleted file mode 100644 index a5cbd25b47..0000000000 --- a/bt5/erp5_ui_test_core/bt/dependency_list +++ /dev/null @@ -1,2 +0,0 @@ -erp5_core -erp5_xhtml_style \ No newline at end of file diff --git a/bt5/erp5_ui_test_core/bt/description b/bt5/erp5_ui_test_core/bt/description deleted file mode 100644 index 7ebfb4e603..0000000000 --- a/bt5/erp5_ui_test_core/bt/description +++ /dev/null @@ -1,3 +0,0 @@ -Framework for user interface tests. - -WARNING: This business template contain extremely unsafe code and should not be installed on a production environment. \ No newline at end of file diff --git a/bt5/erp5_ui_test_core/bt/license b/bt5/erp5_ui_test_core/bt/license deleted file mode 100644 index 3a3e12bcad..0000000000 --- a/bt5/erp5_ui_test_core/bt/license +++ /dev/null @@ -1 +0,0 @@ -GPL \ No newline at end of file diff --git a/bt5/erp5_ui_test_core/bt/maintainer_list b/bt5/erp5_ui_test_core/bt/maintainer_list deleted file mode 100644 index 5fa27abd25..0000000000 --- a/bt5/erp5_ui_test_core/bt/maintainer_list +++ /dev/null @@ -1 +0,0 @@ -fabien \ No newline at end of file diff --git a/bt5/erp5_ui_test_core/bt/template_extension_id_list b/bt5/erp5_ui_test_core/bt/template_extension_id_list deleted file mode 100644 index 0a6c5a2b13..0000000000 --- a/bt5/erp5_ui_test_core/bt/template_extension_id_list +++ /dev/null @@ -1,3 +0,0 @@ -extension.erp5.ERP5Zuite -extension.erp5.MailHostUtils -extension.erp5.SeleniumTestUtils \ No newline at end of file diff --git a/bt5/erp5_ui_test_core/bt/template_format_version b/bt5/erp5_ui_test_core/bt/template_format_version deleted file mode 100644 index 56a6051ca2..0000000000 --- a/bt5/erp5_ui_test_core/bt/template_format_version +++ /dev/null @@ -1 +0,0 @@ -1 \ No newline at end of file diff --git a/bt5/erp5_ui_test_core/bt/template_skin_id_list b/bt5/erp5_ui_test_core/bt/template_skin_id_list deleted file mode 100644 index 1cfe5060d7..0000000000 --- a/bt5/erp5_ui_test_core/bt/template_skin_id_list +++ /dev/null @@ -1 +0,0 @@ -erp5_ui_test_core \ No newline at end of file diff --git a/bt5/erp5_ui_test_core/bt/title b/bt5/erp5_ui_test_core/bt/title deleted file mode 100644 index 1cfe5060d7..0000000000 --- a/bt5/erp5_ui_test_core/bt/title +++ /dev/null @@ -1 +0,0 @@ -erp5_ui_test_core \ No newline at end of file diff --git a/bt5/erp5_ui_test_core/bt/version b/bt5/erp5_ui_test_core/bt/version deleted file mode 100644 index 48360de846..0000000000 --- a/bt5/erp5_ui_test_core/bt/version +++ /dev/null @@ -1 +0,0 @@ -5.4.7 \ No newline at end of file diff --git a/bt5/erp5_ui_test_core/erp5_ui_test_core.zexp b/bt5/erp5_ui_test_core/erp5_ui_test_core.zexp new file mode 100644 index 0000000000000000000000000000000000000000..a77af8f0f825cc9b7b328f3fe0b865e80fa533a5 GIT binary patch literal 64327 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 literal 0 HcmV?d00001 -- 2.30.9