[Erp5-report] r28127 - /erp5/trunk/products/ERP5/tests/testBPMCore.py

nobody at svn.erp5.org nobody at svn.erp5.org
Tue Jul 21 15:00:35 CEST 2009


Author: luke
Date: Tue Jul 21 15:00:35 2009
New Revision: 28127

URL: http://svn.erp5.org?rev=28127&view=rev
Log:
 - implement test for ordered, invoiced and delivered business process with sequence not related to appearance of simulation tree with using of compensation
 - explain more in docstrings about tests
 - add comments relating to isBuildable implementation

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

Modified: erp5/trunk/products/ERP5/tests/testBPMCore.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testBPMCore.py?rev=28127&r1=28126&r2=28127&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testBPMCore.py [utf8] (original)
+++ erp5/trunk/products/ERP5/tests/testBPMCore.py [utf8] Tue Jul 21 15:00:35 2009
@@ -619,8 +619,13 @@
     self.stepTic()
 
   def test_isBuildable_OrderedDeliveredInvoiced(self):
-    """Test isBuildable implementation for Business Paths and Simulation Movements"""
-
+    """Test isBuildable for ordered, delivered and invoiced sequence
+
+    Here Business Process sequence corresponds simulation tree.
+
+    delivery_path is related to root applied rule, and invoice_path is related
+    to rule below, and invoice_path is after delivery_path
+    """
     # simple business process preparation
     business_process = self.createBusinessProcess()
     ordered = self.createBusinessState(business_process)
@@ -728,12 +733,127 @@
     self.assertEquals(delivery_path.isBuildable(order), True)
     self.assertEquals(invoicing_simulation_movement.isBuildable(), True)
     self.assertEquals(invoice_path.isBuildable(delivery), True)
+
+    # XXX look at comments in BusinessPath.isBuildable
     self.assertEquals(invoice_path.isBuildable(order), True)
 
     self.assertEquals(delivery_path.isBuildable(delivery), False)
     self.assertEquals(simulation_movement.isBuildable(), False)
     self.assertEquals(split_invoicing_simulation_movement.isBuildable(),
         False)
+
+  def test_isBuildable_OrderedInvoicedDelivered(self):
+    """Test isBuildable for ordered, invoiced and delivered sequence
+
+    Here Business Process sequence do not corresponds simulation tree.
+
+    delivery_path is related to root applied rule, and invoice_path is related
+    to rule below, but invoice_path is before delivery_path in seuqence.
+    """
+    business_process = self.createBusinessProcess()
+    ordered = self.createBusinessState(business_process)
+    delivered = self.createBusinessState(business_process)
+    invoiced = self.createBusinessState(business_process)
+
+    invoice_path = self.createBusinessPath(business_process,
+        predecessor_value = ordered, successor_value = invoiced,
+        trade_phase='default/invoicing', completed_state_list = ['confirmed'])
+
+    delivery_path = self.createBusinessPath(business_process,
+        predecessor_value = invoiced, successor_value = delivered,
+        trade_phase='default/delivery')
+
+    order = self._createDelivery()
+    order_line = self._createMovement(order)
+
+    applied_rule = self.portal.portal_simulation.newContent(
+        portal_type='Applied Rule', causality_value=order)
+
+    simulation_movement = applied_rule.newContent(
+      portal_type = 'Simulation Movement',
+      order_value = order_line,
+      causality_value = delivery_path
+    )
+
+    invoicing_rule = simulation_movement.newContent(
+        portal_type='Applied Rule')
+    invoicing_simulation_movement = invoicing_rule.newContent(
+        portal_type='Simulation Movement', causality_value = invoice_path)
+
+    self.stepTic()
+
+    self.assertEquals(delivery_path.isBuildable(order), False)
+    self.assertEquals(simulation_movement.isBuildable(), False)
+
+    self.assertEquals(invoice_path.isBuildable(order), True)
+    self.assertEquals(invoicing_simulation_movement.isBuildable(), True)
+
+    delivery = self._createDelivery(causality_value = order)
+    delivery_line = self._createMovement(delivery)
+
+    invoicing_simulation_movement.edit(delivery_value = delivery_line)
+
+    self.stepTic()
+
+    self.assertEquals(delivery_path.isBuildable(order), False)
+
+    self.assertEquals(delivery_path.isBuildable(delivery), False)
+    self.assertEquals(invoice_path.isBuildable(delivery), False)
+    self.assertEquals(simulation_movement.isBuildable(), False)
+    self.assertEquals(invoicing_simulation_movement.isBuildable(), False)
+    self.assertEquals(invoice_path.isBuildable(order), False)
+
+    # put delivery in simulation state configured on path (and this state is
+    # available directly on movements)
+
+    delivery.setSimulationState('confirmed')
+
+    self.assertEqual('confirmed', delivery.getSimulationState())
+
+    self.stepTic()
+
+    self.assertEquals(delivery_path.isBuildable(order), True)
+    self.assertEquals(delivery_path.isBuildable(delivery), True)
+    self.assertEquals(invoicing_simulation_movement.isBuildable(), False)
+    self.assertEquals(invoice_path.isBuildable(delivery), False)
+    self.assertEquals(invoice_path.isBuildable(order), False)
+    self.assertEquals(simulation_movement.isBuildable(), True)
+
+    # now simulate compensation
+
+    compensated_simulation_movement = applied_rule.newContent(
+      portal_type = 'Simulation Movement',
+      order_value = order_line,
+      causality_value = delivery_path
+    )
+
+    compensated_invoicing_rule = compensated_simulation_movement.newContent(
+        portal_type='Applied Rule')
+
+    compensated_invoicing_simulation_movement = compensated_invoicing_rule.newContent(
+        portal_type='Simulation Movement', causality_value = invoice_path)
+
+    # and delivery some part of tree
+
+    another_delivery = self._createDelivery(causality_value = delivery)
+    another_delivery_line = self._createMovement(another_delivery)
+
+    simulation_movement.edit(delivery_value=another_delivery_line)
+
+    self.stepTic()
+
+    # XXX look at comments in BusinessPath.isBuildable
+    # in this case expected result if False for delivery_path.isBuildable(order)
+    self.assertEquals(delivery_path.isBuildable(order), True)
+    self.assertEquals(delivery_path.isBuildable(delivery), False)
+
+    self.assertEquals(simulation_movement.isBuildable(), False)
+    self.assertEquals(invoicing_simulation_movement.isBuildable(), False)
+
+    self.assertEquals(invoice_path.isBuildable(order), True)
+    self.assertEquals(compensated_invoicing_simulation_movement.isBuildable(), True)
+
+    self.assertEquals(compensated_simulation_movement.isBuildable(), False)
 
 def test_suite():
   suite = unittest.TestSuite()




More information about the Erp5-report mailing list