[Erp5-report] r28425 - /erp5/trunk/products/ERP5/tests/testBPMEvaluation.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Mon Aug 17 18:15:58 CEST 2009
Author: luke
Date: Mon Aug 17 18:15:57 2009
New Revision: 28425
URL: http://svn.erp5.org?rev=28425&view=rev
Log:
- create generic rule mixing tests
- use it for testing BPM Order Rule and BPM Delivery Rule
- test for building packing list from order using interaction workflow from BPM
- updated docstrings and comments
- refactor names for more generic test behaviour
- use double editing instead of next transition to check stability of expand in case of duplicated lines
Modified:
erp5/trunk/products/ERP5/tests/testBPMEvaluation.py
Modified: erp5/trunk/products/ERP5/tests/testBPMEvaluation.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testBPMEvaluation.py?rev=28425&r1=28424&r2=28425&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testBPMEvaluation.py [utf8] (original)
+++ erp5/trunk/products/ERP5/tests/testBPMEvaluation.py [utf8] Mon Aug 17 18:15:57 2009
@@ -38,7 +38,8 @@
TODOs:
* avoid duplication of code when possible
- * implement tests wisely, to support at least both BPM cases
+ * implement tests wisely, to support at least both BPM scenarios
+ * test for root rule (similarity) and deeper rules
Scenarios to cover:
@@ -71,7 +72,7 @@
self._createNodes()
self._createBusinessProcess()
self._createTradeCondition()
- self._createOrder()
+ self._createRootDocument()
self.stepTic()
def _createDocument(self, portal_type, **kw):
@@ -89,8 +90,9 @@
self.trade_condition_portal_type,
specialise_value=self.business_process, **kw)
- def _createOrderLine(self, **kw):
- return self.order.newContent(portal_type=self.order_line_portal_type, **kw)
+ def _createRootDocumentLine(self, **kw):
+ return self.root_document.newContent(
+ portal_type=self.root_document_line_portal_type, **kw)
def _createNodes(self):
self.source, self.source_section = self._createNode(), self._createNode()
@@ -105,8 +107,8 @@
title=state_name)
setattr(self,'%s_state' % state_name, state_document)
- def _createOrder(self):
- self.order = self._createDocument(self.order_portal_type,
+ def _createRootDocument(self):
+ self.root_document = self._createDocument(self.root_document_portal_type,
source_value = self.source,
source_section_value = self.source_section,
destination_value = self.destination,
@@ -115,19 +117,19 @@
stop_date = self.order_stop_date,
specialise_value = self.trade_condition)
- def _checkBPMSimulation(self, delivery, root_applied_rule_portal_type):
+ def _checkBPMSimulation(self):
"""Checks BPM related simumation.
Note: Simulation tree is the same, it is totally independent from
BPM sequence"""
# TODO:
# - gather errors into one list
- bpm_root_rule = delivery.getCausalityRelatedValue(
+ bpm_root_rule = self.root_document.getCausalityRelatedValue(
portal_type='Applied Rule')
self.assertEqual(bpm_root_rule.getSpecialiseValue().getPortalType(),
- root_applied_rule_portal_type)
+ self.root_rule_portal_type)
root_simulation_movement_list = bpm_root_rule.contentValues()
- self.assertEqual(len(delivery.getMovementList()),
+ self.assertEqual(len(self.root_document.getMovementList()),
len(root_simulation_movement_list))
for root_simulation_movement in root_simulation_movement_list:
self.assertEqual(root_simulation_movement.getPortalType(),
@@ -160,15 +162,15 @@
for property in 'resource', 'price', 'quantity', 'start_date', \
'stop_date', 'source', 'destination', 'source_section', \
'destination_section':
- if movement.getProperty(property) != invoicing_simulation_movement \
- .getProperty(property):
+ if movement.getProperty(property) != \
+ invoicing_simulation_movement.getProperty(property):
property_problem_list.append('property %s movement %s '
'simulation %s' % (property, movement.getProperty(property),
invoicing_simulation_movement.getProperty(property)))
if len(property_problem_list) > 0:
self.fail('\n'.join(property_problem_list))
- self.assertEquals(len(invoicing_simulation_movement.contentValues()),
- 1)
+ self.assertEquals(
+ len(invoicing_simulation_movement.contentValues()), 1)
for trade_model_rule in invoicing_simulation_movement \
.contentValues():
self.assertEqual(trade_model_rule.getPortalType(), 'Applied Rule')
@@ -177,9 +179,6 @@
self.assertSameSet(trade_model_rule.contentValues(
portal_type='Simulation Movement'), [])
- def _checkOrderBPMSimulation(self):
- self._checkBPMSimulation(self.order, 'BPM Order Rule')
-
class TestBPMEvaluationDefaultProcessMixin:
def _createBusinessProcess(self):
self.business_process = self.createBusinessProcess(title=self.id())
@@ -254,158 +253,164 @@
self.stepTic()
-class TestOrder(TestBPMEvaluationMixin):
- """Evaluation of BPM Sale Order system"""
-
- def test_planning(self):
- self.order_line = self._createOrderLine(resource_value = self._createProduct(),
- quantity = 10, price = 5)
- self.stepTic()
-
- self.order.plan()
- self.stepTic()
- self._checkOrderBPMSimulation()
-
- def test_planning_line_edit(self):
- self.test_planning()
+class GenericRuleTestsMixin:
+ """Tests which are generic for BPM Order, Delivery and Invoice Rule"""
+ def test_transition(self):
+ self.order_line = self._createRootDocumentLine(
+ resource_value = self._createProduct(), quantity = 10, price = 5)
+ self.stepTic()
+
+ self._doFirstTransition(self.root_document)
+ self.stepTic()
+ self._checkBPMSimulation()
+
+ def test_transition_line_edit(self):
+ self.test_transition()
self.order_line.edit(quantity = 8, price = 6)
self.stepTic()
- self._checkOrderBPMSimulation()
-
- def test_planning_line_edit_add(self):
- self.test_planning_line_edit()
- self.order_line_2 = self._createOrderLine(
+ self._checkBPMSimulation()
+
+ def test_transition_line_edit_add(self):
+ self.test_transition_line_edit()
+ self.order_line_2 = self._createRootDocumentLine(
resource_value = self._createProduct(), quantity = 4, price = 2)
self.stepTic()
- self._checkOrderBPMSimulation()
-
- def test_planning_line_edit_add_many_transactions(self):
- self.test_planning_line_edit()
- self.order_line_9 = self._createOrderLine()
- self.stepTic()
- self._checkOrderBPMSimulation()
+ self._checkBPMSimulation()
+
+ def test_transition_line_edit_add_many_transactions(self):
+ self.test_transition_line_edit()
+ self.order_line_9 = self._createRootDocumentLine()
+ self.stepTic()
+ self._checkBPMSimulation()
self.order_line_9.edit(resource_value = self._createProduct())
self.stepTic()
- self._checkOrderBPMSimulation()
+ self._checkBPMSimulation()
self.order_line_9.edit(quantity = 1)
self.stepTic()
- self._checkOrderBPMSimulation()
+ self._checkBPMSimulation()
self.order_line_9.edit(price = 33)
self.stepTic()
- self._checkOrderBPMSimulation()
+ self._checkBPMSimulation()
self.order_line_9.edit(resource_value = self._createProduct())
self.stepTic()
- self._checkOrderBPMSimulation()
-
- def test_planning_line_edit_add_same_resource(self):
- self.test_planning_line_edit()
+ self._checkBPMSimulation()
+
+ def test_transition_line_edit_add_same_resource(self):
+ self.test_transition_line_edit()
resource = self.order_line.getResourceValue()
- self.order_line_10 = self._createOrderLine(resource_value = resource,
- quantity = 9, price = 2)
- self.stepTic()
- self._checkOrderBPMSimulation()
-
- def test_planning_line_edit_add_same_resource_than_order(self):
- self.test_planning_line_edit_add_same_resource()
- self.order.order()
- self.stepTic()
- self._checkOrderBPMSimulation()
-
-class TestPackingList(TestBPMEvaluationMixin):
- """Evaluation of BPM Order to Packing List"""
- packing_list_start_date = TestBPMEvaluationMixin.order_start_date
- packing_list_stop_date = TestBPMEvaluationMixin.order_stop_date
-
- def _createPackingListLine(self, **kw):
- return self.packing_list.newContent(
- portal_type=self.packing_list_line_portal_type, **kw)
-
- def _createPackingList(self):
- self.packing_list = self._createDocument(self.packing_list_portal_type,
- source_value = self.source,
- source_section_value = self.source_section,
- destination_value = self.destination,
- destination_section_value = self.destination_section,
- start_date = self.packing_list_start_date,
- stop_date = self.packing_list_stop_date,
- specialise_value = self.trade_condition)
-
- def _checkPackingListBPMSimulation(self):
- self._checkBPMSimulation(self.packing_list, 'BPM Delivery Rule')
-
- def test_confirming_packing_list_only(self):
- self._createPackingList()
- self.packing_list_line = self._createPackingListLine(
- resource_value = self._createProduct(), quantity = 10, price = 5)
- self.stepTic()
-
- self.packing_list.confirm()
- self.stepTic()
- self._checkPackingListBPMSimulation()
-
-class TestInvoice(TestBPMEvaluationMixin):
- """Evaluation of BPM Order through Packing List to Invoice Transaction"""
- pass
-
-class TestOrderDefaultProcess(TestOrder, TestBPMEvaluationDefaultProcessMixin):
- pass
-
-class TestPackingListDefaultProcess(TestPackingList, TestBPMEvaluationDefaultProcessMixin):
- pass
-
-class TestInvoiceDefaultProcess(TestInvoice, TestBPMEvaluationDefaultProcessMixin):
+ self.order_line_10 = self._createRootDocumentLine(
+ resource_value = resource, quantity = 9, price = 2)
+ self.stepTic()
+ self._checkBPMSimulation()
+
+ def test_transition_line_edit_add_same_resource_edit_again(self):
+ self.test_transition_line_edit_add_same_resource()
+
+ self.root_document.edit(title = self.root_document.getTitle() + 'a' )
+ self.stepTic()
+ self._checkBPMSimulation()
+
+class TestOrder(TestBPMEvaluationMixin, GenericRuleTestsMixin):
+ """Check BPM Order Rule behaviour"""
+ root_document_portal_type = 'Sale Order'
+ root_document_line_portal_type = 'Sale Order Line'
+ root_rule_portal_type = 'BPM Order Rule'
+
+ def _doFirstTransition(self, document):
+ document.plan()
+
def test_confirming(self):
- self.order_line = self._createOrderLine(resource_value = self._createProduct(),
- quantity = 10, price = 5)
- self.stepTic()
-
- self.order.confirm()
- self.stepTic()
- self._checkOrderBPMSimulation()
+ self.order_line = self._createRootDocumentLine(
+ resource_value = self._createProduct(), quantity = 10, price = 5)
+ self.stepTic()
+
+ self.root_document.confirm()
+ self.stepTic()
+ self._checkBPMSimulation()
self.assertEqual(
- 1,
- len(self.order.getCausalityRelatedList(
- portal_type=self.packing_list_portal_type))
+ 2,
+ len(self.root_document.getCausalityRelatedList())
)
-
-
-class TestOrderDifferentProcess(TestOrder, TestBPMEvaluationDifferentProcessMixin):
+ self.assertEqual(
+ 'Applied Rule',
+ self.root_document.getCausalityRelatedValue(
+ portal_type='Applied Rule').getPortalType()
+ )
+
+ self.assertEqual(
+ self.packing_list_portal_type,
+ self.root_document.getCausalityRelatedValue(
+ portal_type=self.packing_list_portal_type).getPortalType()
+ )
+
+class TestPackingList(TestBPMEvaluationMixin, GenericRuleTestsMixin):
+ """Check BPM Delivery Rule behaviour"""
+ root_document_portal_type = 'Sale Packing List'
+ root_document_line_portal_type = 'Sale Packing List Line'
+ root_rule_portal_type = 'BPM Delivery Rule'
+
+ def _doFirstTransition(self, document):
+ document.confirm()
+
+class TestInvoice(TestBPMEvaluationMixin, GenericRuleTestsMixin):
+ """Check BPM Invoice Rule behaviour"""
+ # not implemented yet
+ pass
+
+class TestOrderDefaultProcess(TestOrder,
+ TestBPMEvaluationDefaultProcessMixin):
+ pass
+
+class TestPackingListDefaultProcess(TestPackingList,
+ TestBPMEvaluationDefaultProcessMixin):
+ pass
+
+class TestInvoiceDefaultProcess(TestInvoice,
+ TestBPMEvaluationDefaultProcessMixin):
+ pass
+
+class TestOrderDifferentProcess(TestOrder,
+ TestBPMEvaluationDifferentProcessMixin):
def test_confirming(self):
# in current BPM configuration nothing shall be built
# as soon as test business process will be finished, it shall built proper
# delivery
- self.order_line = self._createOrderLine(resource_value = self._createProduct(),
- quantity = 10, price = 5)
- self.stepTic()
-
- self.order.confirm()
- self.stepTic()
- self._checkOrderBPMSimulation()
+ self.order_line = self._createRootDocumentLine(
+ resource_value = self._createProduct(), quantity = 10, price = 5)
+ self.stepTic()
+
+ self.root_document.confirm()
+ self.stepTic()
+ self._checkBPMSimulation()
self.assertEqual(
1,
- len(self.order.getCausalityRelatedList())
+ len(self.root_document.getCausalityRelatedList())
)
self.assertEqual(
'Applied Rule',
- self.order.getCausalityRelatedValue().getPortalType()
+ self.root_document.getCausalityRelatedValue().getPortalType()
)
-class TestPackingListDifferentProcess(TestPackingList, TestBPMEvaluationDifferentProcessMixin):
- pass
-
-class TestInvoiceDifferentProcess(TestInvoice, TestBPMEvaluationDifferentProcessMixin):
+class TestPackingListDifferentProcess(TestPackingList,
+ TestBPMEvaluationDifferentProcessMixin):
+ pass
+
+class TestInvoiceDifferentProcess(TestInvoice,
+ TestBPMEvaluationDifferentProcessMixin):
pass
def test_suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TestOrderDefaultProcess))
suite.addTest(unittest.makeSuite(TestPackingListDefaultProcess))
- suite.addTest(unittest.makeSuite(TestInvoiceDefaultProcess))
+# suite.addTest(unittest.makeSuite(TestInvoiceDefaultProcess))
+
suite.addTest(unittest.makeSuite(TestOrderDifferentProcess))
suite.addTest(unittest.makeSuite(TestPackingListDifferentProcess))
- suite.addTest(unittest.makeSuite(TestInvoiceDifferentProcess))
+# suite.addTest(unittest.makeSuite(TestInvoiceDifferentProcess))
+
return suite
More information about the Erp5-report
mailing list