From ec79b67b3472dcf8a4eee882d52a8d16581abf77 Mon Sep 17 00:00:00 2001 From: Amin Alaee Date: Tue, 27 Sep 2022 11:06:32 +0200 Subject: [PATCH] Avoid TestClient follow_redirects by default --- starlette/testclient.py | 1 - tests/test_testclient.py | 19 ++++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/starlette/testclient.py b/starlette/testclient.py index 455440ce5..be3f4997f 100644 --- a/starlette/testclient.py +++ b/starlette/testclient.py @@ -386,7 +386,6 @@ def __init__( base_url=base_url, headers={"user-agent": "testclient"}, transport=transport, - follow_redirects=True, cookies=cookies, ) diff --git a/tests/test_testclient.py b/tests/test_testclient.py index c9c7f33ca..a6eb02c51 100644 --- a/tests/test_testclient.py +++ b/tests/test_testclient.py @@ -9,7 +9,7 @@ from starlette.applications import Starlette from starlette.middleware import Middleware -from starlette.responses import JSONResponse +from starlette.responses import JSONResponse, RedirectResponse from starlette.routing import Route from starlette.websockets import WebSocket, WebSocketDisconnect @@ -18,9 +18,14 @@ def mock_service_endpoint(request): return JSONResponse({"mock": "example"}) +def mock_service_redirect(request): + return RedirectResponse(request.url_for("mock_service_endpoint")) + + mock_service = Starlette( routes=[ Route("/", endpoint=mock_service_endpoint), + Route("/redirect", endpoint=mock_service_redirect), ] ) @@ -240,3 +245,15 @@ async def app(scope, receive, send): client = test_client_factory(app) response = client.get("/") assert response.json() == {"host": "testclient", "port": 50000} + + +def test_client_not_follows_redirects(test_client_factory): + client = test_client_factory(mock_service) + response = client.get("/redirect") + assert response.status_code == 307 + assert response.url == "http://testserver/redirect" + + client = test_client_factory(mock_service) + response = client.get("/redirect", follow_redirects=True) + assert response.status_code == 200 + assert response.url == "http://testserver/"