]> git.ipfire.org Git - thirdparty/starlette.git/commitdiff
Merge URLs properly on TestClient (#2376)
authorMarcelo Trylesinski <marcelotryle@gmail.com>
Sat, 16 Dec 2023 13:55:20 +0000 (14:55 +0100)
committerGitHub <noreply@github.com>
Sat, 16 Dec 2023 13:55:20 +0000 (06:55 -0700)
starlette/testclient.py
tests/middleware/test_session.py
tests/test_testclient.py

index 60ef322d19dd8cd18055e6cf830ef04a4d93af4b..04ac90a057a95568d159f473b5f4040a65aa644c 100644 (file)
@@ -463,7 +463,7 @@ class TestClient(httpx.Client):
         ] = httpx._client.USE_CLIENT_DEFAULT,
         extensions: typing.Optional[typing.Dict[str, typing.Any]] = None,
     ) -> httpx.Response:
-        url = self.base_url.join(url)
+        url = self._merge_url(url)
         redirect = self._choose_redirect_arg(follow_redirects, allow_redirects)
         return super().request(
             method,
index 8500f7b54512a77420ff4a1049319c1021331cf4..dc10941175aab1fb3393c546ab19d14595823c64 100644 (file)
@@ -130,7 +130,7 @@ def test_session_cookie_subpath(test_client_factory):
     )
     app = Starlette(routes=[Mount("/second_app", app=second_app)])
     client = test_client_factory(app, base_url="http://testserver/second_app")
-    response = client.post("/second_app/update_session", json={"some": "data"})
+    response = client.post("/update_session", json={"some": "data"})
     assert response.status_code == 200
     cookie = response.headers["set-cookie"]
     cookie_path_match = re.search(r"; path=(\S+);", cookie)
index 03f27e28d7303ba16b53392f15922db03c500b5f..44bcd7acea4db9128c571c96bbd83543366961af 100644 (file)
@@ -354,3 +354,13 @@ def test_with_duplicate_headers(test_client_factory: Callable[[Starlette], TestC
     client = test_client_factory(app)
     response = client.get("/", headers=[("x-token", "foo"), ("x-token", "bar")])
     assert response.json() == {"x-token": ["foo", "bar"]}
+
+
+def test_merge_url(test_client_factory: Callable[..., TestClient]):
+    def homepage(request: Request) -> Response:
+        return Response(request.url.path)
+
+    app = Starlette(routes=[Route("/api/v1/bar", endpoint=homepage)])
+    client = test_client_factory(app, base_url="http://testserver/api/v1/")
+    response = client.get("/bar")
+    assert response.text == "/api/v1/bar"