145 lines
7.7 KiB
Python
145 lines
7.7 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo.exceptions import UserError
|
|
from odoo.models import Command
|
|
from odoo.tests import tagged
|
|
|
|
from odoo.addons.payment.tests.common import PaymentCommon
|
|
|
|
|
|
@tagged('-at_install', 'post_install')
|
|
class TestPaymentMethod(PaymentCommon):
|
|
|
|
def test_unlinking_payment_method_from_provider_state_archives_tokens(self):
|
|
""" Test that the active tokens of a payment method created through a provider are archived
|
|
when the method is unlinked from the provider. """
|
|
token = self._create_token()
|
|
self.payment_method.provider_ids = [Command.unlink(self.payment_method.provider_ids[:1].id)]
|
|
self.assertFalse(token.active)
|
|
|
|
def test_payment_method_requires_provider_to_be_activated(self):
|
|
""" Test that activating a payment method that is not linked to an enabled provider is
|
|
forbidden. """
|
|
self.provider.state = 'disabled'
|
|
with self.assertRaises(UserError):
|
|
self.payment_methods.active = True
|
|
|
|
def test_payment_method_compatible_when_provider_is_enabled(self):
|
|
""" Test that a payment method is available when it is supported by an enabled provider. """
|
|
compatible_payment_methods = self.env['payment.method']._get_compatible_payment_methods(
|
|
self.provider.ids, self.partner.id
|
|
)
|
|
self.assertIn(self.payment_method, compatible_payment_methods)
|
|
|
|
def test_payment_method_not_compatible_when_provider_is_disabled(self):
|
|
""" Test that a payment method is not available when there is no enabled provider that
|
|
supports it. """
|
|
self.provider.state = 'disabled'
|
|
compatible_payment_methods = self.env['payment.method']._get_compatible_payment_methods(
|
|
self.provider.ids, self.partner.id
|
|
)
|
|
self.assertNotIn(self.payment_method, compatible_payment_methods)
|
|
|
|
def test_non_primary_payment_method_not_compatible(self):
|
|
""" Test that a "brand" (i.e., non-primary) payment method is never available. """
|
|
brand_payment_method = self.payment_method.copy()
|
|
brand_payment_method.primary_payment_method_id = self.payment_method_id # Make it a brand.
|
|
compatible_payment_methods = self.env['payment.method']._get_compatible_payment_methods(
|
|
self.provider.ids, self.partner.id
|
|
)
|
|
self.assertNotIn(brand_payment_method, compatible_payment_methods)
|
|
|
|
def test_payment_method_compatible_with_supported_countries(self):
|
|
""" Test that the payment method is compatible with its supported countries. """
|
|
belgium = self.env.ref('base.be')
|
|
self.payment_method.supported_country_ids = [Command.set([belgium.id])]
|
|
self.partner.country_id = belgium
|
|
compatible_payment_methods = self.env['payment.method']._get_compatible_payment_methods(
|
|
self.provider.ids, self.partner.id
|
|
)
|
|
self.assertIn(self.payment_method, compatible_payment_methods)
|
|
|
|
def test_payment_method_not_compatible_with_unsupported_countries(self):
|
|
""" Test that the payment method is not compatible with a country that is not supported. """
|
|
belgium = self.env.ref('base.be')
|
|
self.payment_method.supported_country_ids = [Command.set([belgium.id])]
|
|
france = self.env.ref('base.fr')
|
|
self.partner.country_id = france
|
|
compatible_payment_methods = self.env['payment.method']._get_compatible_payment_methods(
|
|
self.provider.ids, self.partner.id
|
|
)
|
|
self.assertNotIn(self.payment_method, compatible_payment_methods)
|
|
|
|
def test_payment_method_compatible_when_no_supported_countries_set(self):
|
|
""" Test that the payment method is always compatible when no supported countries are
|
|
set. """
|
|
self.payment_method.supported_country_ids = [Command.clear()]
|
|
belgium = self.env.ref('base.be')
|
|
self.partner.country_id = belgium
|
|
compatible_payment_methods = self.env['payment.method']._get_compatible_payment_methods(
|
|
self.provider.ids, self.partner.id
|
|
)
|
|
self.assertIn(self.payment_method, compatible_payment_methods)
|
|
|
|
def test_payment_method_compatible_with_supported_currencies(self):
|
|
""" Test that the payment method is compatible with its supported currencies. """
|
|
self.payment_method.supported_currency_ids = [Command.set([self.currency_euro.id])]
|
|
compatible_payment_methods = self.env['payment.method']._get_compatible_payment_methods(
|
|
self.provider.ids, self.partner.id, currency_id=self.currency_euro.id
|
|
)
|
|
self.assertIn(self.payment_method, compatible_payment_methods)
|
|
|
|
def test_payment_method_not_compatible_with_unsupported_currencies(self):
|
|
""" Test that the payment method is not compatible with a currency that is not
|
|
supported. """
|
|
self.payment_method.supported_currency_ids = [Command.set([self.currency_euro.id])]
|
|
compatible_payment_methods = self.env['payment.method']._get_compatible_payment_methods(
|
|
self.provider.ids, self.partner.id, currency_id=self.currency_usd.id
|
|
)
|
|
self.assertNotIn(self.payment_method, compatible_payment_methods)
|
|
|
|
def test_payment_method_compatible_when_no_supported_currencies_set(self):
|
|
""" Test that the payment method is always compatible when no supported currencies are
|
|
set. """
|
|
self.payment_method.supported_currency_ids = [Command.clear()]
|
|
compatible_payment_methods = self.env['payment.method']._get_compatible_payment_methods(
|
|
self.provider.ids, self.partner.id, currency_id=self.currency_euro.id
|
|
)
|
|
self.assertIn(self.payment_method, compatible_payment_methods)
|
|
|
|
def test_payment_method_compatible_when_tokenization_forced(self):
|
|
""" Test that the payment method is compatible when it supports tokenization while it is
|
|
forced by the calling module. """
|
|
self.payment_method.support_tokenization = True
|
|
compatible_payment_methods = self.env['payment.method']._get_compatible_payment_methods(
|
|
self.provider.ids, self.partner.id, force_tokenization=True
|
|
)
|
|
self.assertIn(self.payment_method, compatible_payment_methods)
|
|
|
|
def test_payment_method_not_compatible_when_tokenization_forced(self):
|
|
""" Test that the payment method is not compatible when it does not support tokenization
|
|
while it is forced by the calling module. """
|
|
self.payment_method.support_tokenization = False
|
|
compatible_payment_methods = self.env['payment.method']._get_compatible_payment_methods(
|
|
self.provider.ids, self.partner.id, force_tokenization=True
|
|
)
|
|
self.assertNotIn(self.payment_method, compatible_payment_methods)
|
|
|
|
def test_payment_method_compatible_with_express_checkout(self):
|
|
""" Test that the payment method is compatible when it supports express checkout while it is
|
|
an express checkout flow. """
|
|
self.payment_method.support_express_checkout = True
|
|
compatible_payment_methods = self.env['payment.method']._get_compatible_payment_methods(
|
|
self.provider.ids, self.partner.id, is_express_checkout=True
|
|
)
|
|
self.assertIn(self.payment_method, compatible_payment_methods)
|
|
|
|
def test_payment_method_not_compatible_with_express_checkout(self):
|
|
""" Test that the payment method is not compatible when it does not support express checkout
|
|
while it is an express checkout flow. """
|
|
self.payment_method.support_express_checkout = False
|
|
compatible_payment_methods = self.env['payment.method']._get_compatible_payment_methods(
|
|
self.provider.ids, self.partner.id, is_express_checkout=True
|
|
)
|
|
self.assertNotIn(self.payment_method, compatible_payment_methods)
|