@@ -846,6 +846,33 @@ def retry_handler(_request: httpx.Request) -> httpx.Response:
846846
847847 assert response .http_request .headers .get ("x-stainless-retry-count" ) == "42"
848848
849+ @pytest .mark .respx (base_url = base_url )
850+ def test_follow_redirects (self , respx_mock : MockRouter ) -> None :
851+ # Test that the default follow_redirects=True allows following redirects
852+ respx_mock .post ("/redirect" ).mock (
853+ return_value = httpx .Response (302 , headers = {"Location" : f"{ base_url } /redirected" })
854+ )
855+ respx_mock .get ("/redirected" ).mock (return_value = httpx .Response (200 , json = {"status" : "ok" }))
856+
857+ response = self .client .post ("/redirect" , body = {"key" : "value" }, cast_to = httpx .Response )
858+ assert response .status_code == 200
859+ assert response .json () == {"status" : "ok" }
860+
861+ @pytest .mark .respx (base_url = base_url )
862+ def test_follow_redirects_disabled (self , respx_mock : MockRouter ) -> None :
863+ # Test that follow_redirects=False prevents following redirects
864+ respx_mock .post ("/redirect" ).mock (
865+ return_value = httpx .Response (302 , headers = {"Location" : f"{ base_url } /redirected" })
866+ )
867+
868+ with pytest .raises (APIStatusError ) as exc_info :
869+ self .client .post (
870+ "/redirect" , body = {"key" : "value" }, options = {"follow_redirects" : False }, cast_to = httpx .Response
871+ )
872+
873+ assert exc_info .value .response .status_code == 302
874+ assert exc_info .value .response .headers ["Location" ] == f"{ base_url } /redirected"
875+
849876
850877class TestAsyncSupermemory :
851878 client = AsyncSupermemory (base_url = base_url , api_key = api_key , _strict_response_validation = True )
@@ -1687,3 +1714,30 @@ async def test_main() -> None:
16871714 raise AssertionError ("calling get_platform using asyncify resulted in a hung process" )
16881715
16891716 time .sleep (0.1 )
1717+
1718+ @pytest .mark .respx (base_url = base_url )
1719+ async def test_follow_redirects (self , respx_mock : MockRouter ) -> None :
1720+ # Test that the default follow_redirects=True allows following redirects
1721+ respx_mock .post ("/redirect" ).mock (
1722+ return_value = httpx .Response (302 , headers = {"Location" : f"{ base_url } /redirected" })
1723+ )
1724+ respx_mock .get ("/redirected" ).mock (return_value = httpx .Response (200 , json = {"status" : "ok" }))
1725+
1726+ response = await self .client .post ("/redirect" , body = {"key" : "value" }, cast_to = httpx .Response )
1727+ assert response .status_code == 200
1728+ assert response .json () == {"status" : "ok" }
1729+
1730+ @pytest .mark .respx (base_url = base_url )
1731+ async def test_follow_redirects_disabled (self , respx_mock : MockRouter ) -> None :
1732+ # Test that follow_redirects=False prevents following redirects
1733+ respx_mock .post ("/redirect" ).mock (
1734+ return_value = httpx .Response (302 , headers = {"Location" : f"{ base_url } /redirected" })
1735+ )
1736+
1737+ with pytest .raises (APIStatusError ) as exc_info :
1738+ await self .client .post (
1739+ "/redirect" , body = {"key" : "value" }, options = {"follow_redirects" : False }, cast_to = httpx .Response
1740+ )
1741+
1742+ assert exc_info .value .response .status_code == 302
1743+ assert exc_info .value .response .headers ["Location" ] == f"{ base_url } /redirected"
0 commit comments