From e6cfbd74205c6ae34c9dd4b2c175e3bb39d9c5cd Mon Sep 17 00:00:00 2001 From: Vincent Pelletier <vincent@nexedi.com> Date: Tue, 20 Mar 2007 14:54:39 +0000 Subject: [PATCH] Factorise workflow transition code (note: this is only a partial factorisation to retain backward compatibility with old ERP5Type versions). Add a step to check for the case where no resource is defined on the Account Incident. Add Tic before checking inventory and between workflow transitions. git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@13524 20353a03-c40f-0410-a6d1-a30d3c3de9de --- .../tests/testERP5BankingAccountIncident.py | 88 ++++++++----------- 1 file changed, 36 insertions(+), 52 deletions(-) diff --git a/product/ERP5Banking/tests/testERP5BankingAccountIncident.py b/product/ERP5Banking/tests/testERP5BankingAccountIncident.py index e6d48f5afa..be9eb87b71 100755 --- a/product/ERP5Banking/tests/testERP5BankingAccountIncident.py +++ b/product/ERP5Banking/tests/testERP5BankingAccountIncident.py @@ -177,6 +177,25 @@ class TestERP5BankingAccountIncident(TestERP5BankingMixin, ERP5TypeTestCase): # open counter date self.openCounterDate(site=self.paris) + def genericAssertWorkflowTransitionFails(self, object, workflow_id, transition_id, error_message=None): + """ + Check that passing given transition from given workflow on given object + raises ValidationFailed. + Do sanity checks (workflow history length increased by one, simulation + state unchanged). + If error_message is provided, it will be asserted equal to the last + workflow history error message. + """ + reference_history_length = len(self.workflow_tool.getInfoFor(ob=object, name='history', wf_id=workflow_id)) + reference_workflow_state = object.getSimulationState() + self.assertRaises(ValidationFailed, self.workflow_tool.doActionFor, object, transition_id, wf_id=workflow_id) + workflow_history = self.workflow_tool.getInfoFor(ob=object, name='history', wf_id=workflow_id) + self.assertEqual(len(workflow_history), reference_history_length + 1) + if error_message is not None: + self.assertEqual(str(workflow_history[-1]['error_message']), error_message) + self.assertEqual(object.getSimulationState(), reference_workflow_state) + + def stepCleanupObjects(self, sequence=None, sequence_list=None, **kwd): """ Cleanup account_incident_module after a sequence execution so that @@ -350,21 +369,7 @@ class TestERP5BankingAccountIncident(TestERP5BankingMixin, ERP5TypeTestCase): """ # fix amount (10000 * 5.0 + 200 * 12.0 + 5000 * 24) self.account_incident.setSourceTotalAssetPrice('172400.0') - # try to do the workflow action "confirm_action', cath the exception ValidationFailed raised by workflow transition - self.assertRaises(ValidationFailed, self.workflow_tool.doActionFor, self.account_incident, 'confirm_action', wf_id='account_incident_workflow') - # execute tic - self.stepTic() - # get state of the cash transfer - state = self.account_incident.getSimulationState() - # check the state is draft - self.assertEqual(state, 'draft') - # get workflow history - workflow_history = self.workflow_tool.getInfoFor(ob=self.account_incident, name='history', wf_id='account_incident_workflow') - # check its len is 2 - self.assertEqual(len(workflow_history), 2) - # check we get an "Insufficient balance" message in the workflow history because of the invalid line - msg = workflow_history[-1]['error_message'] - self.assertEqual("You can't have excess and deficit on the document.", "%s" %(msg,)) + self.genericAssertWorkflowTransitionFails(object=self.account_incident, transition_id='confirm_action', workflow_id='account_incident_workflow', error_message="You can't have excess and deficit on the document.") def stepDelOutgoingLine(self, sequence=None, sequence_list=None, **kwd): @@ -379,22 +384,17 @@ class TestERP5BankingAccountIncident(TestERP5BankingMixin, ERP5TypeTestCase): Try to confirm the cash transfer with a bad cash transfer line and check the try of confirm the cash transfer with the invalid line has failed """ - # try to do the workflow action "confirm_action', cath the exception ValidationFailed raised by workflow transition - self.assertRaises(ValidationFailed, self.workflow_tool.doActionFor, self.account_incident, 'confirm_action', wf_id='account_incident_workflow') - # execute tic - self.stepTic() - # get state of the cash transfer - state = self.account_incident.getSimulationState() - # check the state is draft - self.assertEqual(state, 'draft') - # get workflow history - workflow_history = self.workflow_tool.getInfoFor(ob=self.account_incident, name='history', wf_id='account_incident_workflow') - # check its len is 2 - self.assertEqual(len(workflow_history), 3) - # check we get an "Insufficient balance" message in the workflow history because of the invalid line - msg = workflow_history[-1]['error_message'] - self.assertEqual("Price differs between document and resource.", "%s" %(msg,)) + self.genericAssertWorkflowTransitionFails(object=self.account_incident, transition_id='confirm_action', workflow_id='account_incident_workflow', error_message="Price differs between document and resource.") + def stepTryConfirmAccountIncidentWithNoResource(self, sequence=None, sequence_list=None, **kwd): + """ + Check that confirming with no resource defined fails. + """ + original_resource_path = self.account_incident.getResource() + self.account_incident.setResource('') + self.assertEqual(self.account_incident.getResourceValue(), None) + self.genericAssertWorkflowTransitionFails(object=self.account_incident, transition_id='confirm_action', workflow_id='account_incident_workflow', error_message="No resource defined.") + self.account_incident.setResource(original_resource_path) def stepCheckTotal(self, sequence=None, sequence_list=None, **kwd): """ @@ -417,17 +417,8 @@ class TestERP5BankingAccountIncident(TestERP5BankingMixin, ERP5TypeTestCase): self.account_incident.setSourceTotalAssetPrice('50000.0') # do the Workflow action self.workflow_tool.doActionFor(self.account_incident, 'confirm_action', wf_id='account_incident_workflow') - # execute tic - self.stepTic() - # get state - state = self.account_incident.getSimulationState() # check state is confirmed - self.assertEqual(state, 'confirmed') - # get workflow history - workflow_history = self.workflow_tool.getInfoFor(ob=self.account_incident, name='history', wf_id='account_incident_workflow') - # check len of workflow history is 4 - self.assertEqual(len(workflow_history), 5) - + self.assertEqual(self.account_incident.getSimulationState(), 'confirmed') def stepDeliverAccountIncident(self, sequence=None, sequence_list=None, **kwd): """ @@ -436,16 +427,8 @@ class TestERP5BankingAccountIncident(TestERP5BankingMixin, ERP5TypeTestCase): """ # do the workflow transition "archive_action" self.workflow_tool.doActionFor(self.account_incident, 'deliver_action', wf_id='account_incident_workflow') - # execute tic - self.stepTic() - # get state of cash transfer - state = self.account_incident.getSimulationState() # check that state is archiveed - self.assertEqual(state, 'delivered') - # get workflow history - workflow_history = self.workflow_tool.getInfoFor(ob=self.account_incident, name='history', wf_id='account_incident_workflow') - # check len of len workflow history is 6 - self.assertEqual(len(workflow_history), 7) + self.assertEqual(self.account_incident.getSimulationState(), 'delivered') def stepCheckFinalInventory(self, sequence=None, sequence_list=None, **kwd): @@ -478,12 +461,13 @@ class TestERP5BankingAccountIncident(TestERP5BankingMixin, ERP5TypeTestCase): sequence_string = 'Tic CheckObjects Tic CheckInitialInventory ' \ + 'CreateAccountIncident ' \ + 'CreateIncomingLine CheckSubTotal ' \ - + 'CreateOutgoingLine ' \ + + 'CreateOutgoingLine Tic ' \ + 'TryConfirmAccountIncidentWithTwoDifferentLines DelOutgoingLine Tic ' \ + 'TryConfirmAccountIncidentWithBadPrice ' \ + + 'TryConfirmAccountIncidentWithNoResource ' \ + 'Tic CheckTotal ' \ - + 'ConfirmAccountIncident ' \ - + 'DeliverAccountIncident ' \ + + 'ConfirmAccountIncident Tic ' \ + + 'DeliverAccountIncident Tic ' \ + 'CheckFinalInventory ' sequence_list.addSequenceString(sequence_string) # play the sequence -- 2.30.9