From 1738e248939df501a26dba5e761b3da8e522cf18 Mon Sep 17 00:00:00 2001 From: Gourab Singha Date: Mon, 22 Jun 2026 23:02:19 +0530 Subject: [PATCH 1/3] test: add baseUrl validation tests to all service test files --- test/BalancePlatformTest.py | 10 ++++++ test/BinLookupTest.py | 30 ++++++++++++++++ test/CapitalTest.py | 12 +++++++ test/CheckoutTest.py | 27 ++++++++++++++ test/CheckoutUtilityTest.py | 28 +++++++++++++-- test/DataProtectionTest.py | 10 ++++++ test/DisputesTest.py | 10 ++++++ test/LegalEntityManagementTest.py | 10 ++++++ test/ManagementTest.py | 10 ++++++ test/PaymentTest.py | 60 +++++++++++++++++++++++++++++++ test/PosMobileTest.py | 30 ++++++++++++++++ test/SessionAuthenticationTest.py | 10 ++++++ test/StoredValueTest.py | 27 ++++++++++++++ test/TerminalTest.py | 10 ++++++ test/ThirdPartyPayoutTest.py | 27 ++++++++++++++ test/TransfersTest.py | 10 ++++++ 16 files changed, 318 insertions(+), 3 deletions(-) diff --git a/test/BalancePlatformTest.py b/test/BalancePlatformTest.py index fbb30d85..2fc92db8 100644 --- a/test/BalancePlatformTest.py +++ b/test/BalancePlatformTest.py @@ -481,3 +481,13 @@ def test_get_tax_form_summary(self): json=None, xapikey="YourXapikey", ) + + def test_base_url_test_environment(self): + url = self.adyen.client._determine_api_url("test", self.balance_platform_url) + self.assertEqual(url, self.balance_platform_url) + self.assertTrue(url.startswith("https://balanceplatform-api-test.adyen.com/")) + + def test_base_url_live_environment(self): + url = self.adyen.client._determine_api_url("live", self.balance_platform_url) + self.assertTrue(url.startswith("https://balanceplatform-api-live.adyen.com/")) + diff --git a/test/BinLookupTest.py b/test/BinLookupTest.py index d059633b..d908280f 100644 --- a/test/BinLookupTest.py +++ b/test/BinLookupTest.py @@ -78,6 +78,36 @@ def test_get_cost_estimate_error_mocked(self): self.assertEqual("Invalid card number", result.message["message"]) self.assertEqual("validation", result.message["errorType"]) + def test_base_url_test_environment(self): + binlookup_url = self.ady.binlookup.bin_lookup_api.baseUrl + url = self.ady.client._determine_api_url("test", binlookup_url) + self.assertEqual(url, binlookup_url) + self.assertTrue(url.startswith("https://pal-test.adyen.com/pal/servlet/BinLookup/")) + + def test_base_url_live_environment(self): + self.ady.client.live_endpoint_prefix = "1797a841fbb37ca7-AdyenDemo" + binlookup_url = self.ady.binlookup.bin_lookup_api.baseUrl + binlookup_version = binlookup_url.split("/")[-1] + url = self.ady.client._determine_api_url("live", binlookup_url) + self.assertEqual( + url, + f"https://1797a841fbb37ca7-AdyenDemo-pal-live.adyenpayments.com" + f"/pal/servlet/BinLookup/{binlookup_version}", + ) + self.ady.client.live_endpoint_prefix = None + + def test_base_url_live_environment_no_prefix_raises(self): + self.ady.client.live_endpoint_prefix = None + binlookup_url = self.ady.binlookup.bin_lookup_api.baseUrl + from Adyen.exceptions import AdyenEndpointInvalidFormat + self.assertRaises( + AdyenEndpointInvalidFormat, + self.ady.client._determine_api_url, + "live", + binlookup_url, + ) + + TestBinLookup.client.http_force = "requests" suite = unittest.TestLoader().loadTestsFromTestCase(TestBinLookup) diff --git a/test/CapitalTest.py b/test/CapitalTest.py index 5bc82fd5..d5127eff 100644 --- a/test/CapitalTest.py +++ b/test/CapitalTest.py @@ -136,3 +136,15 @@ def test_create_static_offer_from_dynamic_offer(self): ) self.assertEqual("GO00000000000000000000002", result.message["id"]) self.assertEqual("cashAdvance", result.message["contractType"]) + + def test_base_url_test_environment(self): + capital_url = self.adyen.capital.grants_api.baseUrl + url = self.adyen.client._determine_api_url("test", capital_url) + self.assertEqual(url, capital_url) + self.assertTrue(url.startswith("https://balanceplatform-api-test.adyen.com/capital/")) + + def test_base_url_live_environment(self): + capital_url = self.adyen.capital.grants_api.baseUrl + url = self.adyen.client._determine_api_url("live", capital_url) + self.assertTrue(url.startswith("https://balanceplatform-api-live.adyen.com/capital/")) + diff --git a/test/CheckoutTest.py b/test/CheckoutTest.py index a781aa6c..9a421851 100644 --- a/test/CheckoutTest.py +++ b/test/CheckoutTest.py @@ -542,3 +542,30 @@ def test_service_name_validation(self): self.assertTrue( payment_base_url.startswith("https://pal-test.adyen.com/pal/servlet/Payment/") ) + + def test_base_url_test_environment(self): + url = self.adyen.client._determine_api_url("test", self.baseUrl) + self.assertEqual(url, self.baseUrl) + self.assertTrue(url.startswith("https://checkout-test.adyen.com/")) + + def test_base_url_live_environment(self): + self.adyen.client.live_endpoint_prefix = "1797a841fbb37ca7-AdyenDemo" + checkout_version = self.baseUrl.split("/")[-1] + url = self.adyen.client._determine_api_url("live", self.baseUrl) + self.assertEqual( + url, + f"https://1797a841fbb37ca7-AdyenDemo-checkout-live.adyenpayments.com" + f"/checkout/{checkout_version}", + ) + self.adyen.client.live_endpoint_prefix = None + + def test_base_url_live_environment_no_prefix_raises(self): + self.adyen.client.live_endpoint_prefix = None + from Adyen.exceptions import AdyenEndpointInvalidFormat + self.assertRaises( + AdyenEndpointInvalidFormat, + self.adyen.client._determine_api_url, + "live", + self.baseUrl, + ) + diff --git a/test/CheckoutUtilityTest.py b/test/CheckoutUtilityTest.py index dd896732..67c23e05 100644 --- a/test/CheckoutUtilityTest.py +++ b/test/CheckoutUtilityTest.py @@ -52,10 +52,32 @@ def test_origin_keys_success_mocked(self): result.message["originKeys"]["https://www.your-domain2.com"], ) - def test_checkout_utility_api_url_custom(self): - url = self.ady.client._determine_api_url("test", self.checkout_url + "/originKeys") + def test_base_url_test_environment(self): + url = self.ady.client._determine_api_url("test", self.checkout_url) + self.assertEqual(url, self.checkout_url) + self.assertTrue(url.startswith("https://checkout-test.adyen.com/")) + + def test_base_url_live_environment(self): + self.ady.client.live_endpoint_prefix = "1797a841fbb37ca7-AdyenDemo" + checkout_version = self.checkout_url.split("/")[-1] + url = self.ady.client._determine_api_url("live", self.checkout_url) + self.assertEqual( + url, + f"https://1797a841fbb37ca7-AdyenDemo-checkout-live.adyenpayments.com" + f"/checkout/{checkout_version}", + ) + self.ady.client.live_endpoint_prefix = None + + def test_base_url_live_environment_no_prefix_raises(self): + self.ady.client.live_endpoint_prefix = None + from Adyen.exceptions import AdyenEndpointInvalidFormat + self.assertRaises( + AdyenEndpointInvalidFormat, + self.ady.client._determine_api_url, + "live", + self.checkout_url, + ) - self.assertEqual(url, f"{self.checkout_url}/originKeys") def test_applePay_session(self): request = { diff --git a/test/DataProtectionTest.py b/test/DataProtectionTest.py index 6301a03f..374518b6 100644 --- a/test/DataProtectionTest.py +++ b/test/DataProtectionTest.py @@ -41,3 +41,13 @@ def test_data_erasure(self): json=request, ) self.assertEqual("SUCCESS", result.message["result"]) + + def test_base_url_test_environment(self): + url = self.adyen.client._determine_api_url("test", self.data_protection_url) + self.assertEqual(url, self.data_protection_url) + self.assertTrue(url.startswith("https://ca-test.adyen.com/ca/services/DataProtectionService/")) + + def test_base_url_live_environment(self): + url = self.adyen.client._determine_api_url("live", self.data_protection_url) + self.assertTrue(url.startswith("https://ca-live.adyen.com/ca/services/DataProtectionService/")) + diff --git a/test/DisputesTest.py b/test/DisputesTest.py index 2fe3e2da..c3d8c41a 100644 --- a/test/DisputesTest.py +++ b/test/DisputesTest.py @@ -175,3 +175,13 @@ def test_supply_defense_document(self): json=request, xapikey="YourXapikey", ) + + def test_base_url_test_environment(self): + url = self.adyen.client._determine_api_url("test", self.disputes_url) + self.assertEqual(url, self.disputes_url) + self.assertTrue(url.startswith("https://ca-test.adyen.com/ca/services/DisputeService/")) + + def test_base_url_live_environment(self): + url = self.adyen.client._determine_api_url("live", self.disputes_url) + self.assertTrue(url.startswith("https://ca-live.adyen.com/ca/services/DisputeService/")) + diff --git a/test/LegalEntityManagementTest.py b/test/LegalEntityManagementTest.py index 9b06cf82..cb25da6f 100644 --- a/test/LegalEntityManagementTest.py +++ b/test/LegalEntityManagementTest.py @@ -112,3 +112,13 @@ def test_accept_terms_of_service(self): json=request, xapikey="YourXapikey", ) + + def test_base_url_test_environment(self): + url = self.adyen.client._determine_api_url("test", self.lem_url) + self.assertEqual(url, self.lem_url) + self.assertTrue(url.startswith("https://kyc-test.adyen.com/lem/")) + + def test_base_url_live_environment(self): + url = self.adyen.client._determine_api_url("live", self.lem_url) + self.assertTrue(url.startswith("https://kyc-live.adyen.com/lem/")) + diff --git a/test/ManagementTest.py b/test/ManagementTest.py index 13680788..8580cb23 100644 --- a/test/ManagementTest.py +++ b/test/ManagementTest.py @@ -183,3 +183,13 @@ def test_query_parameters(self): json=None, xapikey="YourXapikey", ) + + def test_base_url_test_environment(self): + url = self.adyen.client._determine_api_url("test", self.management_url) + self.assertEqual(url, self.management_url) + self.assertTrue(url.startswith("https://management-test.adyen.com/")) + + def test_base_url_live_environment(self): + url = self.adyen.client._determine_api_url("live", self.management_url) + self.assertTrue(url.startswith("https://management-live.adyen.com/")) + diff --git a/test/PaymentTest.py b/test/PaymentTest.py index 4989423c..3bb5446e 100644 --- a/test/PaymentTest.py +++ b/test/PaymentTest.py @@ -172,6 +172,36 @@ def test_error_401_mocked(self): request, ) + def test_base_url_test_environment(self): + payment_url = self.adyen.payment.payments_api.baseUrl + url = self.adyen.client._determine_api_url("test", payment_url) + self.assertEqual(url, payment_url) + self.assertTrue(url.startswith("https://pal-test.adyen.com/pal/servlet/Payment/")) + + def test_base_url_live_environment(self): + self.adyen.client.live_endpoint_prefix = "1797a841fbb37ca7-AdyenDemo" + payment_url = self.adyen.payment.payments_api.baseUrl + payment_version = payment_url.split("/")[-1] + url = self.adyen.client._determine_api_url("live", payment_url) + self.assertEqual( + url, + f"https://1797a841fbb37ca7-AdyenDemo-pal-live.adyenpayments.com" + f"/pal/servlet/Payment/{payment_version}", + ) + self.adyen.client.live_endpoint_prefix = None + + def test_base_url_live_environment_no_prefix_raises(self): + self.adyen.client.live_endpoint_prefix = None + payment_url = self.adyen.payment.payments_api.baseUrl + from Adyen.exceptions import AdyenEndpointInvalidFormat + self.assertRaises( + AdyenEndpointInvalidFormat, + self.adyen.client._determine_api_url, + "live", + payment_url, + ) + + class TestPaymentsWithXapiKey(unittest.TestCase): adyen = Adyen.Adyen() @@ -336,3 +366,33 @@ def test_error_401_mocked(self): self.adyen.payment.payments_api.authorise, request, ) + + def test_base_url_test_environment(self): + payment_url = self.adyen.payment.payments_api.baseUrl + url = self.adyen.client._determine_api_url("test", payment_url) + self.assertEqual(url, payment_url) + self.assertTrue(url.startswith("https://pal-test.adyen.com/pal/servlet/Payment/")) + + def test_base_url_live_environment(self): + self.adyen.client.live_endpoint_prefix = "1797a841fbb37ca7-AdyenDemo" + payment_url = self.adyen.payment.payments_api.baseUrl + payment_version = payment_url.split("/")[-1] + url = self.adyen.client._determine_api_url("live", payment_url) + self.assertEqual( + url, + f"https://1797a841fbb37ca7-AdyenDemo-pal-live.adyenpayments.com" + f"/pal/servlet/Payment/{payment_version}", + ) + self.adyen.client.live_endpoint_prefix = None + + def test_base_url_live_environment_no_prefix_raises(self): + self.adyen.client.live_endpoint_prefix = None + payment_url = self.adyen.payment.payments_api.baseUrl + from Adyen.exceptions import AdyenEndpointInvalidFormat + self.assertRaises( + AdyenEndpointInvalidFormat, + self.adyen.client._determine_api_url, + "live", + payment_url, + ) + diff --git a/test/PosMobileTest.py b/test/PosMobileTest.py index ab353767..85dd11d9 100644 --- a/test/PosMobileTest.py +++ b/test/PosMobileTest.py @@ -26,3 +26,33 @@ def test_create_communication_session(self): result = self.adyen.posMobile.pos_mobile_api.create_communication_session(request) self.assertEqual("CS00000000000000000000001", result.message["id"]) self.assertEqual("session_data_example", result.message["sessionData"]) + + def test_base_url_test_environment(self): + pos_mobile_url = self.adyen.posMobile.pos_mobile_api.baseUrl + url = self.adyen.client._determine_api_url("test", pos_mobile_url) + self.assertEqual(url, pos_mobile_url) + self.assertTrue(url.startswith("https://checkout-test.adyen.com/checkout/possdk/")) + + def test_base_url_live_environment(self): + self.adyen.client.live_endpoint_prefix = "1797a841fbb37ca7-AdyenDemo" + pos_mobile_url = self.adyen.posMobile.pos_mobile_api.baseUrl + pos_mobile_version = pos_mobile_url.split("/")[-1] + url = self.adyen.client._determine_api_url("live", pos_mobile_url) + self.assertEqual( + url, + f"https://1797a841fbb37ca7-AdyenDemo-checkout-live.adyenpayments.com" + f"/checkout/possdk/{pos_mobile_version}", + ) + self.adyen.client.live_endpoint_prefix = None + + def test_base_url_live_environment_no_prefix_raises(self): + self.adyen.client.live_endpoint_prefix = None + pos_mobile_url = self.adyen.posMobile.pos_mobile_api.baseUrl + from Adyen.exceptions import AdyenEndpointInvalidFormat + self.assertRaises( + AdyenEndpointInvalidFormat, + self.adyen.client._determine_api_url, + "live", + pos_mobile_url, + ) + diff --git a/test/SessionAuthenticationTest.py b/test/SessionAuthenticationTest.py index 55a83657..af2ceca2 100644 --- a/test/SessionAuthenticationTest.py +++ b/test/SessionAuthenticationTest.py @@ -51,3 +51,13 @@ def test_create_session_token(self): json=request, xapikey="YourXapikey", ) + + def test_base_url_test_environment(self): + url = self.adyen.client._determine_api_url("test", self.session_url) + self.assertEqual(url, self.session_url) + self.assertTrue(url.startswith("https://test.adyen.com/authe/api/")) + + def test_base_url_live_environment(self): + url = self.adyen.client._determine_api_url("live", self.session_url) + self.assertTrue(url.startswith("https://authe-live.adyen.com/authe/api/")) + diff --git a/test/StoredValueTest.py b/test/StoredValueTest.py index 1ce66a1f..d641eb07 100644 --- a/test/StoredValueTest.py +++ b/test/StoredValueTest.py @@ -183,3 +183,30 @@ def test_void_transaction(self): json=request, xapikey="YourXapikey", ) + + def test_base_url_test_environment(self): + url = self.adyen.client._determine_api_url("test", self.stored_value_url) + self.assertEqual(url, self.stored_value_url) + self.assertTrue(url.startswith("https://pal-test.adyen.com/pal/servlet/StoredValue/")) + + def test_base_url_live_environment(self): + self.adyen.client.live_endpoint_prefix = "1797a841fbb37ca7-AdyenDemo" + stored_value_version = self.stored_value_url.split("/")[-1] + url = self.adyen.client._determine_api_url("live", self.stored_value_url) + self.assertEqual( + url, + f"https://1797a841fbb37ca7-AdyenDemo-pal-live.adyenpayments.com" + f"/pal/servlet/StoredValue/{stored_value_version}", + ) + self.adyen.client.live_endpoint_prefix = None + + def test_base_url_live_environment_no_prefix_raises(self): + self.adyen.client.live_endpoint_prefix = None + from Adyen.exceptions import AdyenEndpointInvalidFormat + self.assertRaises( + AdyenEndpointInvalidFormat, + self.adyen.client._determine_api_url, + "live", + self.stored_value_url, + ) + diff --git a/test/TerminalTest.py b/test/TerminalTest.py index 1b2f2691..cf99fa32 100644 --- a/test/TerminalTest.py +++ b/test/TerminalTest.py @@ -248,6 +248,16 @@ def test_get_terminals_under_account_store(self): xapikey="YourXapikey", ) + def test_base_url_test_environment(self): + url = self.adyen.client._determine_api_url("test", self.terminal_url) + self.assertEqual(url, self.terminal_url) + self.assertTrue(url.startswith("https://postfmapi-test.adyen.com/")) + + def test_base_url_live_environment(self): + url = self.adyen.client._determine_api_url("live", self.terminal_url) + self.assertTrue(url.startswith("https://postfmapi-live.adyen.com/")) + + TestTerminal.client.http_force = "requests" suite = unittest.TestLoader().loadTestsFromTestCase(TestTerminal) diff --git a/test/ThirdPartyPayoutTest.py b/test/ThirdPartyPayoutTest.py index a080aa70..90125df3 100644 --- a/test/ThirdPartyPayoutTest.py +++ b/test/ThirdPartyPayoutTest.py @@ -308,6 +308,33 @@ def test_store_detail_and_submit_bank_success(self): expected = "[payout-submit-received]" self.assertEqual(expected, result.message["resultCode"]) + def test_base_url_test_environment(self): + url = self.adyen.client._determine_api_url("test", self.payout_url) + self.assertEqual(url, self.payout_url) + self.assertTrue(url.startswith("https://pal-test.adyen.com/pal/servlet/Payout/")) + + def test_base_url_live_environment(self): + self.adyen.client.live_endpoint_prefix = "1797a841fbb37ca7-AdyenDemo" + payout_version = self.payout_url.split("/")[-1] + url = self.adyen.client._determine_api_url("live", self.payout_url) + self.assertEqual( + url, + f"https://1797a841fbb37ca7-AdyenDemo-pal-live.adyenpayments.com" + f"/pal/servlet/Payout/{payout_version}", + ) + self.adyen.client.live_endpoint_prefix = None + + def test_base_url_live_environment_no_prefix_raises(self): + self.adyen.client.live_endpoint_prefix = None + from Adyen.exceptions import AdyenEndpointInvalidFormat + self.assertRaises( + AdyenEndpointInvalidFormat, + self.adyen.client._determine_api_url, + "live", + self.payout_url, + ) + + TestThirdPartyPayout.client.http_force = "requests" suite = unittest.TestLoader().loadTestsFromTestCase(TestThirdPartyPayout) diff --git a/test/TransfersTest.py b/test/TransfersTest.py index 28cd1c30..53cabba2 100644 --- a/test/TransfersTest.py +++ b/test/TransfersTest.py @@ -103,3 +103,13 @@ def test_get_transaction(self): json=None, xapikey="YourXapikey", ) + + def test_base_url_test_environment(self): + url = self.adyen.client._determine_api_url("test", self.transfers_url) + self.assertEqual(url, self.transfers_url) + self.assertTrue(url.startswith("https://balanceplatform-api-test.adyen.com/btl/")) + + def test_base_url_live_environment(self): + url = self.adyen.client._determine_api_url("live", self.transfers_url) + self.assertTrue(url.startswith("https://balanceplatform-api-live.adyen.com/btl/")) + From 411dedcfd4a60cda6417eaed5de173375cb97358 Mon Sep 17 00:00:00 2001 From: Gourab Singha Date: Mon, 22 Jun 2026 23:27:38 +0530 Subject: [PATCH 2/3] test: guarantee live_endpoint_prefix cleanup in baseUrl tests to prevent state leakage --- test/BinLookupTest.py | 20 ++++++++++-------- test/CheckoutTest.py | 18 +++++++++------- test/CheckoutUtilityTest.py | 18 +++++++++------- test/DetermineEndpointTest.py | 4 ++++ test/PaymentTest.py | 40 +++++++++++++++++++---------------- test/PosMobileTest.py | 20 ++++++++++-------- test/RecurringTest.py | 18 +++++++++------- test/StoredValueTest.py | 18 +++++++++------- test/ThirdPartyPayoutTest.py | 18 +++++++++------- 9 files changed, 98 insertions(+), 76 deletions(-) diff --git a/test/BinLookupTest.py b/test/BinLookupTest.py index d908280f..1f73fbee 100644 --- a/test/BinLookupTest.py +++ b/test/BinLookupTest.py @@ -86,15 +86,17 @@ def test_base_url_test_environment(self): def test_base_url_live_environment(self): self.ady.client.live_endpoint_prefix = "1797a841fbb37ca7-AdyenDemo" - binlookup_url = self.ady.binlookup.bin_lookup_api.baseUrl - binlookup_version = binlookup_url.split("/")[-1] - url = self.ady.client._determine_api_url("live", binlookup_url) - self.assertEqual( - url, - f"https://1797a841fbb37ca7-AdyenDemo-pal-live.adyenpayments.com" - f"/pal/servlet/BinLookup/{binlookup_version}", - ) - self.ady.client.live_endpoint_prefix = None + try: + binlookup_url = self.ady.binlookup.bin_lookup_api.baseUrl + binlookup_version = binlookup_url.split("/")[-1] + url = self.ady.client._determine_api_url("live", binlookup_url) + self.assertEqual( + url, + f"https://1797a841fbb37ca7-AdyenDemo-pal-live.adyenpayments.com" + f"/pal/servlet/BinLookup/{binlookup_version}", + ) + finally: + self.ady.client.live_endpoint_prefix = None def test_base_url_live_environment_no_prefix_raises(self): self.ady.client.live_endpoint_prefix = None diff --git a/test/CheckoutTest.py b/test/CheckoutTest.py index 9a421851..8142cfc3 100644 --- a/test/CheckoutTest.py +++ b/test/CheckoutTest.py @@ -550,14 +550,16 @@ def test_base_url_test_environment(self): def test_base_url_live_environment(self): self.adyen.client.live_endpoint_prefix = "1797a841fbb37ca7-AdyenDemo" - checkout_version = self.baseUrl.split("/")[-1] - url = self.adyen.client._determine_api_url("live", self.baseUrl) - self.assertEqual( - url, - f"https://1797a841fbb37ca7-AdyenDemo-checkout-live.adyenpayments.com" - f"/checkout/{checkout_version}", - ) - self.adyen.client.live_endpoint_prefix = None + try: + checkout_version = self.baseUrl.split("/")[-1] + url = self.adyen.client._determine_api_url("live", self.baseUrl) + self.assertEqual( + url, + f"https://1797a841fbb37ca7-AdyenDemo-checkout-live.adyenpayments.com" + f"/checkout/{checkout_version}", + ) + finally: + self.adyen.client.live_endpoint_prefix = None def test_base_url_live_environment_no_prefix_raises(self): self.adyen.client.live_endpoint_prefix = None diff --git a/test/CheckoutUtilityTest.py b/test/CheckoutUtilityTest.py index 67c23e05..8c7c662a 100644 --- a/test/CheckoutUtilityTest.py +++ b/test/CheckoutUtilityTest.py @@ -59,14 +59,16 @@ def test_base_url_test_environment(self): def test_base_url_live_environment(self): self.ady.client.live_endpoint_prefix = "1797a841fbb37ca7-AdyenDemo" - checkout_version = self.checkout_url.split("/")[-1] - url = self.ady.client._determine_api_url("live", self.checkout_url) - self.assertEqual( - url, - f"https://1797a841fbb37ca7-AdyenDemo-checkout-live.adyenpayments.com" - f"/checkout/{checkout_version}", - ) - self.ady.client.live_endpoint_prefix = None + try: + checkout_version = self.checkout_url.split("/")[-1] + url = self.ady.client._determine_api_url("live", self.checkout_url) + self.assertEqual( + url, + f"https://1797a841fbb37ca7-AdyenDemo-checkout-live.adyenpayments.com" + f"/checkout/{checkout_version}", + ) + finally: + self.ady.client.live_endpoint_prefix = None def test_base_url_live_environment_no_prefix_raises(self): self.ady.client.live_endpoint_prefix = None diff --git a/test/DetermineEndpointTest.py b/test/DetermineEndpointTest.py index 747334b3..b53503e8 100644 --- a/test/DetermineEndpointTest.py +++ b/test/DetermineEndpointTest.py @@ -31,6 +31,10 @@ class TestDetermineUrl(unittest.TestCase): capital_url = adyen.capital.grants_api.baseUrl capital_version = capital_url.split("/")[-1] + def tearDown(self): + self.client.live_endpoint_prefix = None + self.client.platform = "test" + def test_checkout_api_url_custom(self): self.client.live_endpoint_prefix = "1797a841fbb37ca7-AdyenDemo" url = self.adyen.client._determine_api_url("live", self.checkout_url + "/payments") diff --git a/test/PaymentTest.py b/test/PaymentTest.py index 3bb5446e..9cb4174b 100644 --- a/test/PaymentTest.py +++ b/test/PaymentTest.py @@ -180,15 +180,17 @@ def test_base_url_test_environment(self): def test_base_url_live_environment(self): self.adyen.client.live_endpoint_prefix = "1797a841fbb37ca7-AdyenDemo" - payment_url = self.adyen.payment.payments_api.baseUrl - payment_version = payment_url.split("/")[-1] - url = self.adyen.client._determine_api_url("live", payment_url) - self.assertEqual( - url, - f"https://1797a841fbb37ca7-AdyenDemo-pal-live.adyenpayments.com" - f"/pal/servlet/Payment/{payment_version}", - ) - self.adyen.client.live_endpoint_prefix = None + try: + payment_url = self.adyen.payment.payments_api.baseUrl + payment_version = payment_url.split("/")[-1] + url = self.adyen.client._determine_api_url("live", payment_url) + self.assertEqual( + url, + f"https://1797a841fbb37ca7-AdyenDemo-pal-live.adyenpayments.com" + f"/pal/servlet/Payment/{payment_version}", + ) + finally: + self.adyen.client.live_endpoint_prefix = None def test_base_url_live_environment_no_prefix_raises(self): self.adyen.client.live_endpoint_prefix = None @@ -375,15 +377,17 @@ def test_base_url_test_environment(self): def test_base_url_live_environment(self): self.adyen.client.live_endpoint_prefix = "1797a841fbb37ca7-AdyenDemo" - payment_url = self.adyen.payment.payments_api.baseUrl - payment_version = payment_url.split("/")[-1] - url = self.adyen.client._determine_api_url("live", payment_url) - self.assertEqual( - url, - f"https://1797a841fbb37ca7-AdyenDemo-pal-live.adyenpayments.com" - f"/pal/servlet/Payment/{payment_version}", - ) - self.adyen.client.live_endpoint_prefix = None + try: + payment_url = self.adyen.payment.payments_api.baseUrl + payment_version = payment_url.split("/")[-1] + url = self.adyen.client._determine_api_url("live", payment_url) + self.assertEqual( + url, + f"https://1797a841fbb37ca7-AdyenDemo-pal-live.adyenpayments.com" + f"/pal/servlet/Payment/{payment_version}", + ) + finally: + self.adyen.client.live_endpoint_prefix = None def test_base_url_live_environment_no_prefix_raises(self): self.adyen.client.live_endpoint_prefix = None diff --git a/test/PosMobileTest.py b/test/PosMobileTest.py index 85dd11d9..0e04d03a 100644 --- a/test/PosMobileTest.py +++ b/test/PosMobileTest.py @@ -35,15 +35,17 @@ def test_base_url_test_environment(self): def test_base_url_live_environment(self): self.adyen.client.live_endpoint_prefix = "1797a841fbb37ca7-AdyenDemo" - pos_mobile_url = self.adyen.posMobile.pos_mobile_api.baseUrl - pos_mobile_version = pos_mobile_url.split("/")[-1] - url = self.adyen.client._determine_api_url("live", pos_mobile_url) - self.assertEqual( - url, - f"https://1797a841fbb37ca7-AdyenDemo-checkout-live.adyenpayments.com" - f"/checkout/possdk/{pos_mobile_version}", - ) - self.adyen.client.live_endpoint_prefix = None + try: + pos_mobile_url = self.adyen.posMobile.pos_mobile_api.baseUrl + pos_mobile_version = pos_mobile_url.split("/")[-1] + url = self.adyen.client._determine_api_url("live", pos_mobile_url) + self.assertEqual( + url, + f"https://1797a841fbb37ca7-AdyenDemo-checkout-live.adyenpayments.com" + f"/checkout/possdk/{pos_mobile_version}", + ) + finally: + self.adyen.client.live_endpoint_prefix = None def test_base_url_live_environment_no_prefix_raises(self): self.adyen.client.live_endpoint_prefix = None diff --git a/test/RecurringTest.py b/test/RecurringTest.py index 80daf671..811f8256 100644 --- a/test/RecurringTest.py +++ b/test/RecurringTest.py @@ -26,14 +26,16 @@ def test_base_url_test_environment(self): def test_base_url_live_environment(self): self.adyen.client.live_endpoint_prefix = "1797a841fbb37ca7-AdyenDemo" - recurring_version = self.baseUrl.split("/")[-1] - url = self.adyen.client._determine_api_url("live", self.baseUrl) - self.assertEqual( - url, - f"https://1797a841fbb37ca7-AdyenDemo-pal-live.adyenpayments.com" - f"/pal/servlet/Recurring/{recurring_version}", - ) - self.adyen.client.live_endpoint_prefix = None + try: + recurring_version = self.baseUrl.split("/")[-1] + url = self.adyen.client._determine_api_url("live", self.baseUrl) + self.assertEqual( + url, + f"https://1797a841fbb37ca7-AdyenDemo-pal-live.adyenpayments.com" + f"/pal/servlet/Recurring/{recurring_version}", + ) + finally: + self.adyen.client.live_endpoint_prefix = None def test_base_url_live_environment_no_prefix_raises(self): self.adyen.client.live_endpoint_prefix = None diff --git a/test/StoredValueTest.py b/test/StoredValueTest.py index d641eb07..2bc73432 100644 --- a/test/StoredValueTest.py +++ b/test/StoredValueTest.py @@ -191,14 +191,16 @@ def test_base_url_test_environment(self): def test_base_url_live_environment(self): self.adyen.client.live_endpoint_prefix = "1797a841fbb37ca7-AdyenDemo" - stored_value_version = self.stored_value_url.split("/")[-1] - url = self.adyen.client._determine_api_url("live", self.stored_value_url) - self.assertEqual( - url, - f"https://1797a841fbb37ca7-AdyenDemo-pal-live.adyenpayments.com" - f"/pal/servlet/StoredValue/{stored_value_version}", - ) - self.adyen.client.live_endpoint_prefix = None + try: + stored_value_version = self.stored_value_url.split("/")[-1] + url = self.adyen.client._determine_api_url("live", self.stored_value_url) + self.assertEqual( + url, + f"https://1797a841fbb37ca7-AdyenDemo-pal-live.adyenpayments.com" + f"/pal/servlet/StoredValue/{stored_value_version}", + ) + finally: + self.adyen.client.live_endpoint_prefix = None def test_base_url_live_environment_no_prefix_raises(self): self.adyen.client.live_endpoint_prefix = None diff --git a/test/ThirdPartyPayoutTest.py b/test/ThirdPartyPayoutTest.py index 90125df3..fd127726 100644 --- a/test/ThirdPartyPayoutTest.py +++ b/test/ThirdPartyPayoutTest.py @@ -315,14 +315,16 @@ def test_base_url_test_environment(self): def test_base_url_live_environment(self): self.adyen.client.live_endpoint_prefix = "1797a841fbb37ca7-AdyenDemo" - payout_version = self.payout_url.split("/")[-1] - url = self.adyen.client._determine_api_url("live", self.payout_url) - self.assertEqual( - url, - f"https://1797a841fbb37ca7-AdyenDemo-pal-live.adyenpayments.com" - f"/pal/servlet/Payout/{payout_version}", - ) - self.adyen.client.live_endpoint_prefix = None + try: + payout_version = self.payout_url.split("/")[-1] + url = self.adyen.client._determine_api_url("live", self.payout_url) + self.assertEqual( + url, + f"https://1797a841fbb37ca7-AdyenDemo-pal-live.adyenpayments.com" + f"/pal/servlet/Payout/{payout_version}", + ) + finally: + self.adyen.client.live_endpoint_prefix = None def test_base_url_live_environment_no_prefix_raises(self): self.adyen.client.live_endpoint_prefix = None From 201fef90fb8dff00a0cff8b6f300da6c266c25c6 Mon Sep 17 00:00:00 2001 From: Gourab Singha Date: Sat, 27 Jun 2026 12:02:22 +0530 Subject: [PATCH 3/3] Fix api_version override for PAL-based service URLs --- Adyen/client.py | 8 ++++++-- test/UtilTest.py | 22 ++++++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/Adyen/client.py b/Adyen/client.py index c9a38227..d68a4625 100644 --- a/Adyen/client.py +++ b/Adyen/client.py @@ -322,8 +322,12 @@ def _set_url_version(self, service, endpoint): "capital": self.api_capital_version, } - new_version = f"v{version_lookup[service]}" - endpoint = re.sub(r"\.com/v\d{1,2}", f".com/{new_version}", endpoint) + override_version = version_lookup.get(service) + if override_version is None: + return endpoint + + new_version = f"v{override_version}" + endpoint = re.sub(r"/v\d{1,2}(/|$)", f"/{new_version}\\1", endpoint) return endpoint def call_adyen_api( diff --git a/test/UtilTest.py b/test/UtilTest.py index 48892226..530cdd5b 100644 --- a/test/UtilTest.py +++ b/test/UtilTest.py @@ -98,6 +98,28 @@ def test_custom_version(self): xapikey="YourXapikey", ) + def test_custom_version_pal(self): + self.client.api_payment_version = 50 + request = {"merchantAccount": "YourMerchantAccount"} + self.test = BaseTest(self.adyen) + self.client.platform = "test" + self.adyen.client = self.test.create_client_from_file( + 200, request, "test/mocks/authorise-success.json" + ) + result = self.adyen.payment.payments_api.authorise(request, xapikey="YourXapikey") + self.assertIsNotNone(result) + self.adyen.client.http_client.request.assert_called_once_with( + "POST", + f"https://pal-test.adyen.com/pal/servlet/Payment/v{self.client.api_payment_version}/authorise", + headers={ + "adyen-library-name": settings.LIB_NAME, + "adyen-library-version": settings.LIB_VERSION, + "User-Agent": settings.LIB_NAME + "/" + settings.LIB_VERSION, + }, + json=request, + xapikey="YourXapikey", + ) + def test_is_valid_hmac_notification_removes_additional_data(self): notification = { "live": "false",