[Erp5-report] r17046 - in /erp5/trunk/products/ERP5Type: ./ tests/

nobody at svn.erp5.org nobody at svn.erp5.org
Thu Oct 18 19:17:58 CEST 2007


Author: jerome
Date: Thu Oct 18 19:17:57 2007
New Revision: 17046

URL: http://svn.erp5.org?rev=17046&view=rev
Log:
Also reset aq_dynamic when workflow method are added and state variable name is changed.
the comment '# XXX We should also call it whenever we change workflow defition' can be removed from ERP5Type


Modified:
    erp5/trunk/products/ERP5Type/ERP5Type.py
    erp5/trunk/products/ERP5Type/Interactor.py
    erp5/trunk/products/ERP5Type/tests/testERP5Type.py

Modified: erp5/trunk/products/ERP5Type/ERP5Type.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/ERP5Type.py?rev=17046&r1=17045&r2=17046&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/ERP5Type.py (original)
+++ erp5/trunk/products/ERP5Type/ERP5Type.py Thu Oct 18 19:17:57 2007
@@ -723,7 +723,7 @@
       if previous_property_sheet_list != self.property_sheet_list or \
                    base_category_list != self.base_category_list:
         from Products.ERP5Type.Base import _aq_reset
-        _aq_reset() # XXX We should also call it whenever we change workflow defition
+        _aq_reset()
       return result
 
     def reorderActions(self, REQUEST=None):

Modified: erp5/trunk/products/ERP5Type/Interactor.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/Interactor.py?rev=17046&r1=17045&r2=17046&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/Interactor.py (original)
+++ erp5/trunk/products/ERP5Type/Interactor.py Thu Oct 18 19:17:57 2007
@@ -111,6 +111,22 @@
   def install(self):
     from Products.CMFCore.WorkflowTool import WorkflowTool
     self.on(WorkflowTool.manage_changeWorkflows).doAfter(self.resetAqDynamic)
+
+
+class DCWorkflowInteractor(AqDynamicInteractor):
+  """This interactor reset aq_dynamic method cache whenever a workflow
+  definition changes
+  """
+  def install(self):
+    from Products.DCWorkflow.Transitions import Transitions
+    self.on(Transitions.addTransition).doAfter(self.resetAqDynamic)
+    self.on(Transitions.deleteTransitions).doAfter(self.resetAqDynamic)
+    
+    from Products.DCWorkflow.Transitions import TransitionDefinition
+    self.on(TransitionDefinition.setProperties).doAfter(self.resetAqDynamic)
+    
+    from Products.DCWorkflow.Variables import Variables
+    self.on(Variables.setStateVar).doAfter(self.resetAqDynamic)
 
 ## #
 ## # Experimental part
@@ -224,6 +240,7 @@
 # Install some interactors:
 
 WorkflowToolInteractor().install()
+DCWorkflowInteractor().install()
 
 # This is used in ERP5Form and install method is called in ERP5Form
 # Don't install this interactor here.

Modified: erp5/trunk/products/ERP5Type/tests/testERP5Type.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/tests/testERP5Type.py?rev=17046&r1=17045&r2=17046&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/tests/testERP5Type.py (original)
+++ erp5/trunk/products/ERP5Type/tests/testERP5Type.py Thu Oct 18 19:17:57 2007
@@ -1692,6 +1692,35 @@
           props=dict(chain_Person='delivery_causality_workflow'))
       self.assertTrue(hasattr(doc, 'getCausalityState'))
 
+    def test_aq_reset_on_workflow_method_change(self):
+      doc = self.portal.person_module.newContent(portal_type='Person')
+      ti = self.getTypesTool()['Person']
+      self.portal.portal_workflow.manage_changeWorkflows(
+          default_chain='',
+          props=dict(chain_Person='delivery_causality_workflow'))
+      self.assertTrue(hasattr(doc, 'diverge'))
+
+      wf = self.portal.portal_workflow.delivery_causality_workflow
+      wf.transitions.addTransition('dummy_workflow_method')
+      from Products.DCWorkflow.Transitions import TRIGGER_WORKFLOW_METHOD
+      wf.transitions.dummy_workflow_method.setProperties(
+          title='', new_state_id='', trigger_type=TRIGGER_WORKFLOW_METHOD)
+      self.assertTrue(hasattr(doc, 'dummyWorkflowMethod'))
+
+      wf.transitions.deleteTransitions(['dummy_workflow_method'])
+      self.assertFalse(hasattr(doc, 'dummyWorkflowMethod'))
+
+    def test_aq_reset_on_workflow_state_variable_change(self):
+      doc = self.portal.person_module.newContent(portal_type='Person')
+      ti = self.getTypesTool()['Person']
+      self.portal.portal_workflow.manage_changeWorkflows(
+          default_chain='',
+          props=dict(chain_Person='delivery_causality_workflow'))
+      self.assertTrue(hasattr(doc, 'getCausalityState'))
+      wf = self.portal.portal_workflow.delivery_causality_workflow
+      wf.variables.setStateVar('dummy_state')
+      self.assertTrue(hasattr(doc, 'getDummyState'))
+
     # ... other cases should be added here
 
 




More information about the Erp5-report mailing list