[Erp5-report] r28129 - /erp5/trunk/products/ERP5/tests/testBPMCore.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Tue Jul 21 15:50:49 CEST 2009
Author: luke
Date: Tue Jul 21 15:50:46 2009
New Revision: 28129
URL: http://svn.erp5.org?rev=28129&view=rev
Log:
- add test for isCompleted implementation
- create commong mixin class for low level BPM tests and put common methods into, to avoid code repetition, left some repetition for better readability
- refactor existing tests to use mixin class
- use variable for completed state, use this variable
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=28129&r1=28128&r2=28129&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testBPMCore.py [utf8] (original)
+++ erp5/trunk/products/ERP5/tests/testBPMCore.py [utf8] Tue Jul 21 15:50:46 2009
@@ -593,8 +593,7 @@
self.assertEquals(business_path_d_e.getExpectedStartDate(mock), DateTime('2009/04/08 GMT+9'))
self.assertEquals(business_path_d_e.getExpectedStopDate(mock), DateTime('2009/04/12 GMT+9'))
-class TestBPMisBuildableImplementation(TestBPMMixin):
-
+class TestBPMDummyDeliveryMovementMixin(TestBPMMixin):
def _createDelivery(self, **kw):
return self.folder.newContent(portal_type='Dummy Delivery', **kw)
@@ -618,14 +617,9 @@
self.portal.deleteContent(id='testing_folder')
self.stepTic()
- def test_isBuildable_OrderedDeliveredInvoiced(self):
- """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
- """
+ completed_state = 'confirmed'
+
+ def _createOrderedDeliveredInvoicedBusinessProcess(self):
# simple business process preparation
business_process = self.createBusinessProcess()
ordered = self.createBusinessState(business_process)
@@ -634,14 +628,42 @@
# path which is completed, as soon as related simulation movements are in
# proper state
- delivery_path = self.createBusinessPath(business_process,
+ self.delivery_path = self.createBusinessPath(business_process,
predecessor_value = ordered, successor_value = delivered,
- trade_phase='default/delivery', completed_state_list = ['confirmed'])
-
- invoice_path = self.createBusinessPath(business_process,
+ trade_phase='default/delivery', completed_state_list = [self.completed_state])
+
+ self.invoice_path = self.createBusinessPath(business_process,
predecessor_value = delivered, successor_value = invoiced,
trade_phase='default/invoicing')
-
+ self.stepTic()
+
+ def _createOrderedInvoicedDeliveredBusinessProcess(self):
+ business_process = self.createBusinessProcess()
+ ordered = self.createBusinessState(business_process)
+ delivered = self.createBusinessState(business_process)
+ invoiced = self.createBusinessState(business_process)
+
+ self.invoice_path = self.createBusinessPath(business_process,
+ predecessor_value = ordered, successor_value = invoiced,
+ trade_phase='default/invoicing', completed_state_list = [
+ self.completed_state])
+
+ self.delivery_path = self.createBusinessPath(business_process,
+ predecessor_value = invoiced, successor_value = delivered,
+ trade_phase='default/delivery')
+ self.stepTic()
+
+
+class TestBPMisBuildableImplementation(TestBPMDummyDeliveryMovementMixin):
+ def test_isBuildable_OrderedDeliveredInvoiced(self):
+ """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
+ """
+ self._createOrderedDeliveredInvoicedBusinessProcess()
# create order and order line to have starting point for business process
order = self._createDelivery()
order_line = self._createMovement(order)
@@ -653,34 +675,36 @@
simulation_movement = applied_rule.newContent(
portal_type = 'Simulation Movement',
order_value = order_line,
- causality_value = delivery_path
+ causality_value = self.delivery_path
)
# second level rule with simulation movement
invoicing_rule = simulation_movement.newContent(
portal_type='Applied Rule')
invoicing_simulation_movement = invoicing_rule.newContent(
- portal_type='Simulation Movement', causality_value = invoice_path)
+ portal_type='Simulation Movement',
+ causality_value = self.invoice_path)
# split simulation movement for first level applied rule
split_simulation_movement = applied_rule.newContent(
portal_type = 'Simulation Movement', order_value = order_line,
- causality_value = delivery_path)
+ causality_value = self.delivery_path)
# second level rule with simulation movement for split parent movement
split_invoicing_rule = split_simulation_movement.newContent(
portal_type='Applied Rule')
split_invoicing_simulation_movement = split_invoicing_rule.newContent(
- portal_type='Simulation Movement', causality_value = invoice_path)
+ portal_type='Simulation Movement',
+ causality_value = self.invoice_path)
self.stepTic()
# in the beginning only order related movements shall be buildable
- self.assertEquals(delivery_path.isBuildable(order), True)
+ self.assertEquals(self.delivery_path.isBuildable(order), True)
self.assertEquals(simulation_movement.isBuildable(), True)
self.assertEquals(split_simulation_movement.isBuildable(), True)
- self.assertEquals(invoice_path.isBuildable(order), False)
+ self.assertEquals(self.invoice_path.isBuildable(order), False)
self.assertEquals(invoicing_simulation_movement.isBuildable(), False)
self.assertEquals(split_invoicing_simulation_movement.isBuildable(),
False)
@@ -702,23 +726,23 @@
#
# delivery_path (for delivery) is not buildable - delivery is already
# built for those movements
- self.assertEquals(delivery_path.isBuildable(order), True)
+ self.assertEquals(self.delivery_path.isBuildable(order), True)
self.assertEquals(split_simulation_movement.isBuildable(), True)
- self.assertEquals(delivery_path.isBuildable(delivery), False)
- self.assertEquals(invoice_path.isBuildable(delivery), False)
+ self.assertEquals(self.delivery_path.isBuildable(delivery), False)
+ self.assertEquals(self.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)
+ self.assertEquals(self.invoice_path.isBuildable(order), False)
self.assertEquals(split_invoicing_simulation_movement.isBuildable(),
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())
+ delivery.setSimulationState(self.completed_state)
+
+ self.assertEqual(self.completed_state, delivery.getSimulationState())
self.stepTic()
@@ -730,14 +754,14 @@
#
# split movement for invoicing is not buildable - no proper delivery
# related for previous path
- self.assertEquals(delivery_path.isBuildable(order), True)
+ self.assertEquals(self.delivery_path.isBuildable(order), True)
self.assertEquals(invoicing_simulation_movement.isBuildable(), True)
- self.assertEquals(invoice_path.isBuildable(delivery), True)
+ self.assertEquals(self.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(self.invoice_path.isBuildable(order), True)
+
+ self.assertEquals(self.delivery_path.isBuildable(delivery), False)
self.assertEquals(simulation_movement.isBuildable(), False)
self.assertEquals(split_invoicing_simulation_movement.isBuildable(),
False)
@@ -750,18 +774,7 @@
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')
+ self._createOrderedInvoicedDeliveredBusinessProcess()
order = self._createDelivery()
order_line = self._createMovement(order)
@@ -772,20 +785,21 @@
simulation_movement = applied_rule.newContent(
portal_type = 'Simulation Movement',
order_value = order_line,
- causality_value = delivery_path
+ causality_value = self.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)
+ portal_type='Simulation Movement',
+ causality_value = self.invoice_path)
+
+ self.stepTic()
+
+ self.assertEquals(self.delivery_path.isBuildable(order), False)
self.assertEquals(simulation_movement.isBuildable(), False)
- self.assertEquals(invoice_path.isBuildable(order), True)
+ self.assertEquals(self.invoice_path.isBuildable(order), True)
self.assertEquals(invoicing_simulation_movement.isBuildable(), True)
delivery = self._createDelivery(causality_value = order)
@@ -795,28 +809,28 @@
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(self.delivery_path.isBuildable(order), False)
+
+ self.assertEquals(self.delivery_path.isBuildable(delivery), False)
+ self.assertEquals(self.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)
+ self.assertEquals(self.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)
+ delivery.setSimulationState(self.completed_state)
+
+ self.assertEqual(self.completed_state, delivery.getSimulationState())
+
+ self.stepTic()
+
+ self.assertEquals(self.delivery_path.isBuildable(order), True)
+ self.assertEquals(self.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(self.invoice_path.isBuildable(delivery), False)
+ self.assertEquals(self.invoice_path.isBuildable(order), False)
self.assertEquals(simulation_movement.isBuildable(), True)
# now simulate compensation
@@ -824,14 +838,15 @@
compensated_simulation_movement = applied_rule.newContent(
portal_type = 'Simulation Movement',
order_value = order_line,
- causality_value = delivery_path
+ causality_value = self.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)
+ compensated_invoicing_simulation_movement = compensated_invoicing_rule \
+ .newContent(portal_type='Simulation Movement',
+ causality_value = self.invoice_path)
# and delivery some part of tree
@@ -844,19 +859,219 @@
# 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(self.delivery_path.isBuildable(order), True)
+ self.assertEquals(self.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(self.invoice_path.isBuildable(order), True)
+ self.assertEquals(compensated_invoicing_simulation_movement.isBuildable(),
+ True)
self.assertEquals(compensated_simulation_movement.isBuildable(), False)
+
+class TestBPMisCompletedImplementation(TestBPMDummyDeliveryMovementMixin):
+ def test_isCompleted_OrderedDeliveredInvoiced(self):
+ """Test isCompleted for ordered, delivered and invoiced sequence"""
+ self._createOrderedDeliveredInvoicedBusinessProcess()
+
+ # create order and order line to have starting point for business process
+ order = self._createDelivery()
+ order_line = self._createMovement(order)
+
+ # first level rule with simulation movement
+ 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 = self.delivery_path
+ )
+
+ # second level rule with simulation movement
+ invoicing_rule = simulation_movement.newContent(
+ portal_type='Applied Rule')
+ invoicing_simulation_movement = invoicing_rule.newContent(
+ portal_type='Simulation Movement',
+ causality_value = self.invoice_path)
+
+ # split simulation movement for first level applied rule
+ split_simulation_movement = applied_rule.newContent(
+ portal_type = 'Simulation Movement', order_value = order_line,
+ causality_value = self.delivery_path)
+
+ # second level rule with simulation movement for split parent movement
+ split_invoicing_rule = split_simulation_movement.newContent(
+ portal_type='Applied Rule')
+ split_invoicing_simulation_movement = split_invoicing_rule.newContent(
+ portal_type='Simulation Movement',
+ causality_value = self.invoice_path)
+
+ self.stepTic()
+
+ self.assertEqual(self.delivery_path.isCompleted(order), False)
+ self.assertEqual(self.delivery_path.isPartiallyCompleted(order), False)
+
+ self.assertEqual(self.invoice_path.isCompleted(order), False)
+ self.assertEqual(self.invoice_path.isPartiallyCompleted(order), False)
+
+ # add delivery
+ delivery = self._createDelivery(causality_value = order)
+ delivery_line = self._createMovement(delivery)
+
+ # relate not split movement with delivery (deliver it)
+ simulation_movement.edit(delivery_value = delivery_line)
+
+ self.stepTic()
+
+ # nothing changes
+ self.assertEqual(self.delivery_path.isCompleted(order), False)
+ self.assertEqual(self.delivery_path.isPartiallyCompleted(order), False)
+
+ self.assertEqual(self.invoice_path.isCompleted(order), False)
+ self.assertEqual(self.invoice_path.isPartiallyCompleted(order), False)
+
+ # from delivery point of view everything is same
+ self.assertEqual(self.delivery_path.isCompleted(delivery), False)
+ self.assertEqual(self.delivery_path.isPartiallyCompleted(delivery), False)
+
+ self.assertEqual(self.invoice_path.isCompleted(delivery), False)
+ self.assertEqual(self.invoice_path.isPartiallyCompleted(delivery), False)
+
+ # put delivery in simulation state configured on path (and this state is
+ # available directly on movements)
+
+ delivery.setSimulationState(self.completed_state)
+
+ self.assertEqual(self.completed_state, delivery.getSimulationState())
+
+ self.stepTic()
+
+ # nothing changes
+ self.assertEqual(self.delivery_path.isCompleted(order), False)
+ self.assertEqual(self.delivery_path.isPartiallyCompleted(order), True)
+
+ self.assertEqual(self.invoice_path.isCompleted(order), False)
+ self.assertEqual(self.invoice_path.isPartiallyCompleted(order), False)
+
+ # from delivery point of view everything is same
+ self.assertEqual(self.delivery_path.isCompleted(delivery), True)
+ self.assertEqual(self.delivery_path.isPartiallyCompleted(delivery), True)
+
+ self.assertEqual(self.invoice_path.isCompleted(delivery), False)
+ self.assertEqual(self.invoice_path.isPartiallyCompleted(delivery), False)
+
+ def test_isCompleted_OrderedInvoicedDelivered(self):
+ """Test isCompleted for ordered, invoiced and invoiced sequence"""
+ self._createOrderedInvoicedDeliveredBusinessProcess()
+
+ 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 = self.delivery_path
+ )
+
+ invoicing_rule = simulation_movement.newContent(
+ portal_type='Applied Rule')
+ invoicing_simulation_movement = invoicing_rule.newContent(
+ portal_type='Simulation Movement',
+ causality_value = self.invoice_path)
+
+ self.stepTic()
+
+ self.assertEqual(self.delivery_path.isCompleted(order), False)
+ self.assertEqual(self.delivery_path.isPartiallyCompleted(order), False)
+
+ self.assertEqual(self.invoice_path.isCompleted(order), False)
+ self.assertEqual(self.invoice_path.isPartiallyCompleted(order), False)
+
+ delivery = self._createDelivery(causality_value = order)
+ delivery_line = self._createMovement(delivery)
+
+ invoicing_simulation_movement.edit(delivery_value = delivery_line)
+
+ self.stepTic()
+
+ self.assertEqual(self.delivery_path.isCompleted(order), False)
+ self.assertEqual(self.delivery_path.isPartiallyCompleted(order), False)
+
+ self.assertEqual(self.invoice_path.isCompleted(order), False)
+ self.assertEqual(self.invoice_path.isPartiallyCompleted(order), False)
+
+ self.assertEqual(self.delivery_path.isCompleted(delivery), False)
+ self.assertEqual(self.delivery_path.isPartiallyCompleted(delivery), False)
+
+ self.assertEqual(self.invoice_path.isCompleted(delivery), False)
+ self.assertEqual(self.invoice_path.isPartiallyCompleted(delivery), False)
+
+ # put delivery in simulation state configured on path (and this state is
+ # available directly on movements)
+
+ delivery.setSimulationState(self.completed_state)
+
+ self.assertEqual(self.completed_state, delivery.getSimulationState())
+
+ self.stepTic()
+
+ self.assertEqual(self.delivery_path.isCompleted(order), False)
+ self.assertEqual(self.delivery_path.isPartiallyCompleted(order), False)
+
+ self.assertEqual(self.invoice_path.isCompleted(order), True)
+ self.assertEqual(self.invoice_path.isPartiallyCompleted(order), True)
+
+ self.assertEqual(self.delivery_path.isCompleted(delivery), False)
+ self.assertEqual(self.delivery_path.isPartiallyCompleted(delivery), False)
+
+ self.assertEqual(self.invoice_path.isCompleted(delivery), True)
+ self.assertEqual(self.invoice_path.isPartiallyCompleted(delivery), True)
+
+ # now simulate compensation
+
+ compensated_simulation_movement = applied_rule.newContent(
+ portal_type = 'Simulation Movement',
+ order_value = order_line,
+ causality_value = self.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 = self.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()
+
+ self.assertEqual(self.delivery_path.isCompleted(order), False)
+ self.assertEqual(self.delivery_path.isPartiallyCompleted(order), False)
+
+ self.assertEqual(self.invoice_path.isCompleted(order), False)
+ self.assertEqual(self.invoice_path.isPartiallyCompleted(order), True)
+
+ self.assertEqual(self.delivery_path.isCompleted(delivery), False)
+ self.assertEqual(self.delivery_path.isPartiallyCompleted(delivery), False)
+
+ self.assertEqual(self.invoice_path.isCompleted(delivery), True)
+ self.assertEqual(self.invoice_path.isPartiallyCompleted(delivery), True)
def test_suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TestBPMImplementation))
suite.addTest(unittest.makeSuite(TestBPMisBuildableImplementation))
+ suite.addTest(unittest.makeSuite(TestBPMisCompletedImplementation))
return suite
More information about the Erp5-report
mailing list