From ce45a47b41d4d3742dfb16e1bbd4101bdf28d032 Mon Sep 17 00:00:00 2001 From: Romain Courteaud <romain@nexedi.com> Date: Tue, 29 Jan 2013 16:03:57 +0100 Subject: [PATCH] Submit payment only if the amount is not null. --- .../PaymentTransaction_startPayzenPayment.xml | 3 +- .../TestTemplateItem/testSlapOSPayzenAlarm.py | 62 ++++++++++++++++++- master/bt5/slapos_payzen/bt/revision | 2 +- 3 files changed, 63 insertions(+), 4 deletions(-) diff --git a/master/bt5/slapos_payzen/SkinTemplateItem/portal_skins/slapos_payzen/PaymentTransaction_startPayzenPayment.xml b/master/bt5/slapos_payzen/SkinTemplateItem/portal_skins/slapos_payzen/PaymentTransaction_startPayzenPayment.xml index 34bfe3a30..d9fb9bb82 100644 --- a/master/bt5/slapos_payzen/SkinTemplateItem/portal_skins/slapos_payzen/PaymentTransaction_startPayzenPayment.xml +++ b/master/bt5/slapos_payzen/SkinTemplateItem/portal_skins/slapos_payzen/PaymentTransaction_startPayzenPayment.xml @@ -54,7 +54,8 @@ portal = context.getPortalObject()\n \n state = context.getSimulationState()\n -if (state != \'confirmed\') or (context.getPaymentMode() != \'payzen\'):\n +transaction_amount = int(round((context.PaymentTransaction_getTotalPayablePrice() * -100), 2))\n +if (state != \'confirmed\') or (context.getPaymentMode() != \'payzen\') or (transaction_amount == 0):\n return\n else:\n # Request manual payment\n diff --git a/master/bt5/slapos_payzen/TestTemplateItem/testSlapOSPayzenAlarm.py b/master/bt5/slapos_payzen/TestTemplateItem/testSlapOSPayzenAlarm.py index 61e22eb6f..d01b2262e 100644 --- a/master/bt5/slapos_payzen/TestTemplateItem/testSlapOSPayzenAlarm.py +++ b/master/bt5/slapos_payzen/TestTemplateItem/testSlapOSPayzenAlarm.py @@ -117,6 +117,34 @@ portal_workflow.doActionFor(context, action='edit_action', comment='Visited by P 'Visited by PaymentTransaction_startPayzenPayment', transaction.workflow_history['edit_workflow'][-1]['comment']) + def _simulatePaymentTransaction_getTotalPayablePrice(self): + script_name = 'PaymentTransaction_getTotalPayablePrice' + if script_name in self.portal.portal_skins.custom.objectIds(): + raise ValueError('Precondition failed: %s exists in custom' % script_name) + createZODBPythonScript(self.portal.portal_skins.custom, + script_name, + '*args, **kwargs', + '# Script body\n' +"""return 1""") + transaction.commit() + + def _simulatePaymentTransaction_getZeroTotalPayablePrice(self): + script_name = 'PaymentTransaction_getTotalPayablePrice' + if script_name in self.portal.portal_skins.custom.objectIds(): + raise ValueError('Precondition failed: %s exists in custom' % script_name) + createZODBPythonScript(self.portal.portal_skins.custom, + script_name, + '*args, **kwargs', + '# Script body\n' +"""return 0""") + transaction.commit() + + def _dropPaymentTransaction_getTotalPayablePrice(self): + script_name = 'PaymentTransaction_getTotalPayablePrice' + if script_name in self.portal.portal_skins.custom.objectIds(): + self.portal.portal_skins.custom.manage_delObjects(script_name) + transaction.commit() + def test_not_confirmed_payment(self): new_id = self.generateNewId() transaction = self.portal.accounting_module.newContent( @@ -127,7 +155,11 @@ portal_workflow.doActionFor(context, action='edit_action', comment='Visited by P ) simulation_state = transaction.getSimulationState() modification_date = transaction.getModificationDate() - transaction.PaymentTransaction_startPayzenPayment() + self._simulatePaymentTransaction_getTotalPayablePrice() + try: + transaction.PaymentTransaction_startPayzenPayment() + finally: + self._dropPaymentTransaction_getTotalPayablePrice() self.assertEquals(transaction.getSimulationState(), simulation_state) self.assertEquals(transaction.getModificationDate(), modification_date) @@ -141,7 +173,31 @@ portal_workflow.doActionFor(context, action='edit_action', comment='Visited by P self.portal.portal_workflow._jumpToStateFor(transaction, 'confirmed') simulation_state = transaction.getSimulationState() modification_date = transaction.getModificationDate() - transaction.PaymentTransaction_startPayzenPayment() + self._simulatePaymentTransaction_getTotalPayablePrice() + try: + transaction.PaymentTransaction_startPayzenPayment() + finally: + self._dropPaymentTransaction_getTotalPayablePrice() + self.assertEquals(transaction.getSimulationState(), simulation_state) + self.assertEquals(transaction.getModificationDate(), modification_date) + + def test_zero_amount_payment(self): + new_id = self.generateNewId() + transaction = self.portal.accounting_module.newContent( + portal_type='Payment Transaction', + title="Transaction %s" % new_id, + reference="TESTTRANS-%s" % new_id, + payment_mode="payzen", + ) + self.portal.portal_workflow._jumpToStateFor(transaction, 'confirmed') + simulation_state = transaction.getSimulationState() + modification_date = transaction.getModificationDate() + + self._simulatePaymentTransaction_getZeroTotalPayablePrice() + try: + transaction.PaymentTransaction_startPayzenPayment() + finally: + self._dropPaymentTransaction_getTotalPayablePrice() self.assertEquals(transaction.getSimulationState(), simulation_state) self.assertEquals(transaction.getModificationDate(), modification_date) @@ -174,10 +230,12 @@ portal_workflow.doActionFor(context, action='edit_action', comment='Visited by P self.portal.portal_workflow._jumpToStateFor(transaction, 'confirmed') self._simulatePaymentTransaction_sendManualPayzenPaymentUrl() + self._simulatePaymentTransaction_getTotalPayablePrice() try: transaction.PaymentTransaction_startPayzenPayment() finally: self._dropPaymentTransaction_sendManualPayzenPaymentUrl() + self._dropPaymentTransaction_getTotalPayablePrice() self.assertEquals(transaction.getSimulationState(), 'started') self.assertEqual( 'Visited by PaymentTransaction_sendManualPayzenPaymentUrl', diff --git a/master/bt5/slapos_payzen/bt/revision b/master/bt5/slapos_payzen/bt/revision index 105d7d9ad..97a55e1d7 100644 --- a/master/bt5/slapos_payzen/bt/revision +++ b/master/bt5/slapos_payzen/bt/revision @@ -1 +1 @@ -100 \ No newline at end of file +101 \ No newline at end of file -- 2.30.9