84 lines
3.6 KiB
Python
84 lines
3.6 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from werkzeug.exceptions import Forbidden
|
|
|
|
from odoo.tests import tagged
|
|
from odoo.tools import mute_logger
|
|
|
|
from odoo.addons.payment import utils as payment_utils
|
|
from odoo.addons.payment.tests.http_common import PaymentHttpCommon
|
|
from odoo.addons.payment_payumoney.controllers.main import PayUMoneyController
|
|
from odoo.addons.payment_payumoney.tests.common import PayumoneyCommon
|
|
|
|
|
|
@tagged('post_install', '-at_install')
|
|
class PayUMoneyTest(PayumoneyCommon, PaymentHttpCommon):
|
|
|
|
def test_compatible_providers(self):
|
|
providers = self.env['payment.provider']._get_compatible_providers(
|
|
self.company.id, self.partner.id, self.amount, currency_id=self.currency.id
|
|
)
|
|
self.assertIn(self.payumoney, providers)
|
|
|
|
providers = self.env['payment.provider']._get_compatible_providers(
|
|
self.company.id, self.partner.id, self.amount, currency_id=self.currency_euro.id
|
|
)
|
|
self.assertNotIn(self.payumoney, providers)
|
|
|
|
def test_redirect_form_values(self):
|
|
tx = self._create_transaction(flow='redirect')
|
|
with mute_logger('odoo.addons.payment.models.payment_transaction'):
|
|
processing_values = tx._get_processing_values()
|
|
|
|
form_info = self._extract_values_from_html_form(processing_values['redirect_form_html'])
|
|
first_name, last_name = payment_utils.split_partner_name(self.partner.name)
|
|
return_url = self._build_url(PayUMoneyController._return_url)
|
|
expected_values = {
|
|
'key': self.payumoney.payumoney_merchant_key,
|
|
'txnid': self.reference,
|
|
'amount': str(self.amount),
|
|
'productinfo': self.reference,
|
|
'firstname': first_name,
|
|
'lastname': last_name,
|
|
'email': self.partner.email,
|
|
'phone': self.partner.phone,
|
|
'surl': return_url,
|
|
'furl': return_url,
|
|
'service_provider': 'payu_paisa',
|
|
}
|
|
expected_values['hash'] = self.payumoney._payumoney_generate_sign(
|
|
expected_values, incoming=False,
|
|
)
|
|
self.assertEqual(form_info['action'],
|
|
'https://sandboxsecure.payu.in/_payment')
|
|
self.assertDictEqual(form_info['inputs'], expected_values,
|
|
"PayUMoney: invalid inputs specified in the redirect form.")
|
|
|
|
def test_accept_notification_with_valid_signature(self):
|
|
""" Test the verification of a notification with a valid signature. """
|
|
tx = self._create_transaction('redirect')
|
|
self._assert_does_not_raise(
|
|
Forbidden,
|
|
PayUMoneyController._verify_notification_signature,
|
|
self.notification_data,
|
|
tx,
|
|
)
|
|
|
|
@mute_logger('odoo.addons.payment_payumoney.controllers.main')
|
|
def test_reject_notification_with_missing_signature(self):
|
|
""" Test the verification of a notification with a missing signature. """
|
|
tx = self._create_transaction('redirect')
|
|
payload = dict(self.notification_data, hash=None)
|
|
self.assertRaises(
|
|
Forbidden, PayUMoneyController._verify_notification_signature, payload, tx
|
|
)
|
|
|
|
@mute_logger('odoo.addons.payment_payumoney.controllers.main')
|
|
def test_reject_notification_with_invalid_signature(self):
|
|
""" Test the verification of a notification with an invalid signature. """
|
|
tx = self._create_transaction('redirect')
|
|
payload = dict(self.notification_data, hash='dummy')
|
|
self.assertRaises(
|
|
Forbidden, PayUMoneyController._verify_notification_signature, payload, tx
|
|
)
|