@@ -833,6 +833,33 @@ def retry_handler(_request: httpx.Request) -> httpx.Response:
833833
834834 assert response .http_request .headers .get ("x-stainless-retry-count" ) == "42"
835835
836+ @pytest .mark .respx (base_url = base_url )
837+ def test_follow_redirects (self , respx_mock : MockRouter ) -> None :
838+ # Test that the default follow_redirects=True allows following redirects
839+ respx_mock .post ("/redirect" ).mock (
840+ return_value = httpx .Response (302 , headers = {"Location" : f"{ base_url } /redirected" })
841+ )
842+ respx_mock .get ("/redirected" ).mock (return_value = httpx .Response (200 , json = {"status" : "ok" }))
843+
844+ response = self .client .post ("/redirect" , body = {"key" : "value" }, cast_to = httpx .Response )
845+ assert response .status_code == 200
846+ assert response .json () == {"status" : "ok" }
847+
848+ @pytest .mark .respx (base_url = base_url )
849+ def test_follow_redirects_disabled (self , respx_mock : MockRouter ) -> None :
850+ # Test that follow_redirects=False prevents following redirects
851+ respx_mock .post ("/redirect" ).mock (
852+ return_value = httpx .Response (302 , headers = {"Location" : f"{ base_url } /redirected" })
853+ )
854+
855+ with pytest .raises (APIStatusError ) as exc_info :
856+ self .client .post (
857+ "/redirect" , body = {"key" : "value" }, options = {"follow_redirects" : False }, cast_to = httpx .Response
858+ )
859+
860+ assert exc_info .value .response .status_code == 302
861+ assert exc_info .value .response .headers ["Location" ] == f"{ base_url } /redirected"
862+
836863
837864class TestAsyncHubmapSearchSDK :
838865 client = AsyncHubmapSearchSDK (base_url = base_url , bearer_token = bearer_token , _strict_response_validation = True )
@@ -1669,3 +1696,30 @@ async def test_main() -> None:
16691696 raise AssertionError ("calling get_platform using asyncify resulted in a hung process" )
16701697
16711698 time .sleep (0.1 )
1699+
1700+ @pytest .mark .respx (base_url = base_url )
1701+ async def test_follow_redirects (self , respx_mock : MockRouter ) -> None :
1702+ # Test that the default follow_redirects=True allows following redirects
1703+ respx_mock .post ("/redirect" ).mock (
1704+ return_value = httpx .Response (302 , headers = {"Location" : f"{ base_url } /redirected" })
1705+ )
1706+ respx_mock .get ("/redirected" ).mock (return_value = httpx .Response (200 , json = {"status" : "ok" }))
1707+
1708+ response = await self .client .post ("/redirect" , body = {"key" : "value" }, cast_to = httpx .Response )
1709+ assert response .status_code == 200
1710+ assert response .json () == {"status" : "ok" }
1711+
1712+ @pytest .mark .respx (base_url = base_url )
1713+ async def test_follow_redirects_disabled (self , respx_mock : MockRouter ) -> None :
1714+ # Test that follow_redirects=False prevents following redirects
1715+ respx_mock .post ("/redirect" ).mock (
1716+ return_value = httpx .Response (302 , headers = {"Location" : f"{ base_url } /redirected" })
1717+ )
1718+
1719+ with pytest .raises (APIStatusError ) as exc_info :
1720+ await self .client .post (
1721+ "/redirect" , body = {"key" : "value" }, options = {"follow_redirects" : False }, cast_to = httpx .Response
1722+ )
1723+
1724+ assert exc_info .value .response .status_code == 302
1725+ assert exc_info .value .response .headers ["Location" ] == f"{ base_url } /redirected"
0 commit comments