From 10beea876597cbc3c619c19a6c79be61bf8e4923 Mon Sep 17 00:00:00 2001
From: Leonardo Rochael Almeida <leonardo@nexedi.com>
Date: Wed, 18 Nov 2009 17:10:42 +0000
Subject: [PATCH] Get testBusinessTemplate to work on CMF 2.2. Add a fake
 manage_addWorkflow method to portal_workflow, and switch to adding
 erp5_workflows instead of dc_workflows, which are much harder to add
 programatically on CMF 2.2

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@30750 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5/tests/testBusinessTemplate.py | 34 ++++++++++++++++++++--
 1 file changed, 31 insertions(+), 3 deletions(-)

diff --git a/product/ERP5/tests/testBusinessTemplate.py b/product/ERP5/tests/testBusinessTemplate.py
index d91bca6534..59898010e7 100644
--- a/product/ERP5/tests/testBusinessTemplate.py
+++ b/product/ERP5/tests/testBusinessTemplate.py
@@ -44,6 +44,22 @@ from Products.CMFCore.tests.base.testcase import LogInterceptor
 import shutil
 import os
 
+from MethodObject import Method
+from Persistence import Persistent
+
+class Fake_manage_addWorkflow(Method, Persistent):
+
+  isFake = True # flag to allow removal of this method.
+
+  def __call__(self, context, workflow_type, workflow_id):
+    workflow_factory_id, _workflow_type_title = workflow_type.split(' ', 1)
+    dispatcher = context.manage_addProduct['ERP5Type']
+    factory = getattr(dispatcher,
+                      'addWorkflow_' + workflow_factory_id)
+    return factory(workflow_id)
+
+WORKFLOW_TYPE = 'erp5_workflow (ERP5-style empty workflow)' 
+
 class TestBusinessTemplate(ERP5TypeTestCase, LogInterceptor):
   """
     Test these operations:
@@ -88,10 +104,23 @@ class TestBusinessTemplate(ERP5TypeTestCase, LogInterceptor):
         'any' in content_type_registry.predicate_ids):
       content_type_registry.removePredicate('any')
       transaction.commit()
+    pw = self.getWorkflowTool()
+    if getattr(pw, 'manage_addWorkflow', None) is None:
+      # CMF 2.2 no longer has manage_addWorkflow, and workflows should be added
+      # using manage_addProduct['ERP5Type'].manage_addWorkflow_<factory-id>,
+      # but this doesn't work on CMF 1.5
+      # BACK: stop using this hack when we drop Zope 2.8, CMF 2.2
+      pw.manage_addWorkflow = Fake_manage_addWorkflow()
 
   def beforeTearDown(self):
     """Remove objects created tests."""
     pw = self.getWorkflowTool()
+    if getattr(aq_base(pw.manage_addWorkflow),
+               'isFake', False):
+      # remove fake method which was added to make tests compatible with CMF 2.2
+      # BACK: remove this hack when we've abandoned Zope 2.8
+      del pw.manage_addWorkflow
+
     cbt = pw._chains_by_type
     props = {}
     if cbt is not None:
@@ -1099,7 +1128,7 @@ class TestBusinessTemplate(ERP5TypeTestCase, LogInterceptor):
     Create a workflow
     """
     pw = self.getWorkflowTool()
-    pw.manage_addWorkflow('dc_workflow (Web-configurable workflow)', 'geek_workflow')
+    pw.manage_addWorkflow(WORKFLOW_TYPE, 'geek_workflow')
     workflow = pw._getOb('geek_workflow', None)
     self.failUnless(workflow is not None)
     sequence.edit(workflow_id=workflow.getId())
@@ -4763,8 +4792,7 @@ class TestBusinessTemplate(ERP5TypeTestCase, LogInterceptor):
     Create a custom workflow
     """
     pw = self.getWorkflowTool()
-    pw.manage_addWorkflow('dc_workflow (Web-configurable workflow)',
-                          'custom_geek_workflow')
+    pw.manage_addWorkflow(WORKFLOW_TYPE, 'custom_geek_workflow')
     workflow = pw._getOb('custom_geek_workflow', None)
     self.failUnless(workflow is not None)
     sequence.edit(workflow_id=workflow.getId())
-- 
2.30.9