Problem
MockVWS uses urljoin to build the URL patterns it intercepts, e.g.:
url_pattern = urljoin(base=base_url, url=f"{route.path_pattern}$")
Because route.path_pattern starts with / (e.g. /targets, /v1/query), Python's urljoin silently discards any path component in the base URL. So if a user configures MockVWS(base_vws_url="http://localhost/prefix"), the mock registers handlers at http://localhost/targets instead of http://localhost/prefix/targets.
The same issue affects base_vwq_url.
Impact
A client library fixed to use string concatenation (base_url.rstrip("/") + path) instead of urljoin (as done in vws-python#2867) will send requests to http://localhost/prefix/targets, which the mock won't intercept, causing ConnectionError.
This makes it impossible to write a positive integration test for path-prefix base URL support without bypassing MockVWS entirely.
Fix
Replace the urljoin call in the route-registration code with string concatenation:
url_pattern = base_url.rstrip("/") + route.path_pattern + "$"
Problem
MockVWSusesurljointo build the URL patterns it intercepts, e.g.:Because
route.path_patternstarts with/(e.g./targets,/v1/query), Python'surljoinsilently discards any path component in the base URL. So if a user configuresMockVWS(base_vws_url="http://localhost/prefix"), the mock registers handlers athttp://localhost/targetsinstead ofhttp://localhost/prefix/targets.The same issue affects
base_vwq_url.Impact
A client library fixed to use string concatenation (
base_url.rstrip("/") + path) instead ofurljoin(as done in vws-python#2867) will send requests tohttp://localhost/prefix/targets, which the mock won't intercept, causingConnectionError.This makes it impossible to write a positive integration test for path-prefix base URL support without bypassing
MockVWSentirely.Fix
Replace the
urljoincall in the route-registration code with string concatenation: