summaryrefslogtreecommitdiff
path: root/addons/payment_payulatam/tests
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/payment_payulatam/tests
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/payment_payulatam/tests')
-rw-r--r--addons/payment_payulatam/tests/__init__.py4
-rw-r--r--addons/payment_payulatam/tests/test_payulatam.py154
2 files changed, 158 insertions, 0 deletions
diff --git a/addons/payment_payulatam/tests/__init__.py b/addons/payment_payulatam/tests/__init__.py
new file mode 100644
index 00000000..09671a17
--- /dev/null
+++ b/addons/payment_payulatam/tests/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from . import test_payulatam
diff --git a/addons/payment_payulatam/tests/test_payulatam.py b/addons/payment_payulatam/tests/test_payulatam.py
new file mode 100644
index 00000000..710d7dab
--- /dev/null
+++ b/addons/payment_payulatam/tests/test_payulatam.py
@@ -0,0 +1,154 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+from lxml import objectify
+from werkzeug import urls
+
+from odoo.addons.payment.tests.common import PaymentAcquirerCommon
+from odoo.tests import tagged
+
+
+class PayUlatamCommon(PaymentAcquirerCommon):
+
+ @classmethod
+ def setUpClass(cls, chart_template_ref=None):
+ super().setUpClass(chart_template_ref=chart_template_ref)
+ cls.payulatam = cls.env.ref('payment.payment_acquirer_payulatam')
+ cls.payulatam.write({
+ 'payulatam_account_id': 'dummy',
+ 'payulatam_merchant_id': 'dummy',
+ 'payulatam_api_key': 'dummy',
+ 'state': 'test',
+ })
+
+
+@tagged('post_install', '-at_install', 'external', '-standard')
+class PayUlatamForm(PayUlatamCommon):
+
+ def test_10_payulatam_form_render(self):
+ base_url = self.env['ir.config_parameter'].get_param('web.base.url')
+ self.assertEqual(self.payulatam.state, 'test', 'test without test environment')
+ self.payulatam.write({
+ 'payulatam_merchant_id': 'dummy',
+ 'payulatam_account_id': 'dummy',
+ 'payulatam_api_key': 'dummy',
+ })
+
+ # ----------------------------------------
+ # Test: button direct rendering
+ # ----------------------------------------
+ self.env['payment.transaction'].create({
+ 'reference': 'test_ref0',
+ 'amount': 0.001,
+ 'currency_id': self.currency_euro.id,
+ 'acquirer_id': self.payulatam.id,
+ 'partner_id': self.buyer_id
+ })
+
+ # render the button
+ res = self.payulatam.render(
+ 'test_ref0', 0.01, self.currency_euro.id,
+ values=self.buyer_values)
+
+ form_values = {
+ 'merchantId': 'dummy',
+ 'accountId': 'dummy',
+ 'description': 'test_ref0',
+ 'referenceCode': 'test',
+ 'amount': '0.01',
+ 'currency': 'EUR',
+ 'tax': '0',
+ 'taxReturnBase': '0',
+ 'buyerEmail': 'norbert.buyer@example.com',
+ 'responseUrl': urls.url_join(base_url, '/payment/payulatam/response'),
+ 'extra1': None
+ }
+ # check form result
+ tree = objectify.fromstring(res)
+
+ data_set = tree.xpath("//input[@name='data_set']")
+ self.assertEqual(len(data_set), 1, 'payulatam: Found %d "data_set" input instead of 1' % len(data_set))
+ self.assertEqual(data_set[0].get('data-action-url'), 'https://sandbox.checkout.payulatam.com/ppp-web-gateway-payu/', 'payulatam: wrong form POST url')
+ for form_input in tree.input:
+ if form_input.get('name') in ['submit', 'data_set', 'signature', 'referenceCode']:
+ continue
+ self.assertEqual(
+ form_input.get('value'),
+ form_values[form_input.get('name')],
+ 'payulatam: wrong value for input %s: received %s instead of %s' % (form_input.get('name'), form_input.get('value'), form_values[form_input.get('name')])
+ )
+
+ def test_20_payulatam_form_management(self):
+ self.assertEqual(self.payulatam.state, 'test', 'test without test environment')
+
+ # typical data posted by payulatam after client has successfully paid
+ payulatam_post_data = {
+ 'installmentsNumber': '1',
+ 'lapPaymentMethod': 'VISA',
+ 'description': 'test_ref0',
+ 'currency': 'EUR',
+ 'extra2': '',
+ 'lng': 'es',
+ 'transactionState': '7',
+ 'polPaymentMethod': '211',
+ 'pseCycle': '',
+ 'pseBank': '',
+ 'referenceCode': 'test_ref_10',
+ 'reference_pol': '844164756',
+ 'signature': '88f11d693d3551419f86850948d731ba',
+ 'pseReference3': '',
+ 'buyerEmail': 'admin@yourcompany.example.com',
+ 'lapResponseCode': 'PENDING_TRANSACTION_CONFIRMATION',
+ 'pseReference2': '',
+ 'cus': '',
+ 'orderLanguage': 'es',
+ 'TX_VALUE': '0.01',
+ 'risk': '',
+ 'trazabilityCode': '',
+ 'extra3': '',
+ 'pseReference1': '',
+ 'polTransactionState': '14',
+ 'polResponseCode': '25',
+ 'merchant_name': 'Test PayU Test comercio',
+ 'merchant_url': 'http://pruebaslapv.xtrweb.com',
+ 'extra1': '/shop/payment/validate',
+ 'message': 'PENDING',
+ 'lapPaymentMethodType': 'CARD',
+ 'polPaymentMethodType': '7',
+ 'telephone': '7512354',
+ 'merchantId': 'dummy',
+ 'transactionId': 'b232989a-4aa8-42d1-bace-153236eee791',
+ 'authorizationCode': '',
+ 'lapTransactionState': 'PENDING',
+ 'TX_TAX': '.00',
+ 'merchant_address': 'Av 123 Calle 12'
+ }
+
+ # create tx
+ tx = self.env['payment.transaction'].create({
+ 'amount': 0.01,
+ 'acquirer_id': self.payulatam.id,
+ 'currency_id': self.currency_euro.id,
+ 'reference': 'test_ref_10',
+ 'partner_name': 'Norbert Buyer',
+ 'partner_country_id': self.country_france.id,
+ 'partner_id': self.buyer_id})
+
+ # validate transaction
+ tx.form_feedback(payulatam_post_data, 'payulatam')
+ # check
+ self.assertEqual(tx.state, 'pending', 'Payulatam: wrong state after receiving a valid pending notification')
+ self.assertEqual(tx.state_message, 'PENDING', 'Payulatam: wrong state message after receiving a valid pending notification')
+ self.assertEqual(tx.acquirer_reference, 'b232989a-4aa8-42d1-bace-153236eee791', 'PayU Latam: wrong txn_id after receiving a valid pending notification')
+
+ # update transaction
+ tx.write({
+ 'state': 'draft',
+ 'acquirer_reference': False})
+
+ # update notification from payulatam
+ payulatam_post_data['lapTransactionState'] = 'APPROVED'
+ # validate transaction
+ tx.form_feedback(payulatam_post_data, 'payulatam')
+ # check transaction
+ self.assertEqual(tx.state, 'done', 'payulatam: wrong state after receiving a valid pending notification')
+ self.assertEqual(tx.acquirer_reference, 'b232989a-4aa8-42d1-bace-153236eee791', 'payulatam: wrong txn_id after receiving a valid pending notification')