diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/payment_ingenico/tests | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/payment_ingenico/tests')
| -rw-r--r-- | addons/payment_ingenico/tests/__init__.py | 1 | ||||
| -rw-r--r-- | addons/payment_ingenico/tests/test_ogone.py | 195 |
2 files changed, 196 insertions, 0 deletions
diff --git a/addons/payment_ingenico/tests/__init__.py b/addons/payment_ingenico/tests/__init__.py new file mode 100644 index 00000000..40a96afc --- /dev/null +++ b/addons/payment_ingenico/tests/__init__.py @@ -0,0 +1 @@ +# -*- coding: utf-8 -*- diff --git a/addons/payment_ingenico/tests/test_ogone.py b/addons/payment_ingenico/tests/test_ogone.py new file mode 100644 index 00000000..9a8f5774 --- /dev/null +++ b/addons/payment_ingenico/tests/test_ogone.py @@ -0,0 +1,195 @@ +# -*- coding: utf-8 -*- + +from lxml import objectify +import time + +from odoo.addons.payment.models.payment_acquirer import ValidationError +from odoo.addons.payment.tests.common import PaymentAcquirerCommon +from odoo.addons.payment_ingenico.controllers.main import OgoneController +from werkzeug import urls + +from odoo.tools import mute_logger +from odoo.tests import tagged + + +@tagged('post_install', '-at_install', 'external', '-standard') +class OgonePayment(PaymentAcquirerCommon): + + @classmethod + def setUpClass(cls, chart_template_ref=None): + super().setUpClass(chart_template_ref=chart_template_ref) + + cls.ogone = cls.env.ref('payment.payment_acquirer_ogone') + cls.ogone.write({ + 'ogone_pspid': 'dummy', + 'ogone_userid': 'dummy', + 'ogone_password': 'dummy', + 'ogone_shakey_in': 'dummy', + 'ogone_shakey_out': 'dummy', + 'state': 'test', + }) + + def test_10_ogone_form_render(self): + base_url = self.env['ir.config_parameter'].get_param('web.base.url') + # be sure not to do stupid thing + self.assertEqual(self.ogone.state, 'test', 'test without test environment') + + # ---------------------------------------- + # Test: button direct rendering + shasign + # ---------------------------------------- + + form_values = { + 'PSPID': 'dummy', + 'ORDERID': 'test_ref0', + 'AMOUNT': '1', + 'CURRENCY': 'EUR', + 'LANGUAGE': 'en_US', + 'CN': 'Norbert Buyer', + 'EMAIL': 'norbert.buyer@example.com', + 'OWNERZIP': '1000', + 'OWNERADDRESS': 'Huge Street 2/543', + 'OWNERCTY': 'Belgium', + 'OWNERTOWN': 'Sin City', + 'OWNERTELNO': '0032 12 34 56 78', + 'SHASIGN': '815f67b8ff70d234ffcf437c13a9fa7f807044cc', + 'ACCEPTURL': urls.url_join(base_url, OgoneController._accept_url), + 'DECLINEURL': urls.url_join(base_url, OgoneController._decline_url), + 'EXCEPTIONURL': urls.url_join(base_url, OgoneController._exception_url), + 'CANCELURL': urls.url_join(base_url, OgoneController._cancel_url), + } + + # render the button + res = self.ogone.render( + 'test_ref0', 0.01, self.currency_euro.id, + partner_id=None, + partner_values=self.buyer_values) + + # check form result + tree = objectify.fromstring(res) + self.assertEqual(tree.get('action'), 'https://secure.ogone.com/ncol/test/orderstandard.asp', 'ogone: wrong form POST url') + for form_input in tree.input: + if form_input.get('name') in ['submit']: + continue + self.assertEqual( + form_input.get('value'), + form_values[form_input.get('name')], + 'ogone: wrong value for input %s: received %s instead of %s' % (form_input.get('name'), form_input.get('value'), form_values[form_input.get('name')]) + ) + + # ---------------------------------------- + # Test2: button using tx + validation + # ---------------------------------------- + + # create a new draft tx + tx = self.env['payment.transaction'].create({ + 'amount': 0.01, + 'acquirer_id': self.ogone.id, + 'currency_id': self.currency_euro.id, + 'reference': 'test_ref0', + 'partner_id': self.buyer_id}) + # render the button + res = self.ogone.render( + 'should_be_erased', 0.01, self.currency_euro, + tx_id=tx.id, + partner_id=None, + partner_values=self.buyer_values) + + # check form result + tree = objectify.fromstring(res) + self.assertEqual(tree.get('action'), 'https://secure.ogone.com/ncol/test/orderstandard.asp', 'ogone: wrong form POST url') + for form_input in tree.input: + if form_input.get('name') in ['submit']: + continue + self.assertEqual( + form_input.get('value'), + form_values[form_input.get('name')], + 'ingenico: wrong value for form input %s: received %s instead of %s' % (form_input.get('name'), form_input.get('value'), form_values[form_input.get('name')]) + ) + + @mute_logger('odoo.addons.payment_ingenico.models.payment', 'ValidationError') + def test_20_ogone_form_management(self): + # be sure not to do stupid thing + self.assertEqual(self.ogone.state, 'test', 'test without test environment') + + # typical data posted by ogone after client has successfully paid + ogone_post_data = { + 'orderID': u'test_ref_2', + 'STATUS': u'9', + 'CARDNO': u'XXXXXXXXXXXX0002', + 'PAYID': u'25381582', + 'CN': u'Norbert Buyer', + 'NCERROR': u'0', + 'TRXDATE': u'11/15/13', + 'IP': u'85.201.233.72', + 'BRAND': u'VISA', + 'ACCEPTANCE': u'test123', + 'currency': u'EUR', + 'amount': u'1.95', + 'SHASIGN': u'7B7B0ED9CBC4A85543A9073374589033A62A05A5', + 'ED': u'0315', + 'PM': u'CreditCard' + } + + # should raise error about unknown tx + with self.assertRaises(ValidationError): + self.env['payment.transaction'].form_feedback(ogone_post_data) + + # create tx + tx = self.env['payment.transaction'].create({ + 'amount': 1.95, + 'acquirer_id': self.ogone.id, + 'currency_id': self.currency_euro.id, + 'reference': 'test_ref_2-1', + 'partner_name': 'Norbert Buyer', + 'partner_country_id': self.country_france.id}) + # validate it + tx.form_feedback(ogone_post_data) + # check state + self.assertEqual(tx.state, 'done', 'ogone: validation did not put tx into done state') + self.assertEqual(tx.ogone_payid, ogone_post_data.get('PAYID'), 'ogone: validation did not update tx payid') + + # reset tx + tx = self.env['payment.transaction'].create({ + 'amount': 1.95, + 'acquirer_id': self.ogone.id, + 'currency_id': self.currency_euro.id, + 'reference': 'test_ref_2-2', + 'partner_name': 'Norbert Buyer', + 'partner_country_id': self.country_france.id}) + + # now ogone post is ok: try to modify the SHASIGN + ogone_post_data['SHASIGN'] = 'a4c16bae286317b82edb49188d3399249a784691' + with self.assertRaises(ValidationError): + tx.form_feedback(ogone_post_data) + + # simulate an error + ogone_post_data['STATUS'] = 2 + ogone_post_data['SHASIGN'] = 'a4c16bae286317b82edb49188d3399249a784691' + tx.form_feedback(ogone_post_data) + # check state + self.assertEqual(tx.state, 'cancel', 'ogone: erroneous validation did not put tx into error state') + + def test_30_ogone_s2s(self): + test_ref = 'test_ref_%.15f' % time.time() + # be sure not to do stupid thing + self.assertEqual(self.ogone.state, 'test', 'test without test environment') + + # create a new draft tx + tx = self.env['payment.transaction'].create({ + 'amount': 0.01, + 'acquirer_id': self.ogone.id, + 'currency_id': self.currency_euro.id, + 'reference': test_ref, + 'partner_id': self.buyer_id, + 'type': 'server2server', + }) + + # create an alias + res = tx.ogone_s2s_create_alias({ + 'expiry_date_mm': '01', + 'expiry_date_yy': '2015', + 'holder_name': 'Norbert Poilu', + 'number': '4000000000000002', + 'brand': 'VISA'}) + + res = tx.ogone_s2s_execute({}) |
