@@ -850,6 +850,33 @@ def retry_handler(_request: httpx.Request) -> httpx.Response:
850
850
851
851
assert response .http_request .headers .get ("x-stainless-retry-count" ) == "42"
852
852
853
+ @pytest .mark .respx (base_url = base_url )
854
+ def test_follow_redirects (self , respx_mock : MockRouter ) -> None :
855
+ # Test that the default follow_redirects=True allows following redirects
856
+ respx_mock .post ("/redirect" ).mock (
857
+ return_value = httpx .Response (302 , headers = {"Location" : f"{ base_url } /redirected" })
858
+ )
859
+ respx_mock .get ("/redirected" ).mock (return_value = httpx .Response (200 , json = {"status" : "ok" }))
860
+
861
+ response = self .client .post ("/redirect" , body = {"key" : "value" }, cast_to = httpx .Response )
862
+ assert response .status_code == 200
863
+ assert response .json () == {"status" : "ok" }
864
+
865
+ @pytest .mark .respx (base_url = base_url )
866
+ def test_follow_redirects_disabled (self , respx_mock : MockRouter ) -> None :
867
+ # Test that follow_redirects=False prevents following redirects
868
+ respx_mock .post ("/redirect" ).mock (
869
+ return_value = httpx .Response (302 , headers = {"Location" : f"{ base_url } /redirected" })
870
+ )
871
+
872
+ with pytest .raises (APIStatusError ) as exc_info :
873
+ self .client .post (
874
+ "/redirect" , body = {"key" : "value" }, options = {"follow_redirects" : False }, cast_to = httpx .Response
875
+ )
876
+
877
+ assert exc_info .value .response .status_code == 302
878
+ assert exc_info .value .response .headers ["Location" ] == f"{ base_url } /redirected"
879
+
853
880
854
881
class TestAsyncIsaacus :
855
882
client = AsyncIsaacus (base_url = base_url , api_key = api_key , _strict_response_validation = True )
@@ -1707,3 +1734,30 @@ async def test_main() -> None:
1707
1734
raise AssertionError ("calling get_platform using asyncify resulted in a hung process" )
1708
1735
1709
1736
time .sleep (0.1 )
1737
+
1738
+ @pytest .mark .respx (base_url = base_url )
1739
+ async def test_follow_redirects (self , respx_mock : MockRouter ) -> None :
1740
+ # Test that the default follow_redirects=True allows following redirects
1741
+ respx_mock .post ("/redirect" ).mock (
1742
+ return_value = httpx .Response (302 , headers = {"Location" : f"{ base_url } /redirected" })
1743
+ )
1744
+ respx_mock .get ("/redirected" ).mock (return_value = httpx .Response (200 , json = {"status" : "ok" }))
1745
+
1746
+ response = await self .client .post ("/redirect" , body = {"key" : "value" }, cast_to = httpx .Response )
1747
+ assert response .status_code == 200
1748
+ assert response .json () == {"status" : "ok" }
1749
+
1750
+ @pytest .mark .respx (base_url = base_url )
1751
+ async def test_follow_redirects_disabled (self , respx_mock : MockRouter ) -> None :
1752
+ # Test that follow_redirects=False prevents following redirects
1753
+ respx_mock .post ("/redirect" ).mock (
1754
+ return_value = httpx .Response (302 , headers = {"Location" : f"{ base_url } /redirected" })
1755
+ )
1756
+
1757
+ with pytest .raises (APIStatusError ) as exc_info :
1758
+ await self .client .post (
1759
+ "/redirect" , body = {"key" : "value" }, options = {"follow_redirects" : False }, cast_to = httpx .Response
1760
+ )
1761
+
1762
+ assert exc_info .value .response .status_code == 302
1763
+ assert exc_info .value .response .headers ["Location" ] == f"{ base_url } /redirected"
0 commit comments