diff --git a/Adyen/client.py b/Adyen/client.py index c9a38227..2026e602 100644 --- a/Adyen/client.py +++ b/Adyen/client.py @@ -322,10 +322,14 @@ 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) + 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 + 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..3b4838a9 100644 --- a/test/DetermineEndpointTest.py +++ b/test/DetermineEndpointTest.py @@ -186,3 +186,38 @@ 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 + 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) + + # URL should remain unchanged when version override is None + self.assertEqual(payments_url, self.payment_url) + self.assertEqual(checkout_url, self.checkout_url) +