diff --git a/addons/payment_adyen/i18n/payment_adyen.pot b/addons/payment_adyen/i18n/payment_adyen.pot index e05813567f9..accc3a6d590 100644 --- a/addons/payment_adyen/i18n/payment_adyen.pot +++ b/addons/payment_adyen/i18n/payment_adyen.pot @@ -139,13 +139,6 @@ msgstr "" msgid "Payment processing failed" msgstr "" -#. module: payment_adyen -#. odoo-python -#: code:addons/payment_adyen/utils.py:0 -#, python-format -msgid "Please complete your address details." -msgstr "" - #. module: payment_adyen #. odoo-python #: code:addons/payment_adyen/models/payment_transaction.py:0 diff --git a/addons/payment_adyen/tests/test_adyen.py b/addons/payment_adyen/tests/test_adyen.py index 93bf94bcb9c..2adf4ef15dd 100644 --- a/addons/payment_adyen/tests/test_adyen.py +++ b/addons/payment_adyen/tests/test_adyen.py @@ -10,6 +10,7 @@ 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_adyen import utils as adyen_utils from odoo.addons.payment_adyen.controllers.main import AdyenController from odoo.addons.payment_adyen.tests.common import AdyenCommon @@ -511,3 +512,14 @@ class AdyenTest(AdyenCommon, PaymentHttpCommon): payload = dict(self.webhook_notification_payload, additionalData={'hmacSignature': 'dummy'}) tx = self._create_transaction('direct') self.assertRaises(Forbidden, AdyenController._verify_notification_signature, payload, tx) + + @mute_logger('odoo.addons.payment_adyen.models.payment_transaction') + def test_no_information_missing_from_partner_address(self): + test_partner = self.env['res.partner'].create({ + 'name': 'Dummy Partner', + 'email': 'norbert.buyer@example.com', + 'phone': '0032 12 34 56 78', + }) + test_address = adyen_utils.format_partner_address(test_partner) + for key in ('city', 'country', 'stateOrProvince', 'street',): + self.assertTrue(test_address.get(key)) diff --git a/addons/payment_adyen/utils.py b/addons/payment_adyen/utils.py index 6527faf05dd..92dccb577c7 100644 --- a/addons/payment_adyen/utils.py +++ b/addons/payment_adyen/utils.py @@ -50,17 +50,16 @@ def format_partner_address(partner): :rtype: dict """ street_data = partner._get_street_split() - address = { - 'city': partner.city, + # Unlike what is stated in https://docs.adyen.com/risk-management/avs-checks/, not all fields + # are required at all time. Thus, we fall back to 'Unknown' when a field is not set to avoid + # blocking the payment (empty string are not accepted) or passing `False` (which may not pass + # the fraud check). + return { + 'city': partner.city or 'Unknown', 'country': partner.country_id.code or 'ZZ', # 'ZZ' if the country is not known. - 'stateOrProvince': partner.state_id.code or '', # The state is not always required. - 'postalCode': partner.zip, + 'stateOrProvince': partner.state_id.code or 'Unknown', # The state is not always required. + 'postalCode': partner.zip or '', # Fill in the address fields if the format is supported, or fallback to the raw address. - 'street': street_data.get('street_name', partner.street), - 'houseNumberOrName': street_data.get('street_number'), + 'street': street_data.get('street_name', partner.street) or 'Unknown', + 'houseNumberOrName': street_data.get('street_number') or '', } - for key, value in address.items(): - if key == 'stateOrProvince' and partner.country_id.code not in ['CA', 'US', 'GB']: - continue - if not value: - raise ValidationError(_("Please complete your address details."))