[Checkins] SVN: Products.CMFCore/trunk/Products/CMFCore/ - made sure .zexp imports don't reset workflow states

Yvo Schubbe y.2009 at wcm-solutions.de
Thu Feb 19 06:35:31 EST 2009


Log message for revision 96733:
  - made sure .zexp imports don't reset workflow states
  - added some WorkflowTool tests

Changed:
  U   Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt
  U   Products.CMFCore/trunk/Products/CMFCore/CMFCatalogAware.py
  U   Products.CMFCore/trunk/Products/CMFCore/WorkflowTool.py
  U   Products.CMFCore/trunk/Products/CMFCore/tests/test_WorkflowTool.py

-=-
Modified: Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt	2009-02-19 11:13:26 UTC (rev 96732)
+++ Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt	2009-02-19 11:35:31 UTC (rev 96733)
@@ -4,6 +4,12 @@
 2.2.0 (unreleased)
 ------------------
 
+- Events: Changed 'handleContentishEvent' behavior for IObjectCopiedEvent.
+  'WorkflowTool.notifyCreated' no longer resets the workflow state, so the
+  the event subscriber clears the workflow history instead.
+
+- WorkflowTool: 'notifyCreated' no longer overrides assigned workflow states.
+
 - No longer catch a `NotImplemented` string exception in the MembershipTool
   in deleteMembers.
 

Modified: Products.CMFCore/trunk/Products/CMFCore/CMFCatalogAware.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/CMFCatalogAware.py	2009-02-19 11:13:26 UTC (rev 96732)
+++ Products.CMFCore/trunk/Products/CMFCore/CMFCatalogAware.py	2009-02-19 11:35:31 UTC (rev 96733)
@@ -247,7 +247,8 @@
             ob.unindexObject()
 
     elif IObjectCopiedEvent.providedBy(event):
-        pass
+        if hasattr(aq_base(ob), 'workflow_history'):
+            del ob.workflow_history
 
     elif IObjectCreatedEvent.providedBy(event):
         if hasattr(aq_base(ob), 'addCreator'):

Modified: Products.CMFCore/trunk/Products/CMFCore/WorkflowTool.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/WorkflowTool.py	2009-02-19 11:13:26 UTC (rev 96732)
+++ Products.CMFCore/trunk/Products/CMFCore/WorkflowTool.py	2009-02-19 11:35:31 UTC (rev 96733)
@@ -286,6 +286,8 @@
         """
         wfs = self.getWorkflowsFor(ob)
         for wf in wfs:
+            if self.getHistoryOf(wf.getId(), ob):
+                continue
             wf.notifyCreated(ob)
         self._reindexWorkflowVariables(ob)
 

Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_WorkflowTool.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_WorkflowTool.py	2009-02-19 11:13:26 UTC (rev 96732)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_WorkflowTool.py	2009-02-19 11:35:31 UTC (rev 96733)
@@ -349,6 +349,21 @@
             self.assertEqual( len( notified ), 1 )
             self.assertEqual( notified[0], ( ob, ) )
 
+    def test_notifyCreated_skips_workflows_with_status(self):
+        tool = self._makeWithTypesAndChain()
+
+        ob = DummyContent('dummy')
+        dummy_status0 = object()
+        ob.workflow_history = {'a': (dummy_status0,)}
+        tool.notifyCreated(ob)
+
+        notified = tool.a.notified('created')
+        self.assertEqual( len(notified), 0 )
+
+        notified = tool.b.notified('created')
+        self.assertEqual( len(notified), 1 )
+        self.assertEqual( notified[0], (ob,) )
+
     def test_notifyBefore( self ):
 
         provideHandler(notifyBeforeHandler)
@@ -403,6 +418,35 @@
             self.assertEqual( len( notified ), 1 )
             self.assertEqual( notified[0], ( ob, 'action', 'exception' ) )
 
+    def test_getStatusOf(self):
+        tool = self._makeWithTypesAndChain()
+
+        ob = DummyContent('dummy')
+        dummy_status0 = object()
+        dummy_status1 = object()
+        ob.workflow_history = {'a': (dummy_status0, dummy_status1)}
+
+        self.assertEqual( tool.getStatusOf('a', ob), dummy_status1 )
+
+    def test_setStatusOf(self):
+        tool = self._makeWithTypesAndChain()
+
+        ob = DummyContent('dummy')
+        dummy_status0 = object()
+        tool.setStatusOf('a', ob, dummy_status0)
+
+        self.failUnless( 'a' in ob.workflow_history )
+        self.assertEqual( len(ob.workflow_history['a']), 1 )
+        self.assertEqual( ob.workflow_history['a'][0], dummy_status0 )
+
+        dummy_status1 = object()
+        tool.setStatusOf('a', ob, dummy_status1)
+
+        self.failUnless( 'a' in ob.workflow_history )
+        self.assertEqual( len(ob.workflow_history['a']), 2 )
+        self.assertEqual( ob.workflow_history['a'][0], dummy_status0 )
+        self.assertEqual( ob.workflow_history['a'][1], dummy_status1 )
+
     def xxx_test_updateRoleMappings( self ):
         """
             Build a tree of objects, invoke tool.updateRoleMappings,



More information about the Checkins mailing list