diff --git a/Adyen/client.py b/Adyen/client.py index c9a38227..de609105 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) + version = version_lookup.get(service) + if version is None: + return endpoint + + new_version = f"v{version}" + endpoint = re.sub(r"/v\d+(?=/|$)", f"/{new_version}", endpoint) return endpoint def call_adyen_api( diff --git a/test/DetermineEndpointTest.py b/test/DetermineEndpointTest.py index 747334b3..4e1479e2 100644 --- a/test/DetermineEndpointTest.py +++ b/test/DetermineEndpointTest.py @@ -186,3 +186,37 @@ def test_recurring_api_url_live_no_prefix_raises(self): "live", self.recurring_url + "RECURRING_DETAILS", ) + + def test_set_url_version_pal_recurring(self): + self.client.api_recurring_version = "70" + url = self.client._set_url_version("recurring", self.recurring_url + RECURRING_DETAILS) + expected = self.recurring_url.replace(f"/{self.recurring_version}", "/v70") + RECURRING_DETAILS + self.assertEqual(url, expected) + self.client.api_recurring_version = None + + def test_set_url_version_pal_payment(self): + self.client.api_payment_version = "64" + url = self.client._set_url_version("payments", self.payment_url + "/payments") + expected = self.payment_url.replace(f"/{self.payment_version}", "/v64") + "/payments" + self.assertEqual(url, expected) + self.client.api_payment_version = None + + def test_set_url_version_checkout(self): + self.client.api_checkout_version = "72" + url = self.client._set_url_version("checkout", self.checkout_url + "/payments") + expected = self.checkout_url.replace(f"/{self.checkout_version}", "/v72") + "/payments" + self.assertEqual(url, expected) + self.client.api_checkout_version = None + + def test_set_url_version_none_guard_preserves_endpoint(self): + self.client.api_recurring_version = None + url = self.client._set_url_version("recurring", self.recurring_url + RECURRING_DETAILS) + self.assertEqual(url, self.recurring_url + RECURRING_DETAILS) + + def test_set_url_version_multi_digit(self): + self.client.api_checkout_version = "100" + url = self.client._set_url_version("checkout", self.checkout_url + "/payments") + expected = self.checkout_url.replace(f"/{self.checkout_version}", "/v100") + "/payments" + self.assertEqual(url, expected) + self.client.api_checkout_version = None +