From edbb67806d77b89df2e1e5b9011fb28e48bf3dd8 Mon Sep 17 00:00:00 2001 From: Gourab Singha Date: Mon, 22 Jun 2026 23:14:41 +0530 Subject: [PATCH 1/3] fix: correctly apply version overrides to PAL-based service URLs --- Adyen/client.py | 3 ++- test/DetermineEndpointTest.py | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/Adyen/client.py b/Adyen/client.py index c9a38227..a51a4eea 100644 --- a/Adyen/client.py +++ b/Adyen/client.py @@ -323,9 +323,10 @@ def _set_url_version(self, service, endpoint): } new_version = f"v{version_lookup[service]}" - endpoint = re.sub(r"\.com/v\d{1,2}", f".com/{new_version}", endpoint) + endpoint = re.sub(r"/v\d+(\b|$)", f"/{new_version}", endpoint) return endpoint + def call_adyen_api( self, request_data, service, method, endpoint, idempotency_key=None, **kwargs ): diff --git a/test/DetermineEndpointTest.py b/test/DetermineEndpointTest.py index 747334b3..163b59c9 100644 --- a/test/DetermineEndpointTest.py +++ b/test/DetermineEndpointTest.py @@ -186,3 +186,26 @@ def test_recurring_api_url_live_no_prefix_raises(self): "live", self.recurring_url + "RECURRING_DETAILS", ) + + def test_set_url_version(self): + self.client.api_payment_version = 99 + self.client.api_checkout_version = 88 + self.client.api_recurring_version = 77 + self.client.api_bin_lookup_version = 66 + + payments_url = self.client._set_url_version("payments", self.payment_url) + checkout_url = self.client._set_url_version("checkout", self.checkout_url) + recurring_url = self.client._set_url_version("recurring", self.recurring_url) + binlookup_url = self.client._set_url_version("binlookup", self.binlookup_url) + + self.assertTrue(payments_url.endswith("/v99")) + self.assertTrue(checkout_url.endswith("/v88")) + self.assertTrue(recurring_url.endswith("/v77")) + self.assertTrue(binlookup_url.endswith("/v66")) + + # Cleanup + self.client.api_payment_version = None + self.client.api_checkout_version = None + self.client.api_recurring_version = None + self.client.api_bin_lookup_version = None + From df0c5888f140e75db62f46352cd3ee716caec732 Mon Sep 17 00:00:00 2001 From: Gourab Singha <110812339+gourabsingha1@users.noreply.github.com> Date: Mon, 22 Jun 2026 23:33:07 +0530 Subject: [PATCH 2/3] Update test/DetermineEndpointTest.py Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- test/DetermineEndpointTest.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/DetermineEndpointTest.py b/test/DetermineEndpointTest.py index 163b59c9..eb7cad95 100644 --- a/test/DetermineEndpointTest.py +++ b/test/DetermineEndpointTest.py @@ -203,6 +203,11 @@ def test_set_url_version(self): self.assertTrue(recurring_url.endswith("/v77")) self.assertTrue(binlookup_url.endswith("/v66")) + # Test that None versions do not override the URL + self.client.api_payment_version = None + unchanged_url = self.client._set_url_version("payments", self.payment_url) + self.assertEqual(unchanged_url, self.payment_url) + # Cleanup self.client.api_payment_version = None self.client.api_checkout_version = None From 97468f8fd99fa0db000190ac41ee9fee136c7728 Mon Sep 17 00:00:00 2001 From: Gourab Singha Date: Mon, 22 Jun 2026 23:42:27 +0530 Subject: [PATCH 3/3] fix: return endpoint unchanged in _set_url_version when version is None Resolves reviewer feedback: if a service's version override is not set (None), _set_url_version was incorrectly formatting the URL as '/vNone'. Added a guard that returns the original endpoint unchanged when version is None. Also added test_set_url_version_none_does_not_modify_url to verify this behavior, and wrapped test_set_url_version mutations in a try-finally for state safety. --- Adyen/client.py | 5 ++++- test/DetermineEndpointTest.py | 36 +++++++++++++++++++++++------------ 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/Adyen/client.py b/Adyen/client.py index a51a4eea..2026e602 100644 --- a/Adyen/client.py +++ b/Adyen/client.py @@ -322,7 +322,10 @@ def _set_url_version(self, service, endpoint): "capital": self.api_capital_version, } - new_version = f"v{version_lookup[service]}" + version = version_lookup.get(service) + if version is None: + return endpoint + new_version = f"v{version}" endpoint = re.sub(r"/v\d+(\b|$)", f"/{new_version}", endpoint) return endpoint diff --git a/test/DetermineEndpointTest.py b/test/DetermineEndpointTest.py index 163b59c9..3b4838a9 100644 --- a/test/DetermineEndpointTest.py +++ b/test/DetermineEndpointTest.py @@ -192,20 +192,32 @@ def test_set_url_version(self): self.client.api_checkout_version = 88 self.client.api_recurring_version = 77 self.client.api_bin_lookup_version = 66 + try: + payments_url = self.client._set_url_version("payments", self.payment_url) + checkout_url = self.client._set_url_version("checkout", self.checkout_url) + recurring_url = self.client._set_url_version("recurring", self.recurring_url) + binlookup_url = self.client._set_url_version("binlookup", self.binlookup_url) + + self.assertTrue(payments_url.endswith("/v99")) + self.assertTrue(checkout_url.endswith("/v88")) + self.assertTrue(recurring_url.endswith("/v77")) + self.assertTrue(binlookup_url.endswith("/v66")) + finally: + # Cleanup + self.client.api_payment_version = None + self.client.api_checkout_version = None + self.client.api_recurring_version = None + self.client.api_bin_lookup_version = None + + def test_set_url_version_none_does_not_modify_url(self): + # Ensure version overrides are cleared + self.client.api_payment_version = None + self.client.api_checkout_version = None payments_url = self.client._set_url_version("payments", self.payment_url) checkout_url = self.client._set_url_version("checkout", self.checkout_url) - recurring_url = self.client._set_url_version("recurring", self.recurring_url) - binlookup_url = self.client._set_url_version("binlookup", self.binlookup_url) - self.assertTrue(payments_url.endswith("/v99")) - self.assertTrue(checkout_url.endswith("/v88")) - self.assertTrue(recurring_url.endswith("/v77")) - self.assertTrue(binlookup_url.endswith("/v66")) - - # Cleanup - self.client.api_payment_version = None - self.client.api_checkout_version = None - self.client.api_recurring_version = None - self.client.api_bin_lookup_version = None + # URL should remain unchanged when version override is None + self.assertEqual(payments_url, self.payment_url) + self.assertEqual(checkout_url, self.checkout_url)