Commit cb397f05 authored by Ivan Tyagov's avatar Ivan Tyagov

Add latest work of Xavier Hardy.

parent ca2fd9c4
......@@ -107,7 +107,7 @@
<key> <string>categories</string> </key>
<value>
<tuple>
<string>resource/workflow_module/runmydocs_configuration_workflow</string>
<string>resource/workflow_module/run_my_doc_configuration_workflow</string>
</tuple>
</value>
</item>
......@@ -119,7 +119,7 @@
</item>
<item>
<key> <string>configuration_after_script_id</string> </key>
<value> <string>BusinessConfiguration_afterRunMyDocsConfiguration</string> </value>
<value> <string>BusinessConfiguration_afterRunMyDocConfiguration</string> </value>
</item>
<item>
<key> <string>creation_date</string> </key>
......@@ -133,7 +133,7 @@
</tuple>
<state>
<tuple>
<float>1321225200.0</float>
<float>1323385200.0</float>
<string>GMT+1</string>
</tuple>
</state>
......@@ -142,11 +142,11 @@
</item>
<item>
<key> <string>description</string> </key>
<value> <string>RunMyDocs doubles the productivity of documentation by making marketers and developers collaborate automatically.</string> </value>
<value> <string>RunMyDoc doubles the productivity of documentation by making marketers and developers collaborate automatically.</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>runmydocs_configuration</string> </value>
<value> <string>run_my_doc_configuration</string> </value>
</item>
<item>
<key> <string>language</string> </key>
......@@ -164,7 +164,7 @@
</tuple>
<state>
<tuple>
<float>1321225200.0</float>
<float>1323730800.0</float>
<string>GMT+1</string>
</tuple>
</state>
......@@ -177,11 +177,11 @@
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Run My Docs</string> </value>
<value> <string>Run My Doc</string> </value>
</item>
<item>
<key> <string>user_interface_description_file_id</string> </key>
<value> <string>runmydocs_configuration_ui_description.ods</string> </value>
<value> <string>runmydoc_configuration_ui_description.ods</string> </value>
</item>
<item>
<key> <string>version</string> </key>
......
......@@ -45,17 +45,17 @@
<key> <string>categories</string> </key>
<value>
<tuple>
<string>source/workflow_module/runmydocs_configuration_workflow/1</string>
<string>source/workflow_module/run_my_doc_configuration_workflow/1</string>
</tuple>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>The default RunMyDocs configuration workflow.</string> </value>
<value> <string>The default RunMyDoc configuration workflow.</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>runmydocs_configuration_workflow</string> </value>
<value> <string>run_my_doc_configuration_workflow</string> </value>
</item>
<item>
<key> <string>language</string> </key>
......@@ -77,7 +77,7 @@
</item>
<item>
<key> <string>title</string> </key>
<value> <string>RunMyDocs Configuration Workflow</string> </value>
<value> <string>RunMyDoc Configuration Workflow</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -28,7 +28,7 @@
<key> <string>categories</string> </key>
<value>
<tuple>
<string>destination/workflow_module/runmydocs_configuration_workflow/56</string>
<string>destination/workflow_module/run_my_doc_configuration_workflow/56</string>
</tuple>
</value>
</item>
......
......@@ -28,7 +28,7 @@
<key> <string>categories</string> </key>
<value>
<tuple>
<string>destination/workflow_module/runmydocs_configuration_workflow/64</string>
<string>destination/workflow_module/run_my_doc_configuration_workflow/64</string>
</tuple>
</value>
</item>
......
......@@ -43,13 +43,13 @@
</item>
<item>
<key> <string>after_script_id</string> </key>
<value> <string>BusinessConfiguration_setupRunMyDocsList</string> </value>
<value> <string>BusinessConfiguration_setupRunMyDocList</string> </value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>destination/workflow_module/runmydocs_configuration_workflow/9</string>
<string>destination/workflow_module/run_my_doc_configuration_workflow/9</string>
</tuple>
</value>
</item>
......@@ -83,7 +83,7 @@
</item>
<item>
<key> <string>transition_form_id</string> </key>
<value> <string>BusinessConfiguration_setupRunMyDocsUserListForm</string> </value>
<value> <string>BusinessConfiguration_setupRunMyDocUserListForm</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -28,7 +28,7 @@
<key> <string>categories</string> </key>
<value>
<tuple>
<string>causality/workflow_module/runmydocs_configuration_workflow/16</string>
<string>causality/workflow_module/run_my_doc_configuration_workflow/16</string>
</tuple>
</value>
</item>
......
......@@ -34,7 +34,7 @@
<key> <string>categories</string> </key>
<value>
<tuple>
<string>destination/workflow_module/runmydocs_configuration_workflow/11</string>
<string>destination/workflow_module/run_my_doc_configuration_workflow/11</string>
</tuple>
</value>
</item>
......@@ -62,7 +62,7 @@
</item>
<item>
<key> <string>transition_form_id</string> </key>
<value> <string>BusinessConfiguration_displayRunMyDocsDownloadForm</string> </value>
<value> <string>BusinessConfiguration_displayRunMyDocDownloadForm</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -45,7 +45,7 @@
<key> <string>categories</string> </key>
<value>
<tuple>
<string>destination/workflow_module/runmydocs_configuration_workflow/4</string>
<string>destination/workflow_module/run_my_doc_configuration_workflow/4</string>
</tuple>
</value>
</item>
......
......@@ -26,13 +26,13 @@
</item>
<item>
<key> <string>after_script_id</string> </key>
<value> <string>BusinessConfiguration_setupRunMyDocsWizardBT5</string> </value>
<value> <string>BusinessConfiguration_setupRunMyDocWizardBT5</string> </value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>destination/workflow_module/runmydocs_configuration_workflow/29</string>
<string>destination/workflow_module/run_my_doc_configuration_workflow/29</string>
</tuple>
</value>
</item>
......
......@@ -28,7 +28,7 @@
<key> <string>categories</string> </key>
<value>
<tuple>
<string>destination/workflow_module/runmydocs_configuration_workflow/14</string>
<string>destination/workflow_module/run_my_doc_configuration_workflow/14</string>
</tuple>
</value>
</item>
......
......@@ -43,13 +43,13 @@
</item>
<item>
<key> <string>after_script_id</string> </key>
<value> <string>BusinessConfiguration_setupRunMyDocsPreferences</string> </value>
<value> <string>BusinessConfiguration_setupRunMyDocPreferences</string> </value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>destination/workflow_module/runmydocs_configuration_workflow/31</string>
<string>destination/workflow_module/run_my_doc_configuration_workflow/31</string>
</tuple>
</value>
</item>
......@@ -83,7 +83,7 @@
</item>
<item>
<key> <string>transition_form_id</string> </key>
<value> <string>BusinessConfiguration_setupRunMyDocsPreferencesForm</string> </value>
<value> <string>BusinessConfiguration_setupRunMyDocPreferencesForm</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -26,13 +26,13 @@
</item>
<item>
<key> <string>after_script_id</string> </key>
<value> <string>BusinessConfiguration_setupRunMyDocsOrganisation</string> </value>
<value> <string>BusinessConfiguration_setupRunMyDocOrganisation</string> </value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>destination/workflow_module/runmydocs_configuration_workflow/8</string>
<string>destination/workflow_module/run_my_doc_configuration_workflow/8</string>
</tuple>
</value>
</item>
......@@ -60,7 +60,7 @@
</item>
<item>
<key> <string>transition_form_id</string> </key>
<value> <string>BusinessConfiguration_setupRunMyDocsOrganisationForm</string> </value>
<value> <string>BusinessConfiguration_setupRunMyDocOrganisationForm</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -28,7 +28,7 @@
<key> <string>categories</string> </key>
<value>
<tuple>
<string>destination/workflow_module/runmydocs_configuration_workflow/30</string>
<string>destination/workflow_module/run_my_doc_configuration_workflow/30</string>
</tuple>
</value>
</item>
......
......@@ -43,17 +43,17 @@
</item>
<item>
<key> <string>after_script_id</string> </key>
<value> <string>BusinessConfiguration_setupRunMyDocsStandardBT5</string> </value>
<value> <string>BusinessConfiguration_setupRunMyDocStandardBT5</string> </value>
</item>
<item>
<key> <string>before_script_id</string> </key>
<value> <string>BusinessConfiguration_setupRunMyDocsStandardInit</string> </value>
<value> <string>BusinessConfiguration_setupRunMyDocStandardInit</string> </value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>destination/workflow_module/runmydocs_configuration_workflow/55</string>
<string>destination/workflow_module/run_my_doc_configuration_workflow/55</string>
</tuple>
</value>
</item>
......
......@@ -28,7 +28,7 @@
<key> <string>categories</string> </key>
<value>
<tuple>
<string>destination/workflow_module/runmydocs_configuration_workflow/12</string>
<string>destination/workflow_module/run_my_doc_configuration_workflow/12</string>
</tuple>
</value>
</item>
......
......@@ -26,13 +26,13 @@
</item>
<item>
<key> <string>after_script_id</string> </key>
<value> <string>BusinessConfiguration_setupRunMyDocsUserNumber</string> </value>
<value> <string>BusinessConfiguration_setupRunMyDocUserNumber</string> </value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>destination/workflow_module/runmydocs_configuration_workflow/61</string>
<string>destination/workflow_module/run_my_doc_configuration_workflow/61</string>
</tuple>
</value>
</item>
......@@ -60,7 +60,7 @@
</item>
<item>
<key> <string>transition_form_id</string> </key>
<value> <string>BusinessConfiguration_setupRunMyDocsUserNumberForm</string> </value>
<value> <string>BusinessConfiguration_setupRunMyDocUserNumberForm</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -28,7 +28,7 @@
<key> <string>categories</string> </key>
<value>
<tuple>
<string>destination/workflow_module/runmydocs_configuration_workflow/63</string>
<string>destination/workflow_module/run_my_doc_configuration_workflow/63</string>
</tuple>
</value>
</item>
......
......@@ -45,7 +45,7 @@
<key> <string>categories</string> </key>
<value>
<tuple>
<string>destination/workflow_module/runmydocs_configuration_workflow/62</string>
<string>destination/workflow_module/run_my_doc_configuration_workflow/62</string>
</tuple>
</value>
</item>
......
......@@ -45,7 +45,7 @@
<key> <string>categories</string> </key>
<value>
<tuple>
<string>destination/workflow_module/runmydocs_configuration_workflow/32</string>
<string>destination/workflow_module/run_my_doc_configuration_workflow/32</string>
</tuple>
</value>
</item>
......
......@@ -58,32 +58,32 @@ portal_preferences = portal.portal_preferences\n
business_template = context.getSpecialiseValue()\n
isTransitionPossible = portal.portal_workflow.isTransitionPossible\n
\n
# enable runmydocs preference\n
runmydocs_preference = getattr(portal.portal_preferences, \'runmydocs_preference\', None)\n
if runmydocs_preference is not None and isTransitionPossible(runmydocs_preference, \'enable\'):\n
runmydocs_preference.enable()\n
# enable runmydoc preference\n
runmydoc_preference = getattr(portal.portal_preferences, \'runmydoc_preference\', None)\n
if runmydoc_preference is not None and isTransitionPossible(runmydoc_preference, \'enable\'):\n
runmydoc_preference.enable()\n
\n
# Access Front Tab enabled for everyone\n
for preference in context.portal_catalog(portal_type = \'Preference\'):\n
preference.setPreferredHtmlStyleAccessTab(1)\n
\n
"""\n
# publish the runmydocs web site\n
runmydocs_web_site = getattr(portal.web_site_module, \'runmydocs\', None)\n
if runmydocs_web_site is not None and isTransitionPossible(runmydocs_web_site, \'publish\', None):\n
runmydocs_web_site.publish()\n
# publish the runmydoc web site\n
runmydoc_web_site = getattr(portal.web_site_module, \'runmydoc\', None)\n
if runmydoc_web_site is not None and isTransitionPossible(runmydoc_web_site, \'publish\', None):\n
runmydoc_web_site.publish()\n
"""\n
\n
language = context.getGlobalConfigurationAttr("default_available_language")\n
\n
"""\n
runmydocs_web_site.setDefaultAvailableLanguage(language)\n
for web_section in runmydocs_web_site.contentValues(portal_types=\'Web Section\'):\n
runmydoc_web_site.setDefaultAvailableLanguage(language)\n
for web_section in runmydoc_web_site.contentValues(portal_types=\'Web Section\'):\n
if isTransitionPossible(web_section, \'publish\', None):\n
web_section.publish()\n
\n
bt5 = portal.portal_catalog.getResultValue(portal_type="Business Template",\n
title="erp5_web_runmydocs_role")\n
title="erp5_web_runmydoc_role")\n
\n
if bt5 is not None:\n
for portal_type in bt5.getTemplatePortalTypeRolesList():\n
......@@ -165,6 +165,10 @@ portal.ERP5Site_updateTranslationTable()\n
# clear cache so user security is recalculated\n
portal.portal_caches.clearAllCache()\n
context.log("Clear cache.")\n
\n
context.log("Reindexing objects and updating roles.")\n
context.BusinessConfiguration_reindexRunMyDocObjectsAndRoles()\n
context.log("Objects reindex and roles updates.")\n
</string> </value>
</item>
<item>
......@@ -173,7 +177,7 @@ context.log("Clear cache.")\n
</item>
<item>
<key> <string>id</string> </key>
<value> <string>BusinessConfiguration_afterRunMyDocsConfiguration</string> </value>
<value> <string>BusinessConfiguration_afterRunMyDocConfiguration</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -91,7 +91,7 @@
</item>
<item>
<key> <string>id</string> </key>
<value> <string>BusinessConfiguration_displayRunMyDocsDownloadForm</string> </value>
<value> <string>BusinessConfiguration_displayRunMyDocDownloadForm</string> </value>
</item>
<item>
<key> <string>method</string> </key>
......
......@@ -68,7 +68,7 @@ return {\n
</item>
<item>
<key> <string>id</string> </key>
<value> <string>BusinessConfiguration_getRunMyDocsAvailableL10NBusinessTemplateList</string> </value>
<value> <string>BusinessConfiguration_getRunMyDocAvailableL10NBusinessTemplateList</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -67,7 +67,7 @@ return date_order_list\n
</item>
<item>
<key> <string>id</string> </key>
<value> <string>BusinessConfiguration_getRunMyDocsPreferredDateOrderList</string> </value>
<value> <string>BusinessConfiguration_getRunMyDocPreferredDateOrderList</string> </value>
</item>
</dictionary>
</pickle>
......
<?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>_body</string> </key>
<value> <string>""" This script reindex all the objects created before updating local roles """\n
module_list = [\'document\',\n
\'image\',\n
\'knowledge_pad\',\n
\'organisation\',\n
\'person\',\n
\'review\',\n
\'test_page\',\n
\'web_page\',\n
\'web_site\']\n
\n
context.portal_types.recursiveImmediateReindexObject()\n
for module_content_name in module_list:\n
module_name = module_content_name + \'_module\'\n
module = context.restrictedTraverse(\'erp5/\' + module_name) \n
module.recursiveImmediateReindexObject()\n
stack = [module]\n
for obj in stack:\n
for child in obj.objectValues():\n
stack.append(child)\n
obj.updateLocalRolesOnSecurityGroups()\n
obj.reindexObjectSecurity()\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>BusinessConfiguration_reindexRunMyDocObjectsAndRoles</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
......@@ -89,7 +89,7 @@ else:\n
</item>
<item>
<key> <string>id</string> </key>
<value> <string>BusinessConfiguration_setupRunMyDocsList</string> </value>
<value> <string>BusinessConfiguration_setupRunMyDocList</string> </value>
</item>
<item>
<key> <string>title</string> </key>
......
......@@ -70,7 +70,7 @@ context.setGlobalConfigurationAttr(\n
</item>
<item>
<key> <string>id</string> </key>
<value> <string>BusinessConfiguration_setupRunMyDocsOrganisation</string> </value>
<value> <string>BusinessConfiguration_setupRunMyDocOrganisation</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -92,7 +92,7 @@
</item>
<item>
<key> <string>id</string> </key>
<value> <string>BusinessConfiguration_setupRunMyDocsOrganisationForm</string> </value>
<value> <string>BusinessConfiguration_setupRunMyDocOrganisationForm</string> </value>
</item>
<item>
<key> <string>method</string> </key>
......
......@@ -115,7 +115,7 @@ configuration_save.addConfigurationItem(\'System Preference Configurator Item\',
**system_prefs)\n
\n
if default_available_language and default_available_language != "en":\n
language_dict = context.BusinessConfiguration_getRunMyDocsAvailableL10NBusinessTemplateList()\n
language_dict = context.BusinessConfiguration_getRunMyDocAvailableL10NBusinessTemplateList()\n
bt5 = language_dict.get(default_available_language)\n
if bt5:\n
configuration_save.addConfigurationItem("Standard BT5 Configurator Item",\n
......@@ -138,7 +138,7 @@ if default_available_language and default_available_language != "en":\n
</item>
<item>
<key> <string>id</string> </key>
<value> <string>BusinessConfiguration_setupRunMyDocsPreferences</string> </value>
<value> <string>BusinessConfiguration_setupRunMyDocPreferences</string> </value>
</item>
<item>
<key> <string>title</string> </key>
......
......@@ -110,7 +110,7 @@
</item>
<item>
<key> <string>id</string> </key>
<value> <string>BusinessConfiguration_setupRunMyDocsPreferencesForm</string> </value>
<value> <string>BusinessConfiguration_setupRunMyDocPreferencesForm</string> </value>
</item>
<item>
<key> <string>method</string> </key>
......
......@@ -272,7 +272,7 @@
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python: [(v[\'name\'], k) for k,v in context.BusinessConfiguration_getRunMyDocsAvailableL10NBusinessTemplateList().items()] + [(context.Base_translateString(\'English\'), "en"),]</string> </value>
<value> <string>python: [(v[\'name\'], k) for k,v in context.BusinessConfiguration_getRunMyDocAvailableL10NBusinessTemplateList().items()] + [(context.Base_translateString(\'English\'), "en"),]</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -284,7 +284,7 @@
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>here/BusinessConfiguration_getRunMyDocsPreferredDateOrderList</string> </value>
<value> <string>here/BusinessConfiguration_getRunMyDocPreferredDateOrderList</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -61,7 +61,8 @@ bt5_installation_list = (\'erp5_jquery\',\n
\'erp5_jquery_ui\',\n
\'erp5_slideshow_style\',\n
\'erp5_knowledge_pad\',\n
\'erp5_run_my_docs\')\n
\'erp5_run_my_doc\',\n
\'erp5_run_my_doc_roles\')\n
\n
bt5_update_catalog = (\'erp5_ingestion_mysql_innodb_catalog\')\n
\n
......@@ -78,7 +79,7 @@ for name in bt5_installation_list:\n
</item>
<item>
<key> <string>id</string> </key>
<value> <string>BusinessConfiguration_setupRunMyDocsStandardBT5</string> </value>
<value> <string>BusinessConfiguration_setupRunMyDocStandardBT5</string> </value>
</item>
<item>
<key> <string>title</string> </key>
......
......@@ -53,10 +53,10 @@
<value> <string># Update Business Configuration Properties if not set.\n
\n
if context.getUserInterfaceDescriptionFileId() is None:\n
context.setUserInterfaceDescriptionFileId("runmydocs_configuration_ui_description.ods")\n
context.setUserInterfaceDescriptionFileId("runmydoc_configuration_ui_description.ods")\n
\n
if context.getConfigurationAfterScriptId() is None:\n
context.setConfigurationAfterScriptId(\'BusinessConfiguration_afterRunMyDocsConfiguration\')\n
context.setConfigurationAfterScriptId(\'BusinessConfiguration_afterRunMyDocConfiguration\')\n
</string> </value>
</item>
<item>
......@@ -65,7 +65,7 @@ if context.getConfigurationAfterScriptId() is None:\n
</item>
<item>
<key> <string>id</string> </key>
<value> <string>BusinessConfiguration_setupRunMyDocsStandardInit</string> </value>
<value> <string>BusinessConfiguration_setupRunMyDocStandardInit</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -102,7 +102,7 @@
</item>
<item>
<key> <string>id</string> </key>
<value> <string>BusinessConfiguration_setupRunMyDocsUserListForm</string> </value>
<value> <string>BusinessConfiguration_setupRunMyDocUserListForm</string> </value>
</item>
<item>
<key> <string>method</string> </key>
......
......@@ -76,7 +76,7 @@ context.setGlobalConfigurationAttr(user_number=user_number)\n
</item>
<item>
<key> <string>id</string> </key>
<value> <string>BusinessConfiguration_setupRunMyDocsUserNumber</string> </value>
<value> <string>BusinessConfiguration_setupRunMyDocUserNumber</string> </value>
</item>
<item>
<key> <string>title</string> </key>
......
......@@ -95,7 +95,7 @@
</item>
<item>
<key> <string>id</string> </key>
<value> <string>BusinessConfiguration_setupRunMyDocsUserNumberForm</string> </value>
<value> <string>BusinessConfiguration_setupRunMyDocUserNumberForm</string> </value>
</item>
<item>
<key> <string>method</string> </key>
......
......@@ -61,7 +61,7 @@ configuration_save.addConfigurationItem("Customer BT5 Configurator Item", \n
</item>
<item>
<key> <string>id</string> </key>
<value> <string>BusinessConfiguration_setupRunMyDocsWizardBT5</string> </value>
<value> <string>BusinessConfiguration_setupRunMyDocWizardBT5</string> </value>
</item>
<item>
<key> <string>title</string> </key>
......
<?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>_EtagSupport__etag</string> </key>
<value> <string>ts23771984.23</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>runmydoc_configuration_ui_description.ods</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/vnd.oasis.opendocument.spreadsheet</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">UEsDBBQAAAgAADBTjT+FbDmKLgAAAC4AAAAIAAAAbWltZXR5cGVhcHBsaWNhdGlvbi92bmQub2Fz
aXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0UEsDBBQAAAgAADBTjT94wDbEDAQAAAwEAAAIAAAA
bWV0YS54bWw8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pgo8b2ZmaWNlOmRv
Y3VtZW50LW1ldGEgeG1sbnM6b2ZmaWNlPSJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50
OnhtbG5zOm9mZmljZToxLjAiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hs
aW5rIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOm1l
dGE9InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6bWV0YToxLjAiIHhtbG5z
Om9vbz0iaHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMDQvb2ZmaWNlIiB4bWxuczpncmRkbD0iaHR0
cDovL3d3dy53My5vcmcvMjAwMy9nL2RhdGEtdmlldyMiIG9mZmljZTp2ZXJzaW9uPSIxLjIiPjxv
ZmZpY2U6bWV0YT48bWV0YTpnZW5lcmF0b3I+TGlicmVPZmZpY2UvMy40JFVuaXggTGlicmVPZmZp
Y2VfcHJvamVjdC8zNDBtMSRCdWlsZC00MDI8L21ldGE6Z2VuZXJhdG9yPjxtZXRhOmNyZWF0aW9u
LWRhdGU+MjAxMS0wMS0xMVQxMjozNzo0NDwvbWV0YTpjcmVhdGlvbi1kYXRlPjxkYzpsYW5ndWFn
ZT5mci1GUjwvZGM6bGFuZ3VhZ2U+PG1ldGE6ZWRpdGluZy1jeWNsZXM+MjQ8L21ldGE6ZWRpdGlu
Zy1jeWNsZXM+PG1ldGE6ZWRpdGluZy1kdXJhdGlvbj5QVDQ5TTU5UzwvbWV0YTplZGl0aW5nLWR1
cmF0aW9uPjxkYzpkYXRlPjIwMTEtMTItMTNUMTE6MjU6MzE8L2RjOmRhdGU+PGRjOmNyZWF0b3I+
WGF2aWVyIDwvZGM6Y3JlYXRvcj48bWV0YTpkb2N1bWVudC1zdGF0aXN0aWMgbWV0YTp0YWJsZS1j
b3VudD0iMSIgbWV0YTpjZWxsLWNvdW50PSIxOCIgbWV0YTpvYmplY3QtY291bnQ9IjAiLz48bWV0
YTp1c2VyLWRlZmluZWQgbWV0YTpuYW1lPSJJbmZvIDEiLz48bWV0YTp1c2VyLWRlZmluZWQgbWV0
YTpuYW1lPSJJbmZvIDIiLz48bWV0YTp1c2VyLWRlZmluZWQgbWV0YTpuYW1lPSJJbmZvIDMiLz48
bWV0YTp1c2VyLWRlZmluZWQgbWV0YTpuYW1lPSJJbmZvIDQiLz48L29mZmljZTptZXRhPjwvb2Zm
aWNlOmRvY3VtZW50LW1ldGE+UEsDBBQACAgIADBTjT8AAAAAAAAAAAAAAAAMAAAAc2V0dGluZ3Mu
eG1s7Vpbc9o4FH7fX5Hx606KoQ27ZhI6tsutTWhig0l4k22B1ciSR5Ix5NevjKGbOpgQsDvt7PLA
xZK+c3zu55jLj8sQny0g44iSK6X+TlXOIPGoj8j8ShmPuud/Kx/bf1zS2Qx5sOVTLw4hEeccCiG3
8DN5nPBWtnylxIy0KOCItwgIIW8Jr0UjSLbHWs93t9bEsitLjMjjlRIIEbVqtSRJ3iXv31E2r9U1
TautV7dbPUpmaH4oqWz3c1KU0u+E0gMZM2tiDVX9UMt+K2cbJp+JpqG0t3LY3n77ckMg+zhHAoap
bM42l1PWrhRJsrVAMPkuNWXXuR/POIgjF0OdQTCikbJdFKtILiIilLZ6WXsJ8ibgazgT1SBPkC+C
XdCNv5raxcnwfYjmwU7WG01NOxT+PATROSI+XEI/Twomu5W0PiPNi60OYRgmAz/HJRdMWoDSTu2h
/iZOU9AcnyMgBfIaoz8e6cIYYQzrB5igGTNO2S3lSEgPuN8l7oPvYB/yQ4nIfcrQEyUCYDvCSNxQ
H+YVEFB2go1DJpBXFXqO+62AyvTR5/xXgK97Ai3gGt0CZF4gnsZx4Ft+S45bW1irKKiciFtu/N6i
GlQIGpYIPKU0HEmUUi06BXUAjvOomY+rx8oAzGEaXfeiN48EtwOa9BjKB26XUgwBUdqCxXA38o6L
z/NF0fI6sB/qWuuQX5BTtrH95ODjMYqxC9ieNP6/kZ1sZCkBQ1Yzj7cMpuVAkcHNAOYFFncImSlk
dM0/f7tFH4I/pKIq6OPc8DXkFNWkmLIcNKapE9UbzfeNxkWzBL1WIJU+4JL1OCQWTfoQ+LI7qYSI
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
mxDZhMgmRDYhsgmRTYhsQmQTIpsQ2YTIJkQ2IbIJkU2IbEJkEyKbENmEyCZENiGyCZFNiGxCZBMi
mxDZhMgmRDYhsgmRTYhsQmQTIpsQ2YTIJkQ2IbIJkU2IbEJkEyKbENmEyCZENiGyCZFNiGxCZBMi
mxDZhMgmRDYhsgmRTYhsQmQTIpsQ2YTIJkQ2IbIJkU2IbEJkEyKbENmEyCZENiGyCZFNiGxCZBMi
mxDZhMgmRDYhsgmRTYhsQmQTIpsQ2YTIJkQ2IbIJkU2IbEJkEyKbENmEyCZENiGyCZFNiGxCZBMi
mxDZhMgmRDYhsgmRTYhsQmQTIpsQ2YTIJkQ2IbIJkU2IbEJkEyKbENmEyCZENiGyCZFNiGxCZBMi
mxDZhMgmRDYhsgmRTYhsQmQTIpsQ2YTIJkQ2IbIJ0T+rmRWaQ65jwwAAAABJRU5ErkJgglBLAwQU
AAAIAAAwU40/AAAAAAAAAAAAAAAAHwAAAENvbmZpZ3VyYXRpb25zMi9pbWFnZXMvQml0bWFwcy9Q
SwMEFAAACAAAMFONPwAAAAAAAAAAAAAAABoAAABDb25maWd1cmF0aW9uczIvcG9wdXBtZW51L1BL
AwQUAAAIAAAwU40/AAAAAAAAAAAAAAAAGgAAAENvbmZpZ3VyYXRpb25zMi90b29scGFuZWwvUEsD
BBQAAAgAADBTjT8AAAAAAAAAAAAAAAAaAAAAQ29uZmlndXJhdGlvbnMyL3N0YXR1c2Jhci9QSwME
FAAACAAAMFONPwAAAAAAAAAAAAAAABwAAABDb25maWd1cmF0aW9uczIvcHJvZ3Jlc3NiYXIvUEsD
BBQAAAgAADBTjT8AAAAAAAAAAAAAAAAYAAAAQ29uZmlndXJhdGlvbnMyL3Rvb2xiYXIvUEsDBBQA
AAgAADBTjT8AAAAAAAAAAAAAAAAYAAAAQ29uZmlndXJhdGlvbnMyL21lbnViYXIvUEsDBBQAAAgA
ADBTjT8AAAAAAAAAAAAAAAAYAAAAQ29uZmlndXJhdGlvbnMyL2Zsb2F0ZXIvUEsDBBQACAgIADBT
jT8AAAAAAAAAAAAAAAAnAAAAQ29uZmlndXJhdGlvbnMyL2FjY2VsZXJhdG9yL2N1cnJlbnQueG1s
AwBQSwcIAAAAAAIAAAAAAAAAUEsDBBQACAgIADBTjT8AAAAAAAAAAAAAAAAKAAAAc3R5bGVzLnht
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
AA==</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <long>9406</long> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>runmydoc_configuration_ui_description.ods</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?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>_EtagSupport__etag</string> </key>
<value> <string>ts21288903.49</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>runmydocs_configuration_ui_description.ods</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/vnd.oasis.opendocument.spreadsheet</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">UEsDBBQAAAgAACGFbj+FbDmKLgAAAC4AAAAIAAAAbWltZXR5cGVhcHBsaWNhdGlvbi92bmQub2Fz
aXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0UEsDBBQAAAgAACGFbj/TCB8rDAQAAAwEAAAIAAAA
bWV0YS54bWw8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pgo8b2ZmaWNlOmRv
Y3VtZW50LW1ldGEgeG1sbnM6b2ZmaWNlPSJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50
OnhtbG5zOm9mZmljZToxLjAiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hs
aW5rIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOm1l
dGE9InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6bWV0YToxLjAiIHhtbG5z
Om9vbz0iaHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMDQvb2ZmaWNlIiB4bWxuczpncmRkbD0iaHR0
cDovL3d3dy53My5vcmcvMjAwMy9nL2RhdGEtdmlldyMiIG9mZmljZTp2ZXJzaW9uPSIxLjIiPjxv
ZmZpY2U6bWV0YT48bWV0YTpnZW5lcmF0b3I+TGlicmVPZmZpY2UvMy40JFVuaXggTGlicmVPZmZp
Y2VfcHJvamVjdC8zNDBtMSRCdWlsZC0zMDI8L21ldGE6Z2VuZXJhdG9yPjxtZXRhOmNyZWF0aW9u
LWRhdGU+MjAxMS0wMS0xMVQxMjozNzo0NDwvbWV0YTpjcmVhdGlvbi1kYXRlPjxkYzpsYW5ndWFn
ZT5mci1GUjwvZGM6bGFuZ3VhZ2U+PG1ldGE6ZWRpdGluZy1jeWNsZXM+MjM8L21ldGE6ZWRpdGlu
Zy1jeWNsZXM+PG1ldGE6ZWRpdGluZy1kdXJhdGlvbj5QVDQ5TTMyUzwvbWV0YTplZGl0aW5nLWR1
cmF0aW9uPjxkYzpkYXRlPjIwMTEtMTEtMTRUMTc6NDE6MDI8L2RjOmRhdGU+PGRjOmNyZWF0b3I+
WGF2aWVyIDwvZGM6Y3JlYXRvcj48bWV0YTpkb2N1bWVudC1zdGF0aXN0aWMgbWV0YTp0YWJsZS1j
b3VudD0iMSIgbWV0YTpjZWxsLWNvdW50PSIxOCIgbWV0YTpvYmplY3QtY291bnQ9IjAiLz48bWV0
YTp1c2VyLWRlZmluZWQgbWV0YTpuYW1lPSJJbmZvIDEiLz48bWV0YTp1c2VyLWRlZmluZWQgbWV0
YTpuYW1lPSJJbmZvIDIiLz48bWV0YTp1c2VyLWRlZmluZWQgbWV0YTpuYW1lPSJJbmZvIDMiLz48
bWV0YTp1c2VyLWRlZmluZWQgbWV0YTpuYW1lPSJJbmZvIDQiLz48L29mZmljZTptZXRhPjwvb2Zm
aWNlOmRvY3VtZW50LW1ldGE+UEsDBBQACAgIACGFbj8AAAAAAAAAAAAAAAAMAAAAc2V0dGluZ3Mu
eG1s7Vpbc9o6EH4/vyLj1zMphqacYyahY7vc2oQmNhjiN9kWoEaWPJKMIb/+yFwyqYsTYuxOO6c8
ALa03y67q72Zy4+rEJ8tIeOIkiul/k5VziDxaYDI/EoZj7rn/yof239d0tkM+bAVUD8OIRHnHAoh
t/AzSU54a7t8pcSMtCjgiLcICCFvCb9FI0j2ZK3nu1sbZts7K4zIw5WyECJq1WpJkrxL3r+jbF6r
a5pW26zut/qUzND8WFbb3c9ZUUqfGKUEW2E2zBqqelHbXitnOyGfqaahtPd62P/89uWOwfbjHAkY
pro5291ORbtSJMvWEsHkSWvKIbrvaRzEkYehziAY0UjZL4p1JBcREUpbvaz9CPIm4Gs4E9UgT1Ag
FoegG/80tQ8nw/chmi8Oit5oatqx8OchiM4RCeAKBllWMDlspA2NdC+2PkZgmAyCjJRcMOkBSjv1
h/qbJE1BM3KOgFTIa4J+T9KFMcIY1o9wQTNmnLJbypGQJ2B6UN3FTPk98v0h5ItiyH3K0CMlAmA7
wkjc0ABmDbCg7AQfh0wgvyr0jPR7BZV5Rp/LXwG+7gu0hBt0C5B5jnoKus1e3pLj1h7WygsqJ+KW
G7/3qAYVgoYlAruUhiOJUqpHp6AOwHEWdSNoXS2qAzCHaXR9Eb1ZENxe0KTHUDZwe5RiCIjSFiyG
h5EP3HyeL/KWN4H92KO1Cfk5OWUf208OPj6jGHuAvZDG/zjZyU6WMjBkNfNwy2BaDuQ53AxgnuNx
x7BxIaMb+fnbPfoY/CEVVUEXO4avIaeoJsWUZaAxTQ9RvdF832h8aJZg1wq00gdcih6HxKJJH4JA
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
ENmEyCZENiGyCZFNiGxCZBMimxDZhMgmRDYhsgmRTYhsQmQTIpsQ2YTIJkQ2IbIJkU2IbEJkEyKb
ENmEyCZENiGyCZFNiGxCZBMimxDZhMgmRDYhsgmRTYhsQmQTIpsQ2YTIJkQ2IbIJkU2IbEJkEyKb
ENmEyCZENiGyCZFNiGxCZBMimxDZhMgmRDYhsgmRTYhsQmQTIpsQ2YTIJkQ2IbIJkU2IbEJkEyKb
ENmEyCZENiGyCZFNiGxCZBMimxDZhMgmRDYhsgmRTYhsQmQTIpsQ2YTIJkQ2IbIJkU2IbEJkEyKb
ENmEyCZENiGyCZFNiGxCZBMimxDZhMgmRDYhsgmRTYhsQmQTIpsQ2YTIJkQ2IbIJkU2IbEJkEyKb
ENmEyCZENiGyCZFNiGxCZBMimxDZhMgmRDYhsgmRTYhsQmQTIpsQ2YTIJkQ2IbIJkU2I/gE/LTCI
lDNeGAAAAABJRU5ErkJgglBLAwQUAAAIAAAhhW4/AAAAAAAAAAAAAAAAHwAAAENvbmZpZ3VyYXRp
b25zMi9pbWFnZXMvQml0bWFwcy9QSwMEFAAACAAAIYVuPwAAAAAAAAAAAAAAABoAAABDb25maWd1
cmF0aW9uczIvcG9wdXBtZW51L1BLAwQUAAAIAAAhhW4/AAAAAAAAAAAAAAAAGgAAAENvbmZpZ3Vy
YXRpb25zMi90b29scGFuZWwvUEsDBBQAAAgAACGFbj8AAAAAAAAAAAAAAAAaAAAAQ29uZmlndXJh
dGlvbnMyL3N0YXR1c2Jhci9QSwMEFAAACAAAIYVuPwAAAAAAAAAAAAAAABwAAABDb25maWd1cmF0
aW9uczIvcHJvZ3Jlc3NiYXIvUEsDBBQAAAgAACGFbj8AAAAAAAAAAAAAAAAYAAAAQ29uZmlndXJh
dGlvbnMyL3Rvb2xiYXIvUEsDBBQAAAgAACGFbj8AAAAAAAAAAAAAAAAYAAAAQ29uZmlndXJhdGlv
bnMyL21lbnViYXIvUEsDBBQAAAgAACGFbj8AAAAAAAAAAAAAAAAYAAAAQ29uZmlndXJhdGlvbnMy
L2Zsb2F0ZXIvUEsDBBQACAgIACGFbj8AAAAAAAAAAAAAAAAnAAAAQ29uZmlndXJhdGlvbnMyL2Fj
Y2VsZXJhdG9yL2N1cnJlbnQueG1sAwBQSwcIAAAAAAIAAAAAAAAAUEsDBBQACAgIACGFbj8AAAAA
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
AAAAEAAQADYEAACCIAAAAAA=</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <long>9422</long> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>runmydocs_configuration_ui_description.ods</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
# Copyright (c) 2011 Nexedi SA and Contributors. All Rights Reserved.
# Gabriel M. Monnerat <gabriel@tiolive.com>
# Xavier Hardy <xavier.hardy@tiolive.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 Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
from Products.ERP5Type.tests.Sequence import SequenceList
class TestRunMyDocsConfiguratorWorkflowMixin(ERP5TypeTestCase):
"""
Test RunMyDocs Configuration Workflow Mixin.
"""
standard_bt5_list = ('erp5_jquery',
'erp5_web',
'erp5_ingestion_mysql_innodb_catalog',
'erp5_ingestion',
'erp5_ui_test_core',
'erp5_dms',
'erp5_jquery_ui',
'erp5_slideshow_style',
'erp5_knowledge_pad',
'erp5_run_my_doc',
'erp5_run_my_doc_roles')
DEFAULT_SEQUENCE_LIST = """
stepCreateBusinessConfiguration
stepSetRunMyDocsWorkflow
stepConfiguratorNext
stepTic
stepCheckBT5ConfiguratorItem
stepCheckConfigureOrganisationForm
stepSetupOrganisationConfiguratorItem
stepConfiguratorNext
stepTic
stepCheckConfigureUserAccountNumberForm
stepCheckOrganisationConfiguratorItem
stepSetupUserAccountNumberThree
stepConfiguratorNext
stepTic
stepCheckConfigureMultipleUserAccountForm
stepSetupMultipleUserAccountThree
stepConfiguratorNext
stepTic
stepCheckConfigurePreferenceForm
stepCheckMultipleUserAccountThree%(country)s
stepSetupPreferenceConfiguration%(country)s
stepConfiguratorNext
stepTic
stepCheckConfigureInstallationForm
stepSetupInstallConfiguration
stepConfiguratorNext
stepTic
stepCheckInstallConfiguration
stepStartConfigurationInstallation
stepTic
stepCheckSystemPreferenceAfterInstallation
stepCheckUserPreferenceAfterInstallation
stepCheckKnowledgePadRole
stepCheckCreateNewEvent
"""
def getBusinessTemplateList(self):
return ('erp5_core_proxy_field_legacy',
'erp5_full_text_myisam_catalog',
'erp5_base',
'erp5_workflow',
'erp5_configurator',
'erp5_configurator_run_my_doc',)
def afterSetUp(self):
self.portal.portal_templates.updateRepositoryBusinessTemplateList(
['http://www.erp5.org/dists/snapshot/bt5/'])
preference = self.portal.portal_preferences.newContent(portal_type="System Preference")
preference.setTitle("global_system_preference")
preference.setPreferredOoodocServerAddress("localhost")
preference.setPreferredOoodocServerPortNumber(8011)
preference.enable()
def stepCreateBusinessConfiguration(self, sequence=None, sequence_list=None, **kw):
""" Create one Business Configuration """
module = self.portal.business_configuration_module
business_configuration = module.newContent(
portal_type="Business Configuration",
title='Test Configurator RunMyDocs Workflow')
next_dict = {}
sequence.edit(business_configuration=business_configuration,
next_dict=next_dict)
def stepSetRunMyDocsWorkflow(self, sequence=None, sequence_list=None, **kw):
""" Set RunMyDocs Workflow into Business Configuration """
business_configuration = sequence.get("business_configuration")
self.setBusinessConfigurationWorkflow(business_configuration,
"workflow_module/runmydocs_configuration_workflow")
def assertCurrentStep(self, step_title, server_response):
""" Checks the current step title. """
self.assertTrue(
'<h2>%s</h2>' % step_title in server_response['data'],
'Unable to guess current step title (expected:%s) in: \n%s' %
(step_title, server_response))
def stepConfiguratorNext(self, sequence=None, sequence_list=None, **kw):
""" Go Next into Configuration """
business_configuration = sequence.get("business_configuration")
next_dict = sequence.get("next_dict")
response_dict = self.portal.portal_configurator._next(
business_configuration, next_dict)
sequence.edit(response_dict=response_dict)
def setBusinessConfigurationWorkflow(self, business_configuration, workflow):
""" Set configurator workflow """
business_configuration.setResource(workflow)
def stepCheckBT5ConfiguratorItem(self, sequence=None, sequence_list=None, **kw):
""" Check if the Configuration Item list is correct """
business_configuration = sequence.get("business_configuration")
# second one: install some standard business templates
standard_bt5_config_save = business_configuration['1']
self.assertEquals(len(self.standard_bt5_list),
len(standard_bt5_config_save.contentValues(
portal_type='Standard BT5 Configurator Item')))
self.assertEquals(
set(self.standard_bt5_list),
set([x.bt5_id for x in standard_bt5_config_save.contentValues()]))
def stepCheckConfigureOrganisationForm(self, sequence=None, sequence_list=None, **kw):
""" Check if Confire Configure step was showed """
response_dict = sequence.get("response_dict")
if 'command' in response_dict:
self.assertEquals('show', response_dict['command'])
self.assertEquals(None, response_dict['previous'])
self.assertEquals('Configure Organisation', response_dict['next'])
self.assertCurrentStep('Your Organisation', response_dict)
def stepSetupOrganisationConfiguratorItem(self, sequence=None, sequence_list=None, **kw):
""" Create one Organisation with Basic information """
next_dict = dict(
field_your_title='My Organisation',
field_your_default_email_text='me@example.com',
field_your_default_telephone_text='01234567890',
field_your_default_address_street_address='.',
field_your_default_address_zip_code='59000')
sequence.edit(next_dict=next_dict)
def stepCheckConfigureUserAccountNumberForm(self, sequence=None, sequence_list=None, **kw):
""" """
response_dict = sequence.get("response_dict")
if 'command' in response_dict:
self.assertEquals('show', response_dict['command'])
self.assertEquals('Configure user accounts number', response_dict['next'])
self.assertEquals('Previous', response_dict['previous'])
self.assertCurrentStep('Number of user accounts', response_dict)
def stepCheckOrganisationConfiguratorItem(self, sequence=None, sequence_list=None, **kw):
""" Check if organisation was created fine """
business_configuration = sequence.get("business_configuration")
organisation_config_save = business_configuration['3']
self.assertEquals(organisation_config_save.getTitle(),
"My Organisation")
self.assertEquals(1, len(organisation_config_save.contentValues()))
organisation_config_item = organisation_config_save['1']
self.assertEquals(organisation_config_item.getPortalType(),
'Organisation Configurator Item')
self.assertEquals(organisation_config_item.getDefaultEmailText(),
'me@example.com')
def stepSetupUserAccountNumberThree(self, sequence=None, sequence_list=None, **kw):
""" Create one more user account """
next_dict = dict(field_your_user_number="3")
sequence.edit(next_dict=next_dict)
def stepCheckConfigureMultipleUserAccountForm(self, sequence=None, sequence_list=None, **kw):
""" Check the multiple user account form """
response_dict = sequence.get("response_dict")
if 'command' in response_dict:
self.assertEquals('show', response_dict['command'])
self.assertEquals('Previous', response_dict['previous'])
self.assertEquals('Configure user accounts', response_dict['next'])
self.assertCurrentStep('Configuration of users', response_dict)
def _stepSetupMultipleUserAccountThree(self, sequence, user_list):
""" Generic step to create multiple user account """
next_dict = {}
for user in user_list:
for k, v in user.items():
next_dict.setdefault(k, []).append(v)
sequence.edit(next_dict=next_dict)
def stepCheckConfigurePreferenceForm(self, sequence=None, sequence_list=None, **kw):
""" Check the multiple user account form """
response_dict = sequence.get("response_dict")
if 'command' in response_dict:
self.assertEquals('show', response_dict['command'])
self.assertEquals('Previous', response_dict['previous'])
self.assertEquals('Configure ERP5 Preferences', response_dict['next'])
self.assertCurrentStep('RunMyDocs Preferences', response_dict)
def stepSetupPreferenceConfigurationBrazil(self, sequence=None, sequence_list=None, **kw):
""" Setup the Brazil preference configuration """
next_dict = dict(field_your_preferred_date_order='dmy',
field_your_default_available_language='pt-BR',
field_your_preferred_event_sender_email="test@test.com",
default_field_your_lang=1)
sequence.edit(next_dict=next_dict)
def stepSetupPreferenceConfigurationFrance(self, sequence=None, sequence_list=None, **kw):
""" Setup the France preference configuration """
next_dict = dict(field_your_preferred_date_order='ymd',
field_your_default_available_language='fr',
field_your_preferred_event_sender_email="test@test.com",
default_field_your_lang=1)
sequence.edit(next_dict=next_dict)
def stepCheckConfigureWebSiteForm(self, sequence=None, sequence_list=None, **kw):
""" Check the installation form """
response_dict = sequence.get("response_dict")
self.assertEquals('show', response_dict['command'])
self.assertEquals('Previous', response_dict['previous'])
self.assertEquals('Install', response_dict['next'])
def stepCheckMultipleUserAccountThreeBrazil(self, sequence=None, sequence_list=None, **kw):
""" Check if the users were created correctly """
business_configuration = sequence.get("business_configuration")
person_config_save = business_configuration["5"]
person_config_item = person_config_save["1"]
self.assertEquals(person_config_item.getReference(), "person_creator")
person_config_item = person_config_save["2"]
self.assertEquals(person_config_item.getReference(), "person_assignee")
person_config_item = person_config_save["3"]
self.assertEquals(person_config_item.getReference(), "person_assignor")
def stepCheckMultipleUserAccountThreeFrance(self, sequence=None, sequence_list=None, **kw):
""" Check if the users were created correctly """
business_configuration = sequence.get("business_configuration")
person_config_save = business_configuration["5"]
person_config_item = person_config_save["1"]
self.assertEquals(person_config_item.getReference(), "french_creator")
person_config_item = person_config_save["2"]
self.assertEquals(person_config_item.getReference(), "french_assignee")
person_config_item = person_config_save["3"]
self.assertEquals(person_config_item.getReference(), "french_assignor")
def stepCheckConfigureInstallationForm(self, sequence=None, sequence_list=None, **kw):
""" Check the installation form """
response_dict = sequence.get("response_dict")
self.assertEquals('show', response_dict['command'])
def stepSetupInstallConfiguration(self, sequence=None, sequence_list=None, **kw):
""" Install the Configuration """
sequence.edit(next_dict={})
def stepCheckInstallConfiguration(self, sequence=None, sequence_list=None, **kw):
""" Check the installation of the configuration """
response_dict = sequence.get("response_dict")
self.assertEquals('install', response_dict['command'])
def stepStartConfigurationInstallation(self, sequence=None, sequence_list=None, **kw):
""" Starts the installation """
business_configuration = sequence.get("business_configuration")
self.portal.portal_configurator.startInstallation(
business_configuration, REQUEST=self.portal.REQUEST)
def stepCheckSystemPreferenceAfterInstallation(self, sequence=None, sequence_list=None, **kw):
""" Check System Preference"""
system_preference = self.portal.portal_catalog.getResultValue(portal_type="System Preference")
self.assertEquals(system_preference.getPreferredOoodocServerPortNumber(), 8011)
self.assertEquals(system_preference.getPreferredOoodocServerAddress(), "localhost")
def stepCheckUserPreferenceAfterInstallation(self, sequence=None, sequence_list=None, **kw):
""" Check System Preference"""
portal_catalog = self.portal.portal_catalog
preference = portal_catalog.getResultValue(portal_type="Preference",
title='Preference for Person Assignor')
self.assertEquals(preference.getPreferenceState(), "enabled")
preference = portal_catalog.getResultValue(portal_type="Preference",
title='Preference for Person Assignee')
self.assertEquals(preference.getPreferenceState(), "enabled")
preference = portal_catalog.getResultValue(portal_type="Preference",
title='Preference for Person Creator')
self.assertEquals(preference.getPreferenceState(), "enabled")
runmydocs_preference = self.portal.portal_preferences.runmydocs_preference
self.assertEquals(runmydocs_preference.getPreferenceState(), "global")
""" def _stepCheckWebSiteRoles(self):
# Check permission of Web Site with normal user
self.portal.web_page_module.ERP5Site_createNewWebDocument("web_page_template")
self.stepTic()
result_list = self.portal.web_site_module.runmydocs.WebSection_getWebPageObjectList()
self.assertEquals(len(result_list), 1)
self.assertEquals(result_list[0].getTitle(), "Web Page")
new_object = self.portal.web_page_module.newContent(portal_type="Web Page")
new_object.edit(title="New")
new_object = self.portal.web_page_module.newContent(portal_type="Web Table")
new_object.edit(title="New")
new_object = self.portal.web_page_module.newContent(portal_type="Web Illustration")
new_object.edit(title="New")
self.stepTic()
kw = {"portal_type": "Web Page", "title": "New"}
result_list = self.portal.web_site_module.runmydocs.WebSection_getWebPageObjectList(**kw)
self.assertEquals(len(result_list), 1)
self.assertEquals(result_list[0].getPortalType(), "Web Page")
kw["portal_type"] = "Web Illustration"
result_list = self.portal.web_site_module.runmydocs.WebSection_getWebPageObjectList(**kw)
self.assertEquals(len(result_list), 1)
self.assertEquals(result_list[0].getPortalType(), "Web Illustration")
kw["portal_type"] = "Web Table"
result_list = self.portal.web_site_module.runmydocs.WebSection_getWebPageObjectList(**kw)
self.assertEquals(len(result_list), 1)
self.assertEquals(result_list[0].getPortalType(), "Web Table")
"""
def _stepCheckKnowledgePadRole(self):
""" Check if Knowledge Pad is configured correctly """
pad = self.portal.knowledge_pad_module.newContent(portal_type="Knowledge Pad")
#pad.edit(publication_section_value=self.portal.web_site_module.runmydocs)
pad.visible()
self.stepTic()
gadget = self.portal.portal_gadgets.searchFolder()[0]
gadget_id = gadget.getId()
#self.portal.web_site_module.runmydocs.WebSection_addGadgetList(gadget_id)
self.stepTic()
box_list = pad.contentValues()
self.assertEquals(len(box_list), 1)
knowledge_box = box_list[0]
#self.assertEquals(pad.getPublicationSection(), 'web_site_module/runmydocs')
self.assertTrue(knowledge_box.getSpecialiseValue().getId() == gadget_id)
def _stepCheckCreateNewEvent(self):
""" """
portal = self.portal
event_dict = dict(portal_type="Note",
title="Buy Phone",
event_text_content="testRunMyDocs Sample",
start_date_hour=11,
start_date_minute=12,
start_date_day=12,
start_date_month=02,
start_date_year=2011,
stop_date_hour=12,
stop_date_minute=12,
stop_date_day=13,
stop_date_month=02,
stop_date_year=2011)
portal.REQUEST.form.update(event_dict)
portal.event_module.EventModule_createNewEvent()
self.stepTic()
event = portal.portal_catalog.getResultValue(portal_type="Note")
self.assertEquals(event.getDescription(), "testRunMyDocs Sample")
start_date = event.getStartDate()
self.assertEquals(start_date.month(), 2)
self.assertEquals(start_date.minute(), 12)
class TestRunMyDocsConfiguratorWorkflowFranceLanguage(TestRunMyDocsConfiguratorWorkflowMixin):
"""
Test RunMyDocs Configuration Workflow
"""
def test_run_my_docs_workflow_france(self):
""" Test the RunMyDocs workflow with french language """
sequence_list = SequenceList()
sequence_string = self.DEFAULT_SEQUENCE_LIST % dict(country='France')
sequence_list.addSequenceString(sequence_string)
sequence_list.play(self)
def stepSetupMultipleUserAccountThree(self, sequence=None, sequence_list=None, **kw):
""" Create multiple user account """
user_list = [
dict(
field_your_first_name='Person',
field_your_last_name='Creator',
field_your_reference="french_creator",
field_your_password='person_creator',
field_your_password_confirm='person_creator',
field_your_default_email_text='test@test.com',
field_your_default_telephone_text='',
), dict(
field_your_first_name='Person',
field_your_last_name='Assignee',
field_your_reference="french_assignee",
field_your_password='person_assignee',
field_your_password_confirm='person_assignee',
field_your_default_email_text='test@test.com',
field_your_default_telephone_text='',
), dict(
field_your_first_name='Person',
field_your_last_name='Assignor',
field_your_reference="french_assignor",
field_your_password='person_assignor',
field_your_password_confirm='person_assignor',
field_your_default_email_text='test@test.com',
field_your_default_telephone_text='',
),
]
self._stepSetupMultipleUserAccountThree(sequence, user_list)
""" def stepSetupWebSiteConfiguration(self, sequence=None, sequence_list=None, **kw):
# Setup Web Site
next_dict = dict(your_default_available_language="fr")
sequence.edit(next_dict=next_dict)
def stepCheckRunMyDocsWebSiteAfterInstallation(self, sequence=None, sequence_list=None, **kw):
# Check if RunMyDocs Web Site is published and your language
runmydocs_web_site = self.portal.web_site_module.runmydocs
portal_catalog = self.portal.portal_catalog
self.assertEquals(runmydocs_web_site.getValidationState(),
"published")
self.assertEquals(runmydocs_web_site.getDefaultAvailableLanguage(),
"fr")
person = portal_catalog.getResultValue(portal_type="Person",
reference="french_creator")
self.assertEquals(person.getValidationState(), 'validated')
self.assertEquals(person.getFirstName(), 'Person')
self.assertEquals(person.getLastName(), 'Creator')
assignment = person.contentValues(portal_type="Assignment")[0]
self.assertEquals(assignment.getValidationState(), "open")
self.assertEquals(assignment.getFunction(), "runmydocs_user")
person = portal_catalog.getResultValue(portal_type="Person",
reference="french_assignee")
self.assertEquals(person.getValidationState(), 'validated')
self.assertEquals(person.getFirstName(), 'Person')
self.assertEquals(person.getLastName(), 'Assignee')
assignment = person.contentValues(portal_type="Assignment")[0]
self.assertEquals(assignment.getValidationState(), "open")
self.assertEquals(assignment.getFunction(), "runmydocs_user")
person = portal_catalog.getResultValue(portal_type="Person",
reference="french_assignor")
self.assertEquals(person.getValidationState(), 'validated')
self.assertEquals(person.getFirstName(), 'Person')
self.assertEquals(person.getLastName(), 'Assignor')
assignment = person.contentValues(portal_type="Assignment")[0]
self.assertEquals(assignment.getValidationState(), "open")
self.assertEquals(assignment.getFunction(), "runmydocs_user")
def stepCheckWebSiteRoles(self, sequence=None, sequence_list=None, **kw):
# Check permission of Web Site with normal user
self.login("french_assignor")
self._stepCheckWebSiteRoles()
"""
def stepCheckKnowledgePadRole(self, sequence=None, sequence_list=None, **kw):
self.login("french_creator")
self._stepCheckKnowledgePadRole()
def stepCheckCreateNewEvent(self, sequence=None, sequence_list=None, **kw):
self.login("french_assignee")
self._stepCheckCreateNewEvent()
class TestRunMyDocsConfiguratorWorkflowBrazilLanguage(TestRunMyDocsConfiguratorWorkflowMixin):
"""
Test RunMyDocs Configuration Workflow
"""
def test_run_my_docs_workflow_brazil(self):
""" Test the RunMyDocs workflow with brazilian language """
sequence_list = SequenceList()
sequence_string = self.DEFAULT_SEQUENCE_LIST % dict(country='Brazil')
sequence_list.addSequenceString(sequence_string)
sequence_list.play(self)
""" def stepSetupWebSiteConfiguration(self, sequence=None, sequence_list=None, **kw):
# Setup Web Site
next_dict = dict(your_default_available_language="pt-BR")
sequence.edit(next_dict=next_dict)
"""
def stepSetupMultipleUserAccountThree(self, sequence=None, sequence_list=None, **kw):
""" Create multiple user account """
user_list = [
dict(
field_your_first_name='Person',
field_your_last_name='Creator',
field_your_reference="person_creator",
field_your_password='person_creator',
field_your_password_confirm='person_creator',
field_your_default_email_text='test@test.com',
field_your_default_telephone_text='',
), dict(
field_your_first_name='Person',
field_your_last_name='Assignee',
field_your_reference="person_assignee",
field_your_password='person_assignee',
field_your_password_confirm='person_assignee',
field_your_default_email_text='test@test.com',
field_your_default_telephone_text='',
), dict(
field_your_first_name='Person',
field_your_last_name='Assignor',
field_your_reference="person_assignor",
field_your_password='person_assignor',
field_your_password_confirm='person_assignor',
field_your_default_email_text='test@test.com',
field_your_default_telephone_text='',
),
]
self._stepSetupMultipleUserAccountThree(sequence, user_list)
""" def stepCheckRunMyDocsWebSiteAfterInstallation(self, sequence=None, sequence_list=None, **kw):
# Check if RunMyDocs Web Site is published and your language
runmydocs_web_site = self.portal.web_site_module.runmydocs
portal_catalog = self.portal.portal_catalog
self.assertEquals(runmydocs_web_site.getValidationState(),
"published")
self.assertEquals(runmydocs_web_site.getDefaultAvailableLanguage(),
"pt-BR")
person = portal_catalog.getResultValue(portal_type="Person",
reference="person_creator")
self.assertEquals(person.getValidationState(), 'validated')
self.assertEquals(person.getFirstName(), 'Person')
self.assertEquals(person.getLastName(), 'Creator')
assignment = person.contentValues(portal_type="Assignment")[0]
self.assertEquals(assignment.getValidationState(), "open")
self.assertEquals(assignment.getFunction(), "runmydocs_user")
person = portal_catalog.getResultValue(portal_type="Person",
reference="person_assignee")
self.assertEquals(person.getValidationState(), 'validated')
self.assertEquals(person.getFirstName(), 'Person')
self.assertEquals(person.getLastName(), 'Assignee')
assignment = person.contentValues(portal_type="Assignment")[0]
self.assertEquals(assignment.getValidationState(), "open")
self.assertEquals(assignment.getFunction(), "runmydocs_user")
person = portal_catalog.getResultValue(portal_type="Person",
reference="person_assignor")
self.assertEquals(person.getValidationState(), 'validated')
self.assertEquals(person.getFirstName(), 'Person')
self.assertEquals(person.getLastName(), 'Assignor')
assignment = person.contentValues(portal_type="Assignment")[0]
self.assertEquals(assignment.getValidationState(), "open")
self.assertEquals(assignment.getFunction(), "runmydocs_user")
def stepCheckWebSiteRoles(self, sequence=None, sequence_list=None, **kw):
# Check permission of Web Site with normal user
self.login("person_assignor")
self._stepCheckWebSiteRoles()
"""
def stepCheckKnowledgePadRole(self, sequence=None, sequence_list=None, **kw):
self.login("person_creator")
self._stepCheckKnowledgePadRole()
def stepCheckCreateNewEvent(self, sequence=None, sequence_list=None, **kw):
self.login("person_assignee")
self._stepCheckCreateNewEvent()
\ No newline at end of file
1
\ No newline at end of file
2
\ No newline at end of file
business_configuration_module/runmydocs_configuration
business_configuration_module/runmydocs_configuration/default_image
workflow_module/runmydocs_configuration_workflow
workflow_module/runmydocs_configuration_workflow/**
\ No newline at end of file
business_configuration_module/run_my_doc_configuration
business_configuration_module/run_my_doc_configuration/default_image
workflow_module/run_my_doc_configuration_workflow
workflow_module/run_my_doc_configuration_workflow/**
\ No newline at end of file
testRunMyDocConfigurationWorkflow
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment