From 5b115a8f6758a0fc9f6a23b7cae46212e5513a9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Nowak?= <luke@nexedi.com> Date: Mon, 17 Aug 2009 16:15:57 +0000 Subject: [PATCH] - 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 git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@28425 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/ERP5/tests/testBPMEvaluation.py | 215 ++++++++++++------------ 1 file changed, 110 insertions(+), 105 deletions(-) diff --git a/product/ERP5/tests/testBPMEvaluation.py b/product/ERP5/tests/testBPMEvaluation.py index a2c9a17803..c15b38a607 100644 --- a/product/ERP5/tests/testBPMEvaluation.py +++ b/product/ERP5/tests/testBPMEvaluation.py @@ -38,7 +38,8 @@ It is advised to *NOT* remove erp5_administration. 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 @@ class TestBPMEvaluationMixin(TestBPMMixin): self._createNodes() self._createBusinessProcess() self._createTradeCondition() - self._createOrder() + self._createRootDocument() self.stepTic() def _createDocument(self, portal_type, **kw): @@ -89,8 +90,9 @@ class TestBPMEvaluationMixin(TestBPMMixin): 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 @@ class TestBPMEvaluationMixin(TestBPMMixin): 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 @@ class TestBPMEvaluationMixin(TestBPMMixin): 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 @@ class TestBPMEvaluationMixin(TestBPMMixin): 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 @@ class TestBPMEvaluationMixin(TestBPMMixin): 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 @@ class TestBPMEvaluationDifferentProcessMixin: 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) +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.order.plan() + self._doFirstTransition(self.root_document) self.stepTic() - self._checkOrderBPMSimulation() + self._checkBPMSimulation() - def test_planning_line_edit(self): - self.test_planning() + def test_transition_line_edit(self): + self.test_transition() self.order_line.edit(quantity = 8, price = 6) self.stepTic() - self._checkOrderBPMSimulation() + self._checkBPMSimulation() - def test_planning_line_edit_add(self): - self.test_planning_line_edit() - self.order_line_2 = self._createOrderLine( + 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() + self._checkBPMSimulation() - def test_planning_line_edit_add_many_transactions(self): - self.test_planning_line_edit() - self.order_line_9 = self._createOrderLine() + def test_transition_line_edit_add_many_transactions(self): + self.test_transition_line_edit() + self.order_line_9 = self._createRootDocumentLine() self.stepTic() - self._checkOrderBPMSimulation() + 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() + self._checkBPMSimulation() - def test_planning_line_edit_add_same_resource(self): - self.test_planning_line_edit() + 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.order_line_10 = self._createRootDocumentLine( + resource_value = resource, quantity = 9, price = 2) self.stepTic() - self._checkOrderBPMSimulation() + self._checkBPMSimulation() -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 test_transition_line_edit_add_same_resource_edit_again(self): + self.test_transition_line_edit_add_same_resource() - def _createPackingListLine(self, **kw): - return self.packing_list.newContent( - portal_type=self.packing_list_line_portal_type, **kw) + self.root_document.edit(title = self.root_document.getTitle() + 'a' ) + self.stepTic() + self._checkBPMSimulation() - 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) +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 _checkPackingListBPMSimulation(self): - self._checkBPMSimulation(self.packing_list, 'BPM Delivery Rule') + def _doFirstTransition(self, document): + document.plan() - def test_confirming_packing_list_only(self): - self._createPackingList() - self.packing_list_line = self._createPackingListLine( - resource_value = self._createProduct(), quantity = 10, price = 5) + def test_confirming(self): + self.order_line = self._createRootDocumentLine( + resource_value = self._createProduct(), quantity = 10, price = 5) self.stepTic() - self.packing_list.confirm() + self.root_document.confirm() self.stepTic() - self._checkPackingListBPMSimulation() + self._checkBPMSimulation() + self.assertEqual( + 2, + len(self.root_document.getCausalityRelatedList()) + ) + self.assertEqual( + 'Applied Rule', + self.root_document.getCausalityRelatedValue( + portal_type='Applied Rule').getPortalType() + ) -class TestInvoice(TestBPMEvaluationMixin): - """Evaluation of BPM Order through Packing List to Invoice Transaction""" - pass + self.assertEqual( + self.packing_list_portal_type, + self.root_document.getCausalityRelatedValue( + portal_type=self.packing_list_portal_type).getPortalType() + ) -class TestOrderDefaultProcess(TestOrder, TestBPMEvaluationDefaultProcessMixin): - pass +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' -class TestPackingListDefaultProcess(TestPackingList, TestBPMEvaluationDefaultProcessMixin): + def _doFirstTransition(self, document): + document.confirm() + +class TestInvoice(TestBPMEvaluationMixin, GenericRuleTestsMixin): + """Check BPM Invoice Rule behaviour""" + # not implemented yet pass -class TestInvoiceDefaultProcess(TestInvoice, TestBPMEvaluationDefaultProcessMixin): - def test_confirming(self): - self.order_line = self._createOrderLine(resource_value = self._createProduct(), - quantity = 10, price = 5) - self.stepTic() +class TestOrderDefaultProcess(TestOrder, + TestBPMEvaluationDefaultProcessMixin): + pass - self.order.confirm() - self.stepTic() - self._checkOrderBPMSimulation() - self.assertEqual( - 1, - len(self.order.getCausalityRelatedList( - portal_type=self.packing_list_portal_type)) - ) +class TestPackingListDefaultProcess(TestPackingList, + TestBPMEvaluationDefaultProcessMixin): + pass +class TestInvoiceDefaultProcess(TestInvoice, + TestBPMEvaluationDefaultProcessMixin): + pass -class TestOrderDifferentProcess(TestOrder, TestBPMEvaluationDifferentProcessMixin): +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.order_line = self._createRootDocumentLine( + resource_value = self._createProduct(), quantity = 10, price = 5) self.stepTic() - self.order.confirm() + self.root_document.confirm() self.stepTic() - self._checkOrderBPMSimulation() + 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): +class TestPackingListDifferentProcess(TestPackingList, + TestBPMEvaluationDifferentProcessMixin): pass -class TestInvoiceDifferentProcess(TestInvoice, TestBPMEvaluationDifferentProcessMixin): +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 -- 2.30.9