From 923c2b8b3516a3a53c24fadbcbea7534a5179e69 Mon Sep 17 00:00:00 2001
From: Leonardo Rochael Almeida <leonardo@nexedi.com>
Date: Tue, 19 Apr 2011 15:39:52 +0000
Subject: [PATCH] add trade_phase predicates to rules and check that already
 applied rules are not rejected just because of that

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@45578 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5/tests/testRule.py | 40 +++++++++++++++++++++++-----------
 1 file changed, 27 insertions(+), 13 deletions(-)

diff --git a/product/ERP5/tests/testRule.py b/product/ERP5/tests/testRule.py
index 6eada47705..d55dfa078e 100644
--- a/product/ERP5/tests/testRule.py
+++ b/product/ERP5/tests/testRule.py
@@ -54,6 +54,9 @@ class TestRuleMixin(TestOrderMixin):
     assert rule.getVersion().startswith('testRule.')
     return rule
 
+  def _wipe(self, folder):
+    folder.manage_delObjects(list(folder.objectIds()))
+
   def afterSetUp(self):
     # delete rules
     rule_tool = self.portal.portal_rules
@@ -76,16 +79,15 @@ class TestRuleMixin(TestOrderMixin):
     else:
       self.pl = pl_module.objectValues()[0]
     #delete applied_rule
-    self.getSimulationTool().manage_delObjects(
-        ids=list(self.getSimulationTool().objectIds()))
+    self._wipe(self.getSimulationTool())
     # commit
     transaction.commit()
     self.tic()
 
 
   def beforeTearDown(self):
-    module = self.getSimulationTool()
-    module.manage_delObjects(list(module.objectIds()))
+    self._wipe(self.getSimulationTool())
+    self._wipe(self.portal.portal_skins.custom)
     transaction.commit()
     self.tic()
 
@@ -375,14 +377,21 @@ class TestRule(TestRuleMixin, ERP5TypeTestCase) :
     """
     if not run: return
 
-    skin_folder = self.getPortal().portal_skins.custom
-    skin = createZODBPythonScript(skin_folder, 'delivery_rule_script', 'rule',
+    skin_folder = self.portal.portal_skins.custom
+    createZODBPythonScript(skin_folder, 'delivery_rule_script', 'rule',
         "return False")
-
-    skin_folder = self.getPortal().portal_skins.custom
-    skin = createZODBPythonScript(skin_folder, 'invoice_rule_script', 'rule',
+    createZODBPythonScript(skin_folder, 'invoice_rule_script', 'rule',
         "return context.getParentValue().getSpecialiseReference() == 'default_delivery_rule'")
 
+    # XXX-Leo: This script should become the default in erp5_simulation. Remove
+    # it from here when no longer needed:
+    createZODBPythonScript(skin_folder, 'RuleMixin_asPredicate', '',
+        """
+kw = dict(criterion_property_list=("start_date",),
+          membership_criterion_base_category_list=('trade_phase',),)
+return context.generatePredicate(**kw)
+        """.strip())
+
     delivery_rule = self.getRule('default_delivery_rule')
     delivery_rule.validate()
 
@@ -425,9 +434,9 @@ class TestRule(TestRuleMixin, ERP5TypeTestCase) :
     self.assertEquals(root_applied_rule.objectCount(), 1)
     movement = root_applied_rule.objectValues()[0]
     self.assertEquals(movement.objectCount(), 1)
-    applied_rule = movement.objectValues()[0]
-    self.assertEquals(applied_rule.getSpecialise(),
-        invoicing_rule_1.getRelativeUrl())
+    invoicing_rule_1_applied_rule = movement.objectValues()[0]
+    self.assertEquals(invoicing_rule_1_applied_rule.getSpecialise(),
+                      invoicing_rule_1.getRelativeUrl())
 
     # add more invoicing_rule and test that nothing is changed
     ## same reference, higher version
@@ -457,8 +466,13 @@ class TestRule(TestRuleMixin, ERP5TypeTestCase) :
     self.assertEquals(movement.objectCount(), 2)
     applied_rule_list = sorted(movement.objectValues(),
                           key=lambda x: x.getSpecialiseValue().getReference())
+    # check the 1st applied rule is an application of invoicing_rule_1
     self.assertEquals(applied_rule_list[0].getSpecialise(),
-        invoicing_rule_1.getRelativeUrl())
+                      invoicing_rule_1.getRelativeUrl())
+    # but also check it's the same applied rule as before instead of a new
+    # one with the same specialization
+    self.assertEqual(applied_rule_list[0],
+                      invoicing_rule_1_applied_rule)
     self.assertEquals(applied_rule_list[1].getSpecialise(),
         invoicing_rule_2.getRelativeUrl())
 
-- 
2.30.9