[Erp5-report] r44066 nicolas - /erp5/trunk/products/ERP5/tests/testWorklist.py

nobody at svn.erp5.org nobody at svn.erp5.org
Wed Mar 9 10:07:52 CET 2011


Author: nicolas
Date: Wed Mar  9 10:07:52 2011
New Revision: 44066

URL: http://svn.erp5.org?rev=44066&view=rev
Log:
Test recent features of worklist computation.
 - Now dynamic related keys are recognized by catalog
 - cataloged variables of worklist can be TALES Expression

Extend test to check also computed urls by introspecting parameters stored in listbox selection.

Modified:
    erp5/trunk/products/ERP5/tests/testWorklist.py

Modified: erp5/trunk/products/ERP5/tests/testWorklist.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testWorklist.py?rev=44066&r1=44065&r2=44066&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testWorklist.py [utf8] (original)
+++ erp5/trunk/products/ERP5/tests/testWorklist.py [utf8] Wed Mar  9 10:07:52 2011
@@ -40,6 +40,7 @@ class TestWorklist(ERP5TypeTestCase):
   login = PortalTestCase.login
 
   checked_portal_type = 'Organisation'
+  module_selection_name = 'organisation_module_selection'
   checked_validation_state = 'draft'
   not_checked_validation_state = 'not_draft'
   checked_workflow = 'validation_workflow'
@@ -70,6 +71,8 @@ class TestWorklist(ERP5TypeTestCase):
   def beforeTearDown(self):
     self.clearModule(self.portal.person_module)
     self.clearModule(self.portal.organisation_module)
+    self.clearModule(self.portal.portal_categories.region)
+    self.clearModule(self.portal.portal_categories.role)
 
   def getBusinessTemplateList(self):
     """
@@ -157,13 +160,14 @@ class TestWorklist(ERP5TypeTestCase):
     variables.addVariable(variable_id)
     assert variables[variable_id].for_catalog == 1
 
-  def createWorklist(self, workflow_id, worklist_id, actbox_name, **kw):
+  def createWorklist(self, workflow_id, worklist_id, actbox_name,
+                     actbox_url=None, **kw):
     worklists = self.getWorkflowTool()[workflow_id].worklists
     worklists.addWorklist(worklist_id)
     worklists._getOb(worklist_id).setProperties('',
-        actbox_name='%s (%%(count)s)' % actbox_name, props=dict(
-          (k.startswith('guard_') and k or 'var_match_'+k, v)
-          for k, v in kw.iteritems()))
+        actbox_name='%s (%%(count)s)' % actbox_name, actbox_url=actbox_url,
+        props=dict((k.startswith('guard_') and k or 'var_match_'+k, v)
+                    for k, v in kw.iteritems()))
 
   def removeWorklist(self, workflow_id, worklist_id_list):
     worklists = self.getWorkflowTool()[workflow_id].worklists
@@ -203,12 +207,25 @@ class TestWorklist(ERP5TypeTestCase):
   def clearCache(self):
     self.portal.portal_caches.clearAllCache()
 
-  def checkWorklist(self, result, name, count):
+  def checkWorklist(self, result, name, count, url_parameter_dict=None):
     entry_list = [x for x in result if x['name'].startswith(name)]
     self.assertEquals(len(entry_list), count and 1)
     if count:
       self.assertEquals(count,
         self.getWorklistDocumentCountFromActionName(entry_list[0]['name']))
+    if not entry_list:
+      return
+    url = entry_list[0].get('url')
+    if url_parameter_dict:
+      self.assertTrue(url, 'Can not check url parameters without url')
+      url = '%s%s' % (self.portal.getId(), url[len(self.portal.absolute_url()):])
+      # Touch URL to save worklist parameters in listbox selection
+      self.publish(url, 'manager:') # XXX which user ?
+      selection_parameter_dict = self.portal.portal_selections.getSelectionParamsFor(
+                                                    self.module_selection_name)
+      for parameter, value in url_parameter_dict.iteritems():
+        self.assertTrue(parameter in selection_parameter_dict)
+        self.assertEquals(value, selection_parameter_dict[parameter])
 
   def test_01_permission(self, quiet=0, run=run_all_test):
     """
@@ -450,6 +467,67 @@ class TestWorklist(ERP5TypeTestCase):
       self.removeWorklist(self.checked_workflow, 
                           ['guard_expression_worklist'])
 
+  def test_04_dynamic_variables(self):
+    """
+    Test related keys and TALES Expression
+    """
+
+    workflow_tool = self.getWorkflowTool()
+    self.createManagerAndLogin()
+
+    self.logMessage("Create categories")
+    for base_category, category_list in (
+        ('region', ('somewhere', 'elsewhere')),
+        ('role',   ('client',    'supplier'))):
+      newContent = self.getCategoryTool()[base_category].newContent
+      for category in category_list:
+        newContent(portal_type='Category', id=category)
+
+    self.logMessage("Create worklists using 'region_uid' related key"\
+                    " and TALES Expression")
+    self.addWorkflowCataloguedVariable(self.checked_workflow,
+                                       'region_uid')
+    self.createWorklist(self.checked_workflow, 'region_worklist',
+                        'has_semewhere_region',
+                        portal_type=self.checked_portal_type,
+                        actbox_url='organisation_module?'\
+                        'region_uid:list=%(region_uid)s&'\
+                        'portal_type:list=%(portal_type)s&reset:int=1',
+                        region_uid='python:object.getPortalObject().'\
+                        'portal_categories.getCategoryUid("somewhere",'\
+                        ' base_category="region")')
+
+    try:
+      document = self.createDocument()
+      transaction.commit()
+      self.tic()
+      self.clearCache()
+      self.logMessage("  Check no document has region categories defined")
+      result = workflow_tool.listActions(object=document)
+      self.checkWorklist(result, 'has_semewhere_region', 0)
+
+      self.logMessage("  Creates documents with region categories defined")
+
+      self.createDocument(region='somewhere')
+      self.createDocument(region='somewhere')
+      self.createDocument(region='elsewhere')
+
+      transaction.commit()
+      self.tic()
+      self.clearCache()
+      self.logMessage(
+               "  Check there are documents with region categories defined")
+      result = workflow_tool.listActions(object=document)
+      url_parameter_dict = {'region_uid': [str(self.portal.portal_categories.\
+                                          getCategoryUid("region/somewhere"))],
+                            'portal_type': [self.checked_portal_type]}
+      self.checkWorklist(result, 'has_semewhere_region', 2,
+                         url_parameter_dict=url_parameter_dict)
+
+    finally:
+      self.removeWorklist(self.checked_workflow, ['region_worklist'])
+
+
 def test_suite():
   suite = unittest.TestSuite()
   suite.addTest(unittest.makeSuite(TestWorklist))



More information about the Erp5-report mailing list