Odoo18-Base/addons/payment_authorize/tests/test_authorize.py
2025-01-06 10:57:38 +07:00

60 lines
2.5 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from unittest.mock import patch
from odoo.addons.payment import utils as payment_utils
from odoo.exceptions import UserError
from odoo.tests import tagged
from odoo.tools import mute_logger
from .common import AuthorizeCommon
@tagged('post_install', '-at_install')
class AuthorizeTest(AuthorizeCommon):
def test_compatible_providers(self):
# Note: in the test common, 'USD' is specified as the currency linked to the user account.
unsupported_currency = self._prepare_currency('CHF')
providers = self.env['payment.provider']._get_compatible_providers(
self.company.id, self.partner.id, self.amount, currency_id=unsupported_currency.id
)
self.assertNotIn(self.authorize, providers)
providers = self.env['payment.provider']._get_compatible_providers(
self.company.id, self.partner.id, self.amount, currency_id=self.currency_usd.id
)
self.assertIn(self.authorize, providers)
def test_processing_values(self):
"""Test custom 'access_token' processing_values for authorize provider."""
tx = self._create_transaction(flow='direct')
with mute_logger('odoo.addons.payment.models.payment_transaction'), \
patch(
'odoo.addons.payment.utils.generate_access_token',
new=self._generate_test_access_token
):
processing_values = tx._get_processing_values()
with patch(
'odoo.addons.payment.utils.generate_access_token', new=self._generate_test_access_token
):
self.assertTrue(payment_utils.check_access_token(
processing_values['access_token'], self.reference, self.partner.id,
))
def test_validation(self):
self.assertEqual(self.authorize.available_currency_ids[0], self.currency_usd)
self.assertEqual(self.authorize._get_validation_amount(), 0.01)
self.assertEqual(self.authorize._get_validation_currency(), self.currency_usd)
def test_voiding_confirmed_tx_cancels_it(self):
""" Test that voiding a transaction cancels it even if it's already confirmed. """
source_tx = self._create_transaction('direct', state='done')
source_tx._handle_notification_data('authorize', {
'response': {
'x_response_code': '1',
'x_type': 'void',
},
})
self.assertEqual(source_tx.state, 'cancel')