Commit 8f02ca5e authored by Rafael Monnerat's avatar Rafael Monnerat

Include fixes, more tests, better svg support ...

This merge of "rafael" branch includes several commits for:

  - Fixes for Functional Tests
  - Use Remote URL for Tutorial Related tests (see testFunctionalConfigurator)
  - Fixes for Consulting Configurator Workflow tests
  - Several tests for SVG Conversion and better SVG support
parents 09cb059a 86e8bba5
...@@ -58,6 +58,14 @@ context.setGlobalConfigurationAttr(\n ...@@ -58,6 +58,14 @@ context.setGlobalConfigurationAttr(\n
configuration_save.setIntIndex(1000)\n configuration_save.setIntIndex(1000)\n
configuration_save.addConfigurationItem("Portal Type Roles Spreadsheet Configurator Item",\n configuration_save.addConfigurationItem("Portal Type Roles Spreadsheet Configurator Item",\n
configuration_spreadsheet_file=portal_type_roles_spreadsheet)\n configuration_spreadsheet_file=portal_type_roles_spreadsheet)\n
\n
# Define standard module security. also.\n
configuration_save.addConfigurationItem("Permission Configurator Item",\n
filename="standard_module_permission_access.ods")\n
\n
# Create ERP5Site_getSecurityCategoryMapping\n
configuration_save.addConfigurationItem("Security Category Mapping Configurator Item")\n
</string> </value> </string> </value>
</item> </item>
<item> <item>
......
636 637
\ No newline at end of file \ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Zuite" module="Products.Zelenium.zuite"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>configurator_consulting_standard_zuite</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Zuite" module="Products.Zelenium.zuite"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>configurator_standard_zuite</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
portal_tests/configurator_consulting_standard_zuite
portal_tests/configurator_consulting_standard_zuite/**
portal_tests/configurator_standard_zuite
portal_tests/configurator_standard_zuite/**
\ No newline at end of file
...@@ -152,7 +152,7 @@ ...@@ -152,7 +152,7 @@
</tr>\n </tr>\n
<tr>\n <tr>\n
<td>type</td>\n <td>type</td>\n
<td>listbox_start_date</td>\n <td>listbox_movement.start_date</td>\n
<td>2009/01/01</td>\n <td>2009/01/01</td>\n
</tr>\n </tr>\n
<tr>\n <tr>\n
......
...@@ -73,6 +73,7 @@ ...@@ -73,6 +73,7 @@
<value> <value>
<list> <list>
<string>listbox</string> <string>listbox</string>
<string>listbox_delivery_start_date</string>
</list> </list>
</value> </value>
</item> </item>
......
682 683
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Zuite" module="Products.Zelenium.zuite"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>user_tutorial_zuite</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Tests configured instance </string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?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>_text</string> </key>
<value> <unicode encoding="cdata"><![CDATA[
<html xmlns:tal="http://xml.zope.org/namespaces/tal"\n
xmlns:metal="http://xml.zope.org/namespaces/metal">\n
<head>\n
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\n
<title>How-To Create Campaigns</title>\n
</head>\n
<body>\n
<table cellpadding="1" cellspacing="1" border="1">\n
<thead>\n
<tr><td rowspan="1" colspan="3">How-To Create Campaigns</td></tr>\n
</thead><tbody>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/init_test_environment">init</span>\n
\n
<tr>\n
<td>openAndWait</td>\n
<td>${base_url}/Zuite_setUpCampaignTest</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyTextPresent</td>\n
<td>Init Ok</td>\n
<td></td>\n
</tr>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/login_as_functional_test_user">Login As Functional Test User</span>\n
\n
<tr>\n
<td>selectAndWait</td>\n
<td>//select[@name="select_module"]</td>\n
<td>Campaigns</td>\n
</tr>\n
<tr>\n
<td>selectAndWait</td>\n
<td>//select[@name="select_action"]</td>\n
<td>Add Campaign</td>\n
</tr>\n
<tr>\n
<td>waitForCondition</td>\n
<td>selenium.isTextPresent("Title")</td>\n
<td>60000</td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="field_my_title"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'campaign_howto_campaign_title\']"></td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="field_my_reference"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'campaign_howto_campaign_reference\']"></td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="field_my_source_section_title"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'campaign_howto_organisation_title\']"></td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="field_my_source_decision_title"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'campaign_howto_person_title\']"></td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="field_my_source_title"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'campaign_howto_person2_title\']"></td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="field_my_destination_title"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'campaign_howto_organisation_title\']"></td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//textarea[@name="field_my_source_trade_title_list"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'campaign_howto_person2_title\']"></td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="subfield_field_my_start_date_year"]</td>\n
<td>2000</td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="subfield_field_my_start_date_month"]</td>\n
<td>10</td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="subfield_field_my_start_date_day"]</td>\n
<td>10</td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="subfield_field_my_stop_date_year"]</td>\n
<td>3000</td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="subfield_field_my_stop_date_month"]</td>\n
<td>11</td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="subfield_field_my_stop_date_day"]</td>\n
<td>11</td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="field_my_quantity"]</td>\n
<td>0.9</td>\n
</tr>\n
<tr>\n
<td>select</td>\n
<td>//select[@name="field_my_quantity_unit"]</td>\n
<td>Time/Day</td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="field_my_price"]</td>\n
<td>20.00</td>\n
</tr>\n
<tr>\n
<td>select</td>\n
<td>//select[@name="field_my_price_currency"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'campaign_howto_currency_tag\']"></td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>//button[@name="Base_edit:method"]</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//div[@id="transition_message"]</td>\n
<td>Data updated.</td>\n
</tr>\n
<tr>\n
<td>selectAndWait</td>\n
<td>//select[@name="select_action"]</td>\n
<td>Open Ticket</td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>//button[@id="dialog_submit_button"]</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//label[normalize-space(text())=\'State\']/../div</td>\n
<td>Open</td>\n
</tr>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/login_as_manager">Login As Manager</span>\n
\n
<tr>\n
<td>openAndWait</td>\n
<td>${base_url}/Zuite_tearDownCampaignTest</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyTextPresent</td>\n
<td>Clean Ok</td>\n
<td></td>\n
</tr>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span>\n
\n
</tbody>\n
</table>\n
</body>\n
</html>
]]></unicode> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>testHowToCampaign</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></unicode> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?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>_text</string> </key>
<value> <unicode encoding="cdata"><![CDATA[
<html xmlns:tal="http://xml.zope.org/namespaces/tal"\n
xmlns:metal="http://xml.zope.org/namespaces/metal">\n
<head>\n
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\n
<title>How-To Create Events in Campaigns</title>\n
</head>\n
<body>\n
<table cellpadding="1" cellspacing="1" border="1">\n
<thead>\n
<tr><td rowspan="1" colspan="3">How-To Create Events in Campaigns</td></tr>\n
</thead><tbody>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/init_test_environment">init</span>\n
\n
<tr>\n
<td>openAndWait</td>\n
<td>${base_url}/Zuite_setUpCreateEventTest</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyTextPresent</td>\n
<td>Init Ok</td>\n
<td></td>\n
</tr>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities</span>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/login_as_functional_test_user">Login As Functional Test User</span>\n
\n
<tr>\n
<td>selectAndWait</td>\n
<td>//select[@name="select_module"]</td>\n
<td>Campaigns</td>\n
</tr>\n
<tal:block tal:content="structure python: here.Zuite_generateListboxBrowsing(listbox_selection=([\'title\', here.Zuite_getHowToInfo()[\'create_event_howto_campaign_title\']],), enter_object=True)"/>\n
<tr>\n
<td>verifyText</td>\n
<td>//div[@id="breadcrumb"]/a[2]</td>\n
<td>Campaigns</td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//div[@id="breadcrumb"]/a[3]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'create_event_howto_campaign_title\']"></td>\n
</tr>\n
<tr>\n
<td>selectAndWait</td>\n
<td>//select[@name="select_action"]</td>\n
<td>Create New Event</td>\n
</tr>\n
<tr>\n
<td>select</td>\n
<td>//select[@name="field_your_portal_type"]</td>\n
<td>Mail Message</td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="field_your_title"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'create_event_howto_event_title\']"></td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//textarea[@name="field_your_text_content"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'create_event_howto_event_description\']"></td>\n
</tr>\n
<tr>\n
<td>click</td>\n
<td>//input[@name="field_your_direction" and @value="outgoing"]</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>//button[@id="dialog_submit_button"]</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//div[@id="transition_message"]</td>\n
<td>Created and associated a new Mail Message to the ticket.</td>\n
</tr>\n
<tr>\n
<td>verifyValue</td>\n
<td>//input[@name="field_my_default_follow_up_title"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'create_event_howto_campaign_title\']"></td>\n
</tr>\n
<tr>\n
<td>verifyValue</td>\n
<td>//input[@name="field_my_title"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'create_event_howto_event_title\']"></td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="field_my_source_title"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'create_event_howto_person_title\']"></td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//textarea[@name="field_my_destination_title_list"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'create_event_howto_person2_title\']"></td>\n
</tr>\n
<tr>\n
<td>click</td>\n
<td>//input[@name="field_my_content_type" and @value="text/plain"]</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>//button[@name="Base_edit:method"]</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//textarea[@name="field_my_text_content"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'create_event_howto_event_content\']"></td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>//button[@name="Base_edit:method"]</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>storeAttribute</td>\n
<td>//div[@id="breadcrumb"]/a[3]@href</td>\n
<td>event_url</td>\n
</tr>\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities</span>\n
<tr>\n
<td>openAndWait</td>\n
<td>${event_url}</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>link=Preview</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyTextPresent</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'create_event_howto_event_content\']"></td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>//span[contains(text(),\'View\')]</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>//input[@name="field_my_default_follow_up_title"]/../a</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//div[@id="breadcrumb"]/a[2]</td>\n
<td>Campaigns</td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//div[@id="breadcrumb"]/a[3]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'create_event_howto_campaign_title\']"></td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//span[@class="listbox-current-page-total-number"]</td>\n
<td>1 records</td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//tr[@class=\'listbox-data-line-0 DataA\']/td[1]/</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'create_event_howto_event_title\']" ></td>\n
</tr>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/login_as_manager">Login As Manager</span>\n
\n
<tr>\n
<td>openAndWait</td>\n
<td>${base_url}/Zuite_tearDownCreateEventTest</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyTextPresent</td>\n
<td>Clean Ok</td>\n
<td></td>\n
</tr>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span>\n
\n
</tbody>\n
</table>\n
</body>\n
</html>
]]></unicode> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>testHowToCreateEvent</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></unicode> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?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>_text</string> </key>
<value> <unicode encoding="cdata"><![CDATA[
<html xmlns:tal="http://xml.zope.org/namespaces/tal"\n
xmlns:metal="http://xml.zope.org/namespaces/metal">\n
<head>\n
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\n
<title>How-To Full Text Search</title>\n
</head>\n
<body tal:define="configuration python: here.Zuite_getHowToInfo();\n
search_name_string python: configuration[\'full_text_person_title\'];\n
search_organisation_string python: configuration[\'full_text_organisation_title\'];">\n
<table cellpadding="1" cellspacing="1" border="1">\n
<thead>\n
<tr><td rowspan="1" colspan="3">How-To Full Text Search</td></tr>\n
</thead><tbody>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/init_test_environment">init</span>\n
\n
<tr>\n
<td>openAndWait</td>\n
<td>${base_url}/Zuite_setUpFullTextSearchTest</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyTextPresent</td>\n
<td>Init Ok</td>\n
<td></td>\n
</tr>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/login_as_functional_test_user">Login As Functional Test User</span>\n
\n
<!-- Search with empty string -->\n
<tr>\n
<td>type</td>\n
<td>field_your_search_text</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>ERP5Site_viewQuickSearchResultList:method</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyTextNotPresent</td>\n
<td>Search Results</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyElementPresent</td>\n
<td>id=transition_message</td>\n
<td></td>\n
</tr>\n
<!-- Search persons by full name -->\n
<tr>\n
<td>openAndWait</td>\n
<td>${base_url}/view</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>field_your_search_text</td>\n
<td tal:content="search_name_string"></td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>ERP5Site_viewQuickSearchResultList:method</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyTextPresent</td>\n
<td>Search Results</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyTextPresent</td>\n
<td tal:content="search_name_string"></td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyTextPresent</td>\n
<td tal:content="python: configuration[\'full_text_person_reference\']">reference</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyTextPresent</td>\n
<td>Person</td>\n
<td></td>\n
</tr>\n
\n
<!-- Search Organisation -->\n
<tr>\n
<td>type</td>\n
<td>field_your_search_text</td>\n
<td tal:content="search_organisation_string"></td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>ERP5Site_viewQuickSearchResultList:method</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyTextPresent</td>\n
<td>Search Results</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyTextPresent</td>\n
<td tal:content="search_organisation_string"></td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyTextPresent</td>\n
<td>Organisation</td>\n
<td></td>\n
</tr>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/login_as_manager">Login As Manager</span>\n
\n
<tr>\n
<td>open</td>\n
<td>${base_url}/Zuite_tearDownFullTextSearchTest</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyTextPresent</td>\n
<td>Clean Ok</td>\n
<td></td>\n
</tr>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span>\n
\n
</tbody>\n
</table>\n
</body>\n
</html>
]]></unicode> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>testHowToFullTextSearch</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></unicode> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?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>_text</string> </key>
<value> <unicode encoding="cdata"><![CDATA[
<html xmlns:tal="http://xml.zope.org/namespaces/tal"\n
xmlns:metal="http://xml.zope.org/namespaces/metal">\n
<head>\n
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\n
<title>How-To Instance I18n</title>\n
</head>\n
<body>\n
<table cellpadding="1" cellspacing="1" border="1">\n
<thead>\n
<tr><td rowspan="1" colspan="3">How-To Instance I18n</td></tr>\n
</thead><tbody>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/init_test_environment">init</span>\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/login_as_functional_test_user">Login As Functional Test User</span>\n
\n
<!-- test switching to French -->\n
<!--\n
XXX: This is the way user would have done but it fails for FF in some conditions\n
which we can not reproduce. Therefore we use set cookie approach.\n
<tr>\n
<td>selectAndWait</td>\n
<td>select_language</td>\n
<td>label=Français</td>\n
</tr>\n
<tr>\n
<td>pause</td>\n
<td>5000</td>\n
<td></td>\n
</tr>\n
-->\n
<tr>\n
<td>deleteCookie</td>\n
<td>LOCALIZER_LANGUAGE</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>createCookie</td>\n
<td>LOCALIZER_LANGUAGE=fr</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>openAndWait</td>\n
<td>${base_url}/view</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyTextPresent</td>\n
<td>Mes favoris</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>openAndWait</td>\n
<td>${base_url}/view</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>selectAndWait</td>\n
<td>//select[@name="select_module"]</td>\n
<td>Personnes</td>\n
</tr>\n
\n
<tr>\n
<td>clickAndWait</td>\n
<td>Folder_show:method</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>listbox_translated_validation_state_title</td>\n
<td>Valid%</td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>//input[@class=\'listbox-select-action\']</td>\n
<td></td>\n
</tr>\n
<!--\n
<tr>\n
<td>verifyTextNotPresent</td>\n
<td>Brouillon</td>\n
<td></td>\n
</tr>\n
-->\n
<tr>\n
<td>type</td>\n
<td>listbox_translated_validation_state_title</td>\n
<td>Brouillon</td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>//input[@class=\'listbox-select-action\']</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyTextNotPresent</td>\n
<td>Valid</td>\n
<td></td>\n
</tr>\n
<!--\n
XXX: This is the way user would have done but it fails for FF in some conditions\n
which we can not reproduce. Therefore we use set cookie approach.\n
<tr>\n
<td>selectAndWait</td>\n
<td>select_language</td>\n
<td>label=English</td>\n
</tr>\n
<tr>\n
<td>pause</td>\n
<td>5000</td>\n
<td></td>\n
</tr>\n
-->\n
<tr>\n
<td>openAndWait</td>\n
<td>${base_url}/view</td>\n
<td></td>\n
</tr>\n
\n
<tr>\n
<td>deleteCookie</td>\n
<td>LOCALIZER_LANGUAGE</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>createCookie</td>\n
<td>LOCALIZER_LANGUAGE=en</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>openAndWait</td>\n
<td>${base_url}/view</td>\n
<td></td>\n
</tr>\n
</tbody>\n
</table>\n
</body>\n
</html>
]]></unicode> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>testHowToInstanceI18N</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <unicode></unicode> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?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>_text</string> </key>
<value> <unicode encoding="cdata"><![CDATA[
<html xmlns:tal="http://xml.zope.org/namespaces/tal"\n
xmlns:metal="http://xml.zope.org/namespaces/metal">\n
<head>\n
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\n
<title>How-To Organisation</title>\n
</head>\n
<body>\n
<table cellpadding="1" cellspacing="1" border="1">\n
<thead>\n
<tr><td rowspan="1" colspan="3">How-To Organisation</td></tr>\n
</thead><tbody>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/init_test_environment">init</span>\n
\n
<tr>\n
<td>openAndWait</td>\n
<td>${base_url}/Zuite_setUpOrganisationTest</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyTextPresent</td>\n
<td>Init Ok</td>\n
<td></td>\n
</tr>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/login_as_functional_test_user">Login As Functional Test User</span>\n
\n
<tr>\n
<td>selectAndWait</td>\n
<td>//select[@name="select_module"]</td>\n
<td>Organisations</td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//div[@id="breadcrumb"]/a[2]</td>\n
<td>Organisations</td>\n
</tr>\n
<tr>\n
<td>selectAndWait</td>\n
<td>//select[@name="select_action"]</td>\n
<td>Add Organisation</td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//div[@id="transition_message"]</td>\n
<td>Object created.</td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//li[@class="selected"]/a/span</td>\n
<td>View</td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="field_my_title"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'organisation_howto_organisation_title\']"></td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="field_my_corporate_name"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'organisation_howto_organisation_title\']"></td>\n
</tr>\n
<tr>\n
<td>select</td>\n
<td>//select[@name="subfield_field_my_role_list_default:list"]</td>\n
<td>Client</td>\n
</tr>\n
<tr>\n
<td>select</td>\n
<td>//select[@name="field_my_function"]</td>\n
<td>Sales</td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//textarea[@name="field_my_default_address_street_address"]</td>\n
<td>12 Zorro Street</td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="field_my_default_address_city"]</td>\n
<td>Beverly Hills</td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="field_my_default_address_zip_code"]</td>\n
<td>90210</td>\n
</tr>\n
<tr>\n
<td>select</td>\n
<td>//select[@name="field_my_default_address_region"]</td>\n
<td>Brazil</td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="field_my_default_email_coordinate_text"]</td>\n
<td>info@zcompany.com</td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="field_default_telephone_my_default_telephone_coordinate_text"]</td>\n
<td>+55(0)22 2222 2222</td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>//button[@name="Base_edit:method"]</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyTextNotPresent</td>\n
<td>Input data has errors. Please look at the error messages below.</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>link=Details</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>selectAndWait</td>\n
<td>//select[@name="select_action"]</td>\n
<td>Validate</td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>//button[@id="dialog_submit_button"]</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//li[@class="selected"]/a/span</td>\n
<td>Details</td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//div[@id="transition_message"]</td>\n
<td>Status changed.</td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>link=View</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//div[@title="The current state of the document."]/div[1]</td>\n
<td>Validated</td>\n
</tr>\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities</span>\n
<tr>\n
<td>openAndWait</td>\n
<td>${base_url}/organisation_module/view</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//div[@id="breadcrumb"]/a[1]</td>\n
<td>ERP5</td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//div[@id="breadcrumb"]/a[2]</td>\n
<td>Organisations</td>\n
</tr>\n
<tal:block tal:content="structure python: here.Zuite_generateListboxBrowsing(listbox_selection=([\'title\', here.Zuite_getHowToInfo()[\'organisation_howto_organisation_title\']],), enter_object=True)"/>\n
<tr>\n
<td>verifyText</td>\n
<td>//div[@id="breadcrumb"]/a[3]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'organisation_howto_organisation_title\']"></td>\n
</tr>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/login_as_manager">Login As Manager</span>\n
\n
<tr>\n
<td>openAndWait</td>\n
<td>${base_url}/Zuite_tearDownOrganisationTest</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyTextPresent</td>\n
<td>Clean Ok</td>\n
<td></td>\n
</tr>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span>\n
\n
</tbody>\n
</table>\n
</body>\n
</html>
]]></unicode> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>testHowToOrganisation</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></unicode> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?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>_text</string> </key>
<value> <unicode encoding="cdata"><![CDATA[
<html xmlns:tal="http://xml.zope.org/namespaces/tal"\n
xmlns:metal="http://xml.zope.org/namespaces/metal">\n
<head>\n
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\n
<title>How-To Request to post an outgoing event</title>\n
</head>\n
<body>\n
<table cellpadding="1" cellspacing="1" border="1">\n
<thead>\n
<tr><td rowspan="1" colspan="3">How-To Request to post an outgoing event</td></tr>\n
</thead><tbody>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/init_test_environment">init</span>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/login_as_functional_test_user">Login As Functional Test User</span>\n
\n
<tr>\n
<td>openAndWait</td>\n
<td>${base_url}/Zuite_setUpOutgoingEventTest</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyTextPresent</td>\n
<td>Init Ok</td>\n
<td></td>\n
</tr>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities</span>\n
\n
<tr>\n
<td>open</td>\n
<td>${base_url}/view</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>selectAndWait</td>\n
<td>//select[@name="select_module"]</td>\n
<td>Campaigns</td>\n
</tr>\n
\n
<tal:block tal:content="structure python: here.Zuite_generateListboxBrowsing(listbox_selection=([\'title\', here.Zuite_getHowToInfo()[\'outgoing_event_howto_campaign_title\']],), enter_object=True)"/>\n
<tr>\n
<td>verifyText</td>\n
<td>//div[@id="breadcrumb"]/a[3]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'outgoing_event_howto_campaign_title\']"></td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td tal:content="python: \'link=%s\' % here.Zuite_getHowToInfo()[\'outgoing_event_howto_event_title\']"></td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//label[normalize-space(text())=\'State\']/../div</td>\n
<td>Planned</td>\n
</tr>\n
<tr>\n
<td>selectAndWait</td>\n
<td>//select[@name="select_action"]</td>\n
<td>Confirm</td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>//button[@id="dialog_submit_button"]</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>//input[@name="field_my_default_follow_up_title"]/../a</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//tr[@class=\'listbox-data-line-0 DataA\']/td[7]/</td>\n
<td>Confirmed</td>\n
</tr>\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities</span>\n
<tr>\n
<td>openAndWait</td>\n
<td>${base_url}/Base_clearCache</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>assertTextPresent</td>\n
<td>Cleared.</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>openAndWait</td>\n
<td>${base_url}/view</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>selectAndWait</td>\n
<td>//select[@name="select_module"]</td>\n
<td>Events</td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//div[@id="breadcrumb"]/a[2]</td>\n
<td>Events</td>\n
</tr>\n
<!--\n
<tr>\n
<td>verifyText</td>\n
<td>//span[@class="listbox-current-page-total-number"]</td>\n
<td>1 records</td>\n
</tr>\n
-->\n
<tal:block tal:content="structure python: here.Zuite_generateListboxBrowsing(listbox_selection=([\'title\', here.Zuite_getHowToInfo()[\'outgoing_event_howto_event_title\']],), enter_object=True)"/>\n
<tr>\n
<td>selectAndWait</td>\n
<td>//select[@name="select_action"]</td>\n
<td>Send</td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>//button[@id="dialog_submit_button"]</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//label[normalize-space(text())=\'State\']/../div</td>\n
<td>Sent</td>\n
</tr>\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities</span>\n
<tr>\n
<td>openAndWait</td>\n
<td>${base_url}/Base_clearCache</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>assertTextPresent</td>\n
<td>Cleared.</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>openAndWait</td>\n
<td>${base_url}/event_module?simulation_state=ordered</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//span[@class="listbox-current-page-total-number"]</td>\n
<td>0 records</td>\n
</tr>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/login_as_manager">Login As Manager</span>\n
\n
<tr>\n
<td>openAndWait</td>\n
<td>${base_url}/Zuite_tearDownOutgoingEventTest</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyTextPresent</td>\n
<td>Clean Ok</td>\n
<td></td>\n
</tr>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span>\n
\n
</tbody>\n
</table>\n
</body>\n
</html>
]]></unicode> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>testHowToOutgoingEvent</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></unicode> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?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>_text</string> </key>
<value> <unicode encoding="cdata"><![CDATA[
<html xmlns:tal="http://xml.zope.org/namespaces/tal"\n
xmlns:metal="http://xml.zope.org/namespaces/metal">\n
<head>\n
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\n
<title>How-To Person - Tutorial Reference -user-Howto.Create.Persons</title>\n
</head>\n
<body>\n
<table cellpadding="1" cellspacing="1" border="1">\n
<thead>\n
<tr>\n
<td rowspan="1" colspan="3">How-To Person - Tutorial Reference -user-Howto.Create.Persons</td>\n
</tr>\n
</thead>\n
\n
<tbody>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/init_test_environment">init</span>\n
\n
<tr>\n
<td>openAndWait</td>\n
<td>${base_url}/Zuite_setUpPersonTest</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyTextPresent</td>\n
<td>Init Ok</td>\n
<td></td>\n
</tr>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities">Wait for activities</span>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/login_as_functional_test_user">Login As Functional Test User</span>\n
\n
\n
<!-- Screenshot on slide 3 of user-Howto.Create.Persons -->\n
<tr>\n
<td>selectAndWait</td>\n
<td>//select[@name="select_module"]</td>\n
<td>Persons</td>\n
</tr>\n
\n
\n
<!-- Screenshot on slide 4 of user-Howto.Create.Persons -->\n
<tr>\n
<td>selectAndWait</td>\n
<td>//select[@name="select_action"]</td>\n
<td>Add Person</td>\n
</tr>\n
\n
\n
<!-- Screenshot on slide 5 of user-Howto.Create.Persons -->\n
<tr>\n
<td>verifyText</td>\n
<td>//div[@id="transition_message"]</td>\n
<td>Object created.</td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//li[@class="selected"]/a/span</td>\n
<td>View</td>\n
</tr>\n
\n
\n
<!-- Screenshot on slide 6 of user-Howto.Create.Persons -->\n
<tr>\n
<td>type</td>\n
<td>//input[@name="field_my_first_name"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'person_howto_first_name\']"></td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="field_my_last_name"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'person_howto_last_name\']"></td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="field_my_career_subordination_title"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'person_howto_organisation_title\']"></td>\n
</tr>\n
<tr>\n
<td>select</td>\n
<td>//select[@name="field_my_gender"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'person_howto_gender\']"></td>\n
</tr>\n
<tr>\n
<td>select</td>\n
<td>//select[@name="subfield_field_my_career_role_list_default:list"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'person_howto_role\']"></td>\n
</tr>\n
<tr>\n
<td>select</td>\n
<td>//select[@name="field_my_career_function"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'person_howto_career_function\']"></td>\n
</tr>\n
<tr>\n
<td>select</td>\n
<td>//select[@name="field_my_career_activity"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'person_howto_career_activity\']"></td>\n
</tr>\n
<tr>\n
<td>select</td>\n
<td>//select[@name="field_my_nationality"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'person_howto_nationality\']"></td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="field_my_default_email_coordinate_text"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'person_howto_email\']"></td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="field_default_telephone_my_default_telephone_coordinate_text"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'person_howto_telephone\']"></td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>//button[@name="Base_edit:method"]</td>\n
<td></td>\n
</tr>\n
\n
\n
<!-- Screenshot on slide 7 of user-Howto.Create.Persons -->\n
<tr>\n
<td>verifyText</td>\n
<td>//div[@id="information_area"]</td>\n
<td>Input data has errors. Please look at the error messages below.</td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//span[@class="error"]</td>\n
<td>No such document was found.</td>\n
</tr>\n
<tr>\n
<td>select</td>\n
<td>//select[@name="subfield_field_my_career_subordination_title_relation"]</td>\n
<td>Add Organisation</td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>//button[@name="Base_edit:method"]</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyTextNotPresent</td>\n
<td>Input data has errors. Please look at the error messages below.</td>\n
<td></td>\n
</tr>\n
\n
\n
<!-- Screenshot on slide 8 and 9 of user-Howto.Create.Persons -->\n
<tr>\n
<td>clickAndWait</td>\n
<td>link=Details</td>\n
<td></td>\n
</tr>\n
\n
<!-- Screenshot on slide 10-11 of user-Howto.Create.Persons -->\n
<tr>\n
<td>selectAndWait</td>\n
<td>//select[@name="select_action"]</td>\n
<td>Validate</td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>//button[@id="dialog_submit_button"]</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//li[@class="selected"]/a/span</td>\n
<td>Details</td>\n
</tr>\n
\n
\n
<!-- Screenshot on slide 12 of user-Howto.Create.Persons -->\n
<tr>\n
<td>verifyText</td>\n
<td>//div[@id="transition_message"]</td>\n
<td>Status changed.</td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>link=View</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//div[@title="The current state of the document."]/div[1]</td>\n
<td>Validated</td>\n
</tr>\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities">Wait for activities</span>\n
<tr>\n
<td>open</td>\n
<td>${base_url}/view</td>\n
<td></td>\n
</tr>\n
\n
\n
<!-- Screenshot on slide 13 of user-Howto.Create.Persons -->\n
<tr>\n
<td>selectAndWait</td>\n
<td>//select[@name="select_module"]</td>\n
<td>Persons</td>\n
</tr>\n
\n
\n
<!-- Screenshot on slide 14 of user-Howto.Create.Persons -->\n
<tr>\n
<td>verifyText</td>\n
<td>//div[@id="breadcrumb"]/a[1]</td>\n
<td>ERP5</td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//div[@id="breadcrumb"]/a[2]</td>\n
<td>Persons</td>\n
</tr>\n
\n
\n
<!-- Screenshot on slide 15 of user-Howto.Create.Persons -->\n
<tal:block tal:content="structure python: here.Zuite_generateListboxBrowsing(listbox_selection=([\'title\', here.Zuite_getHowToInfo()[\'person_howto_title\']],), enter_object=True)"/>\n
<tr>\n
<td>pause</td>\n
<td>5000</td>\n
<td></td>\n
</tr>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities">Wait for activities</span>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/login_as_manager">Login As Manager</span>\n
\n
<tr>\n
<td>openAndWait</td>\n
<td>${base_url}/Zuite_tearDownPersonTest</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyTextPresent</td>\n
<td>Clean Ok</td>\n
<td></td>\n
</tr>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span>\n
\n
</tbody>\n
</table>\n
</body>\n
</html>
]]></unicode> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>testHowToPerson</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></unicode> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?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>_text</string> </key>
<value> <unicode encoding="cdata"><![CDATA[
<html xmlns:tal="http://xml.zope.org/namespaces/tal"\n
xmlns:metal="http://xml.zope.org/namespaces/metal">\n
<head>\n
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\n
<title>How-to Person and Organisation linking</title>\n
</head>\n
<body>\n
<table cellpadding="1" cellspacing="1" border="1">\n
<thead>\n
<tr><td rowspan="1" colspan="3">How-to Person and Organisation linking</td></tr>\n
</thead><tbody>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/init_test_environment">init</span>\n
\n
<tr>\n
<td>openAndWait</td>\n
<td>${base_url}/Zuite_setUpPersonAndOrganisationLinkingTest</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyTextPresent</td>\n
<td>Init Ok</td>\n
<td></td>\n
</tr>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/login_as_functional_test_user">Login As Functional Test User</span>\n
\n
<tr>\n
<td>open</td>\n
<td>${base_url}/view</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>selectAndWait</td>\n
<td>//select[@name="select_module"]</td>\n
<td>Persons</td>\n
</tr>\n
\n
<tal:block tal:content="structure python: here.Zuite_generateListboxBrowsing(listbox_selection=([\'title\', here.Zuite_getHowToInfo()[\'link_howto_person_title\']],), enter_object=True)"/>\n
<tr>\n
<td>assertValue</td>\n
<td>//input[@name="field_my_first_name"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'link_howto_person_first_name\']"></td>\n
</tr>\n
<tr>\n
<td>assertValue</td>\n
<td>//input[@name="field_my_last_name"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'link_howto_person_last_name\']"></td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>//input[@name="portal_selections/viewSearchRelatedDocumentDialog0:method"]</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>listbox_title</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'link_howto_organisation_title\']"></td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>dialog_update_button</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>//button[@id="dialog_submit_button"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'link_howto_organisation_title\']"></td>\n
</tr>\n
<tr>\n
<td>assertValue</td>\n
<td>//input[@name="field_my_career_subordination_title"]</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>//input[@name="portal_selections/viewSearchRelatedDocumentDialog0:method"]</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>listbox_title</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'link_howto_organisation_title\']"></td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>dialog_update_button</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>click</td>\n
<td tal:content="python: \'//a[text()=\\\'%s\\\']/../../td[1]/input\' % (here.Zuite_getHowToInfo()[\'link_howto_organisation_title\'])"></td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>//button[@id="dialog_submit_button"]</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//div[@id="transition_message"]</td>\n
<td>Data updated.</td>\n
</tr>\n
<tr>\n
<td>assertValue</td>\n
<td>//input[@name="field_my_career_subordination_title"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'link_howto_organisation_title\']"></td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>//input[@name="field_my_career_subordination_title"]/following-sibling::*[2]</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>assertValue</td>\n
<td>//input[@name="field_my_title"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'link_howto_organisation_title\']"></td>\n
</tr>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/login_as_manager">Login As Manager</span>\n
\n
<tr>\n
<td>openAndWait</td>\n
<td>${base_url}/Zuite_tearDownPersonAndOrganisationLinkingTest</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyTextPresent</td>\n
<td>Clean Ok</td>\n
<td></td>\n
</tr>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span>\n
\n
</tbody>\n
</table>\n
</body>\n
</html>
]]></unicode> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>testHowToPersonAndOrganisationLinking</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></unicode> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?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>_text</string> </key>
<value> <unicode encoding="cdata"><![CDATA[
<html xmlns:tal="http://xml.zope.org/namespaces/tal"\n
xmlns:metal="http://xml.zope.org/namespaces/metal">\n
<head>\n
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\n
<title>How-To Post Events in Campaigns</title>\n
</head>\n
<body>\n
<table cellpadding="1" cellspacing="1" border="1">\n
<thead>\n
<tr><td rowspan="1" colspan="3">How-To Post Events in Campaigns</td></tr>\n
</thead><tbody>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/init_test_environment">init</span>\n
\n
<tr>\n
<td>openAndWait</td>\n
<td>${base_url}/Zuite_setUpPostEventTest</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyTextPresent</td>\n
<td>Init Ok</td>\n
<td></td>\n
</tr>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities">Wait for activities</span>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/login_as_functional_test_user">Login As Functional Test User</span>\n
\n
<tr>\n
<td>open</td>\n
<td>${base_url}/view</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>selectAndWait</td>\n
<td>//select[@name="select_module"]</td>\n
<td>Events</td>\n
</tr>\n
\n
<tal:block tal:content="structure python: here.Zuite_generateListboxBrowsing(listbox_selection=([\'title\', here.Zuite_getHowToInfo()[\'post_event_howto_event_title\']],), enter_object=True)"/>\n
<tr>\n
<td>selectAndWait</td>\n
<td>//select[@name="select_action"]</td>\n
<td>Send</td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>//button[@id="dialog_submit_button"]</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//div[@id="transition_message"]</td>\n
<td>Status changed.</td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//label[normalize-space(text())=\'State\']/../div</td>\n
<td>Sent</td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>//input[@name="field_my_default_follow_up_title"]/../a</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//div[@id="breadcrumb"]/a[2]</td>\n
<td>Campaigns</td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//div[@id="breadcrumb"]/a[3]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'post_event_howto_campaign_title\']"></td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//span[@class="listbox-current-page-total-number"]</td>\n
<td>1 records</td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//tr[@class=\'listbox-data-line-0 DataA\']/td[7]/</td>\n
<td>Sent</td>\n
</tr>\n
<tr>\n
<td>selectAndWait</td>\n
<td>//select[@name="select_module"]</td>\n
<td>Persons</td>\n
</tr>\n
<tal:block tal:content="structure python: here.Zuite_generateListboxBrowsing(listbox_selection=([\'title\', here.Zuite_getHowToInfo()[\'post_event_howto_person_title\']],), enter_object=True)"/>\n
<tr>\n
<td>verifyText</td>\n
<td>//div[@id="breadcrumb"]/a[3]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'post_event_howto_person_title\']"></td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>link=Events</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyTextPresent</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'post_event_howto_event_title\']"></td>\n
<td></td>\n
</tr>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/login_as_manager">Login As Manager</span>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span>\n
\n
<tr>\n
<td>openAndWait</td>\n
<td>${base_url}/Zuite_tearDownPostEventTest</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyTextPresent</td>\n
<td>Clean Ok</td>\n
<td></td>\n
</tr>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span>\n
\n
</tbody>\n
</table>\n
</body>\n
</html>
]]></unicode> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>testHowToPostEvent</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></unicode> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?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>_text</string> </key>
<value> <unicode encoding="cdata"><![CDATA[
<html xmlns:tal="http://xml.zope.org/namespaces/tal"\n
xmlns:metal="http://xml.zope.org/namespaces/metal">\n
<head>\n
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\n
<title>How-To Product</title>\n
</head>\n
<body>\n
<table cellpadding="1" cellspacing="1" border="1">\n
<thead>\n
<tr><td rowspan="1" colspan="3">How-To Product</td></tr>\n
</thead><tbody>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/init_test_environment">init</span>\n
\n
<tr>\n
<td>openAndWait</td>\n
<td>${base_url}/Zuite_setUpProductTest</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyTextPresent</td>\n
<td>Init Ok</td>\n
<td></td>\n
</tr>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities">Wait for activities</span>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/login_as_functional_test_user">Login As Functional Test User</span>\n
\n
<tr>\n
<td>selectAndWait</td>\n
<td>//select[@name="select_module"]</td>\n
<td>Products</td>\n
</tr>\n
<tr>\n
<td>selectAndWait</td>\n
<td>//select[@name="select_action"]</td>\n
<td>Add Product</td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//div[@id="transition_message"]</td>\n
<td>Object created.</td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//li[@class="selected"]/a/span</td>\n
<td>View</td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="field_my_title"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'product_howto_product_title\']"></td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="field_my_reference"]</td>\n
<td>RL 01</td>\n
</tr>\n
<!--\n
<tr>\n
<td>select</td>\n
<td>//select[@name="field_my_product_line"]</td>\n
<td>Equipment/Construction</td>\n
</tr>\n
-->\n
<tr>\n
<td>select</td>\n
<td>//select[@name="field_my_base_contribution_list"]</td>\n
<td>Taxable</td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>//button[@name="Base_edit:method"]</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>link=Purchase</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="field_my_purchase_supply_line_source_title"]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'product_howto_organisation_title\']"></td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="subfield_field_my_purchase_supply_line_start_date_range_max_year"]</td>\n
<td>2010</td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="subfield_field_my_purchase_supply_line_start_date_range_max_month"]</td>\n
<td>10</td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="subfield_field_my_purchase_supply_line_start_date_range_max_day"]</td>\n
<td>01</td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="field_my_purchase_supply_line_base_price"]</td>\n
<td>0.50</td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="field_my_purchase_supply_line_priced_quantity"]</td>\n
<td>1</td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>//button[@name="Base_edit:method"]</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>link=Sale</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="field_my_sale_supply_line_base_price"]</td>\n
<td>1</td>\n
</tr>\n
<tr>\n
<td>type</td>\n
<td>//input[@name="field_my_sale_supply_line_priced_quantity"]</td>\n
<td>1</td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>//button[@name="Base_edit:method"]</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>selectAndWait</td>\n
<td>//select[@name="select_action"]</td>\n
<td>Validate</td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>//button[@id="dialog_submit_button"]</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//li[@class="selected"]/a/span</td>\n
<td>Sale</td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//div[@id="transition_message"]</td>\n
<td>Status changed.</td>\n
</tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>link=View</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//div[@title="The current state of the document."]/div[1]</td>\n
<td>Validated</td>\n
</tr>\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities">Wait for activities</span>\n
<tr>\n
<td>open</td>\n
<td>${base_url}/view</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>selectAndWait</td>\n
<td>//select[@name="select_module"]</td>\n
<td>Products</td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//div[@id="breadcrumb"]/a[1]</td>\n
<td>ERP5</td>\n
</tr>\n
<tr>\n
<td>verifyText</td>\n
<td>//div[@id="breadcrumb"]/a[2]</td>\n
<td>Products</td>\n
</tr>\n
<tal:block tal:content="structure python: here.Zuite_generateListboxBrowsing(listbox_selection=([\'title\', here.Zuite_getHowToInfo()[\'product_howto_product_title\']],), enter_object=True)"/>\n
<tr>\n
<td>verifyText</td>\n
<td>//div[@id="breadcrumb"]/a[3]</td>\n
<td tal:content="python: here.Zuite_getHowToInfo()[\'product_howto_product_title\']"></td>\n
</tr>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/login_as_manager">Login As Manager</span>\n
\n
<tr>\n
<td>openAndWait</td>\n
<td>${base_url}/Zuite_tearDownProductTest</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>verifyTextPresent</td>\n
<td>Clean Ok</td>\n
<td></td>\n
</tr>\n
\n
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span>\n
\n
</tbody>\n
</table>\n
</body>\n
</html>
]]></unicode> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>testHowToProduct</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></unicode> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -19,5 +19,5 @@ portal_categories/quantity_unit/unit/** ...@@ -19,5 +19,5 @@ portal_categories/quantity_unit/unit/**
portal_categories/region/brazil portal_categories/region/brazil
portal_categories/role/** portal_categories/role/**
portal_categories/use/test_functional_incoming_service portal_categories/use/test_functional_incoming_service
portal_tests/user_tutorial_zuite sale_trade_condition_module/1
portal_tests/user_tutorial_zuite/** sale_trade_condition_module/1/**
...@@ -69,8 +69,8 @@ FIXED_PROPERTY_IDS = ('id', 'uid', 'rid', 'sid') ...@@ -69,8 +69,8 @@ FIXED_PROPERTY_IDS = ('id', 'uid', 'rid', 'sid')
VALID_TEXT_FORMAT_LIST = ('text', 'txt', 'html', 'base_html', VALID_TEXT_FORMAT_LIST = ('text', 'txt', 'html', 'base_html',
'stripped-html') 'stripped-html')
VALID_IMAGE_FORMAT_LIST = ('jpg', 'jpeg', 'png', 'gif', 'pnm', 'ppm', 'tiff') VALID_IMAGE_FORMAT_LIST = ('jpg', 'jpeg', 'png', 'gif', 'pnm', 'ppm', 'tiff', 'svg')
VALID_TRANSPARENT_IMAGE_FORMAT_LIST = ('png', 'gif', 'tiff') VALID_TRANSPARENT_IMAGE_FORMAT_LIST = ('png', 'gif', 'tiff', 'svg')
DEFAULT_DISPLAY_ID_LIST = ('nano', 'micro', 'thumbnail', DEFAULT_DISPLAY_ID_LIST = ('nano', 'micro', 'thumbnail',
'xsmall', 'small', 'medium', 'xsmall', 'small', 'medium',
......
...@@ -31,6 +31,7 @@ from AccessControl import ClassSecurityInfo ...@@ -31,6 +31,7 @@ from AccessControl import ClassSecurityInfo
from Products.ERP5Type.Base import WorkflowMethod from Products.ERP5Type.Base import WorkflowMethod
from Products.ERP5Type import Permissions, PropertySheet from Products.ERP5Type import Permissions, PropertySheet
from Products.ERP5.Document.Document import Document, VALID_TEXT_FORMAT_LIST from Products.ERP5.Document.Document import Document, VALID_TEXT_FORMAT_LIST
from Products.ERP5.Document.Document import VALID_IMAGE_FORMAT_LIST
from Products.ERP5.Document.Document import ConversionError from Products.ERP5.Document.Document import ConversionError
from Products.ERP5Type.Base import Base, removeIContentishInterface from Products.ERP5Type.Base import Base, removeIContentishInterface
from Products.CMFDefault.File import File as CMFFile from Products.CMFDefault.File import File as CMFFile
...@@ -241,16 +242,27 @@ class File(Document, CMFFile): ...@@ -241,16 +242,27 @@ class File(Document, CMFFile):
return (mime_type, content) return (mime_type, content)
def _convert(self, format, **kw): def _convert(self, format, **kw):
"""File is not convertable. """File is only convertable if it is an image.
Only original format and text formats are allowed. Only Image conversion, original format and text formats are allowed.
However this document can migrate to another portal_type which support However this document can migrate to another portal_type which support
conversions. others conversions.
""" """
content_type = self.getContentType() or '' content_type = self.getContentType() or ''
if format is None: if (format in VALID_IMAGE_FORMAT_LIST + (None, "")) and \
content_type.startswith("image/"):
# The file should behave like it is an Image for convert
# the content to target format.
from Products.ERP5Type.Document import newTempImage
return newTempImage(self, self.getId(),
data=self.getData(),
content_type=content_type,
filename=self.getFilename())._convert(format, **kw)
elif format in (None, ""):
# No conversion is asked, # No conversion is asked,
# we can return safely the file content itself # we can return safely the file content itself
return content_type, self.getData() return content_type, self.getData()
elif format in VALID_TEXT_FORMAT_LIST: elif format in VALID_TEXT_FORMAT_LIST:
# This is acceptable to return empty string # This is acceptable to return empty string
# for a File we can not convert # for a File we can not convert
......
...@@ -51,6 +51,8 @@ from OFS.Image import Image as OFSImage ...@@ -51,6 +51,8 @@ from OFS.Image import Image as OFSImage
from OFS.Image import getImageInfo from OFS.Image import getImageInfo
from zLOG import LOG, WARNING from zLOG import LOG, WARNING
from Products.ERP5Type.ImageUtil import transformUrlToDataURI
# import mixin # import mixin
from Products.ERP5.mixin.text_convertable import TextConvertableMixin from Products.ERP5.mixin.text_convertable import TextConvertableMixin
...@@ -330,6 +332,10 @@ class Image(TextConvertableMixin, File, OFSImage): ...@@ -330,6 +332,10 @@ class Image(TextConvertableMixin, File, OFSImage):
else: else:
parameter_list.append('-') parameter_list.append('-')
data = str(self.getData())
if self.getContentType() == "image/svg+xml":
data = transformUrlToDataURI(data)
process = subprocess.Popen(parameter_list, process = subprocess.Popen(parameter_list,
stdin=subprocess.PIPE, stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stdout=subprocess.PIPE,
...@@ -338,7 +344,7 @@ class Image(TextConvertableMixin, File, OFSImage): ...@@ -338,7 +344,7 @@ class Image(TextConvertableMixin, File, OFSImage):
try: try:
# XXX: The only portable way is to pass what stdin.write can accept, # XXX: The only portable way is to pass what stdin.write can accept,
# which is a string for PIPE. # which is a string for PIPE.
image, err = process.communicate(str(self.getData())) image, err = process.communicate(data)
finally: finally:
del process del process
if image: if image:
......
...@@ -48,6 +48,8 @@ from Products.ERP5Type.Utils import guessEncodingFromText ...@@ -48,6 +48,8 @@ from Products.ERP5Type.Utils import guessEncodingFromText
from lxml import html as etree_html from lxml import html as etree_html
from lxml import etree from lxml import etree
from Products.ERP5Type.ImageUtil import transformUrlToDataURI
class TextDocument(CachedConvertableMixin, BaseConvertableFileMixin, class TextDocument(CachedConvertableMixin, BaseConvertableFileMixin,
TextContent, File): TextContent, File):
"""A TextDocument impletents IDocument, IFile, IBaseConvertable, ICachedconvertable """A TextDocument impletents IDocument, IFile, IBaseConvertable, ICachedconvertable
...@@ -156,19 +158,21 @@ class TextDocument(CachedConvertableMixin, BaseConvertableFileMixin, ...@@ -156,19 +158,21 @@ class TextDocument(CachedConvertableMixin, BaseConvertableFileMixin,
filename = self.getFilename() filename = self.getFilename()
if mime_type == 'text/html': if mime_type == 'text/html':
mime_type = 'text/x-html-safe' mime_type = 'text/x-html-safe'
result = portal_transforms.convertToData(mime_type, text_content, if src_mimetype != "image/svg+xml":
result = portal_transforms.convertToData(mime_type, text_content,
object=self, context=self, object=self, context=self,
filename=filename, filename=filename,
mimetype=src_mimetype, mimetype=src_mimetype,
**convert_kw) **convert_kw)
if result is None: if result is None:
raise ConversionError('TextDocument conversion error. ' raise ConversionError('TextDocument conversion error. '
'portal_transforms failed to convert ' 'portal_transforms failed to convert '
'from %r to %s: %r' % 'from %r to %s: %r' %
(src_mimetype, mime_type, self)) (src_mimetype, mime_type, self))
else:
result = text_content
if format in VALID_IMAGE_FORMAT_LIST: if format in VALID_IMAGE_FORMAT_LIST:
# do resize by temporary image # Include extra parameter for image conversions
temp_image = self.portal_contributions.newContent( temp_image = self.portal_contributions.newContent(
portal_type='Image', portal_type='Image',
file=cStringIO.StringIO(), file=cStringIO.StringIO(),
...@@ -176,6 +180,7 @@ class TextDocument(CachedConvertableMixin, BaseConvertableFileMixin, ...@@ -176,6 +180,7 @@ class TextDocument(CachedConvertableMixin, BaseConvertableFileMixin,
temp_object=1) temp_object=1)
temp_image._setData(result) temp_image._setData(result)
mime, result = temp_image.convert(**kw) mime, result = temp_image.convert(**kw)
self.setConversion(result, original_mime_type, **kw) self.setConversion(result, original_mime_type, **kw)
else: else:
mime_type, result = self.getConversion(**kw) mime_type, result = self.getConversion(**kw)
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Transform" module="Products.PortalTransforms.Transform"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_config</string> </key>
<value>
<object>
<klass>
<global id="1.1" name="UserDict" module="UserDict"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>__allow_access_to_unprotected_subobjects__</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>data</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_config_metadata</string> </key>
<value>
<object>
<klass> <reference id="1.1"/> </klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>image_to_svg</string> </value>
</item>
<item>
<key> <string>inputs</string> </key>
<value>
<tuple>
<string>image/*</string>
</tuple>
</value>
</item>
<item>
<key> <string>module</string> </key>
<value> <string>Products.PortalTransforms.transforms.image_to_svg</string> </value>
</item>
<item>
<key> <string>output</string> </key>
<value> <string>image/svg</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -79,8 +79,8 @@ ...@@ -79,8 +79,8 @@
<key> <string>hidden</string> </key> <key> <string>hidden</string> </key>
<value> <value>
<list> <list>
<string>listbox_delivery_start_date</string> <string>listbox_movement_start_date</string>
<string>listbox_delivery_stop_date</string> <string>listbox_movement_stop_date</string>
</list> </list>
</value> </value>
</item> </item>
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
<value> <value>
<list> <list>
<string>anchor</string> <string>anchor</string>
<string>columns</string>
<string>lines</string> <string>lines</string>
<string>list_action</string> <string>list_action</string>
<string>list_method</string> <string>list_method</string>
...@@ -114,6 +115,33 @@ ...@@ -114,6 +115,33 @@
<key> <string>anchor</string> </key> <key> <string>anchor</string> </key>
<value> <int>0</int> </value> <value> <int>0</int> </value>
</item> </item>
<item>
<key> <string>columns</string> </key>
<value>
<list>
<tuple>
<string>id</string>
<string>ID</string>
</tuple>
<tuple>
<string>title</string>
<string>Title</string>
</tuple>
<tuple>
<string>translated_portal_type</string>
<string>Type</string>
</tuple>
<tuple>
<string>movement.start_date</string>
<string>Start Date</string>
</tuple>
<tuple>
<string>constant_string_field</string>
<string>Constant</string>
</tuple>
</list>
</value>
</item>
<item> <item>
<key> <string>field_id</string> </key> <key> <string>field_id</string> </key>
<value> <string>listbox</string> </value> <value> <string>listbox</string> </value>
......
<?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>title</string>
<string>editable</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>listbox_movement_start_date</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>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>editable</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_date</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewFieldLibrary</string> </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>Date</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>listbox_delivery_stop_date</string> </value> <value> <string>listbox_movement_stop_date</string> </value>
</item> </item>
<item> <item>
<key> <string>message_values</string> </key> <key> <string>message_values</string> </key>
......
This diff is collapsed.
This diff is collapsed.
...@@ -30,42 +30,35 @@ import unittest ...@@ -30,42 +30,35 @@ import unittest
from Products.ERP5Type.tests.ERP5TypeFunctionalTestCase import \ from Products.ERP5Type.tests.ERP5TypeFunctionalTestCase import \
ERP5TypeFunctionalTestCase ERP5TypeFunctionalTestCase
from Products.ERP5Type.tests.testFunctionalStandaloneUserTutorial import \
BASE_REMOTE_SELENIUM_TEST_URL_LIST
class TestZeleniumConfiguratorStandard(ERP5TypeFunctionalTestCase): class TestZeleniumConfiguratorStandard(ERP5TypeFunctionalTestCase):
foreground = 0
run_only = "configurator_standard_zuite" run_only = "configurator_standard_zuite"
def setupVirtualTestZuite(self): remote_code_url_list = [
""" "http://www.erp5.com/user-Howto.Configure.ERP5.for.SMB.With.Configurator/TestPage_viewSeleniumTest"
After execute the configuration, it is also required to ] + BASE_REMOTE_SELENIUM_TEST_URL_LIST
run all user tutorial tests in order to validate the
configuration. This copy user tutorial zuite to same
place as Configurator test.
"""
portal_tests = self.portal.portal_tests
configurator_zuite = getattr(portal_tests, self.run_only)
if getattr(configurator_zuite, "user_tutorial_zuite", None) is not None:
clipboard = portal_tests.manage_copyObjects(ids=['user_tutorial_zuite'])
configurator_zuite.manage_pasteObjects(cb_copy_data=clipboard)
self.stepTic()
public_bt5_repository_list = ['http://www.erp5.org/dists/snapshot/bt5/']
template_list = self._getBTPathAndIdList(["erp5_base"])
if len(template_list) > 0:
bt5_repository_path = "/".join(template_list[0][0].split("/")[:-1])
try:
self.portal.portal_templates.updateRepositoryBusinessTemplateList(
[bt5_repository_path], None)
except (RuntimeError, IOError):
# If bt5 repository is not a repository use public one.
self.portal.portal_templates.updateRepositoryBusinessTemplateList(
public_bt5_repository_list)
else:
self.portal.portal_templates.updateRepositoryBusinessTemplateList(
public_bt5_repository_list)
def afterSetUp(self): def afterSetUp(self):
self.setupVirtualTestZuite() # information to know if a business template is a standard business
ERP5TypeFunctionalTestCase.afterSetUp(self) # template or a custom one
public_bt5_repository_list = ['http://www.erp5.org/dists/snapshot/bt5/']
template_list = self._getBTPathAndIdList(["erp5_base"])
if len(template_list) > 0:
bt5_repository_path = "/".join(template_list[0][0].split("/")[:-1])
try:
self.portal.portal_templates.updateRepositoryBusinessTemplateList(
[bt5_repository_path], None)
except (RuntimeError, IOError):
# If bt5 repository is not a repository use public one.
self.portal.portal_templates.updateRepositoryBusinessTemplateList(
public_bt5_repository_list)
else:
self.portal.portal_templates.updateRepositoryBusinessTemplateList(
public_bt5_repository_list)
print self.portal.portal_templates.getRepositoryList()
ERP5TypeFunctionalTestCase.afterSetUp(self)
def getBusinessTemplateList(self): def getBusinessTemplateList(self):
""" """
...@@ -76,7 +69,8 @@ class TestZeleniumConfiguratorStandard(ERP5TypeFunctionalTestCase): ...@@ -76,7 +69,8 @@ class TestZeleniumConfiguratorStandard(ERP5TypeFunctionalTestCase):
'erp5_configurator', 'erp5_configurator_standard', 'erp5_configurator', 'erp5_configurator_standard',
# Test suite # Test suite
'erp5_ui_test_core', 'erp5_configurator_standard_ui_test', 'erp5_ui_test_core', 'erp5_configurator_standard_ui_test',
'erp5_user_tutorial_ui_test') 'erp5_user_tutorial_ui_test'
)
def test_suite(): def test_suite():
suite = unittest.TestSuite() suite = unittest.TestSuite()
......
This diff is collapsed.
...@@ -71,6 +71,8 @@ from Products.ERP5Type.patches import OFSHistory ...@@ -71,6 +71,8 @@ from Products.ERP5Type.patches import OFSHistory
from Products.ERP5Type.patches import OFSItem from Products.ERP5Type.patches import OFSItem
from Products.ERP5Type.patches import ExternalMethod from Products.ERP5Type.patches import ExternalMethod
from Products.ERP5Type.patches import User from Products.ERP5Type.patches import User
from Products.ERP5Type.patches import zopecontenttype
from Products.ERP5Type.patches import OFSImage
# These symbols are required for backward compatibility # These symbols are required for backward compatibility
from Products.ERP5Type.patches.PropertyManager import ERP5PropertyManager from Products.ERP5Type.patches.PropertyManager import ERP5PropertyManager
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment