@@ -832,6 +832,33 @@ def retry_handler(_request: httpx.Request) -> httpx.Response:
832
832
833
833
assert response .http_request .headers .get ("x-stainless-retry-count" ) == "42"
834
834
835
+ @pytest .mark .respx (base_url = base_url )
836
+ def test_follow_redirects (self , respx_mock : MockRouter ) -> None :
837
+ # Test that the default follow_redirects=True allows following redirects
838
+ respx_mock .post ("/redirect" ).mock (
839
+ return_value = httpx .Response (302 , headers = {"Location" : f"{ base_url } /redirected" })
840
+ )
841
+ respx_mock .get ("/redirected" ).mock (return_value = httpx .Response (200 , json = {"status" : "ok" }))
842
+
843
+ response = self .client .post ("/redirect" , body = {"key" : "value" }, cast_to = httpx .Response )
844
+ assert response .status_code == 200
845
+ assert response .json () == {"status" : "ok" }
846
+
847
+ @pytest .mark .respx (base_url = base_url )
848
+ def test_follow_redirects_disabled (self , respx_mock : MockRouter ) -> None :
849
+ # Test that follow_redirects=False prevents following redirects
850
+ respx_mock .post ("/redirect" ).mock (
851
+ return_value = httpx .Response (302 , headers = {"Location" : f"{ base_url } /redirected" })
852
+ )
853
+
854
+ with pytest .raises (APIStatusError ) as exc_info :
855
+ self .client .post (
856
+ "/redirect" , body = {"key" : "value" }, options = {"follow_redirects" : False }, cast_to = httpx .Response
857
+ )
858
+
859
+ assert exc_info .value .response .status_code == 302
860
+ assert exc_info .value .response .headers ["Location" ] == f"{ base_url } /redirected"
861
+
835
862
836
863
class TestAsyncBrowserbase :
837
864
client = AsyncBrowserbase (base_url = base_url , api_key = api_key , _strict_response_validation = True )
@@ -1659,3 +1686,30 @@ async def test_main() -> None:
1659
1686
raise AssertionError ("calling get_platform using asyncify resulted in a hung process" )
1660
1687
1661
1688
time .sleep (0.1 )
1689
+
1690
+ @pytest .mark .respx (base_url = base_url )
1691
+ async def test_follow_redirects (self , respx_mock : MockRouter ) -> None :
1692
+ # Test that the default follow_redirects=True allows following redirects
1693
+ respx_mock .post ("/redirect" ).mock (
1694
+ return_value = httpx .Response (302 , headers = {"Location" : f"{ base_url } /redirected" })
1695
+ )
1696
+ respx_mock .get ("/redirected" ).mock (return_value = httpx .Response (200 , json = {"status" : "ok" }))
1697
+
1698
+ response = await self .client .post ("/redirect" , body = {"key" : "value" }, cast_to = httpx .Response )
1699
+ assert response .status_code == 200
1700
+ assert response .json () == {"status" : "ok" }
1701
+
1702
+ @pytest .mark .respx (base_url = base_url )
1703
+ async def test_follow_redirects_disabled (self , respx_mock : MockRouter ) -> None :
1704
+ # Test that follow_redirects=False prevents following redirects
1705
+ respx_mock .post ("/redirect" ).mock (
1706
+ return_value = httpx .Response (302 , headers = {"Location" : f"{ base_url } /redirected" })
1707
+ )
1708
+
1709
+ with pytest .raises (APIStatusError ) as exc_info :
1710
+ await self .client .post (
1711
+ "/redirect" , body = {"key" : "value" }, options = {"follow_redirects" : False }, cast_to = httpx .Response
1712
+ )
1713
+
1714
+ assert exc_info .value .response .status_code == 302
1715
+ assert exc_info .value .response .headers ["Location" ] == f"{ base_url } /redirected"
0 commit comments