@@ -873,6 +873,33 @@ def retry_handler(_request: httpx.Request) -> httpx.Response:
873
873
874
874
assert response .http_request .headers .get ("x-stainless-retry-count" ) == "42"
875
875
876
+ @pytest .mark .respx (base_url = base_url )
877
+ def test_follow_redirects (self , respx_mock : MockRouter ) -> None :
878
+ # Test that the default follow_redirects=True allows following redirects
879
+ respx_mock .post ("/redirect" ).mock (
880
+ return_value = httpx .Response (302 , headers = {"Location" : f"{ base_url } /redirected" })
881
+ )
882
+ respx_mock .get ("/redirected" ).mock (return_value = httpx .Response (200 , json = {"status" : "ok" }))
883
+
884
+ response = self .client .post ("/redirect" , body = {"key" : "value" }, cast_to = httpx .Response )
885
+ assert response .status_code == 200
886
+ assert response .json () == {"status" : "ok" }
887
+
888
+ @pytest .mark .respx (base_url = base_url )
889
+ def test_follow_redirects_disabled (self , respx_mock : MockRouter ) -> None :
890
+ # Test that follow_redirects=False prevents following redirects
891
+ respx_mock .post ("/redirect" ).mock (
892
+ return_value = httpx .Response (302 , headers = {"Location" : f"{ base_url } /redirected" })
893
+ )
894
+
895
+ with pytest .raises (APIStatusError ) as exc_info :
896
+ self .client .post (
897
+ "/redirect" , body = {"key" : "value" }, options = {"follow_redirects" : False }, cast_to = httpx .Response
898
+ )
899
+
900
+ assert exc_info .value .response .status_code == 302
901
+ assert exc_info .value .response .headers ["Location" ] == f"{ base_url } /redirected"
902
+
876
903
877
904
class TestAsyncRunloop :
878
905
client = AsyncRunloop (base_url = base_url , bearer_token = bearer_token , _strict_response_validation = True )
@@ -1741,3 +1768,30 @@ async def test_main() -> None:
1741
1768
raise AssertionError ("calling get_platform using asyncify resulted in a hung process" )
1742
1769
1743
1770
time .sleep (0.1 )
1771
+
1772
+ @pytest .mark .respx (base_url = base_url )
1773
+ async def test_follow_redirects (self , respx_mock : MockRouter ) -> None :
1774
+ # Test that the default follow_redirects=True allows following redirects
1775
+ respx_mock .post ("/redirect" ).mock (
1776
+ return_value = httpx .Response (302 , headers = {"Location" : f"{ base_url } /redirected" })
1777
+ )
1778
+ respx_mock .get ("/redirected" ).mock (return_value = httpx .Response (200 , json = {"status" : "ok" }))
1779
+
1780
+ response = await self .client .post ("/redirect" , body = {"key" : "value" }, cast_to = httpx .Response )
1781
+ assert response .status_code == 200
1782
+ assert response .json () == {"status" : "ok" }
1783
+
1784
+ @pytest .mark .respx (base_url = base_url )
1785
+ async def test_follow_redirects_disabled (self , respx_mock : MockRouter ) -> None :
1786
+ # Test that follow_redirects=False prevents following redirects
1787
+ respx_mock .post ("/redirect" ).mock (
1788
+ return_value = httpx .Response (302 , headers = {"Location" : f"{ base_url } /redirected" })
1789
+ )
1790
+
1791
+ with pytest .raises (APIStatusError ) as exc_info :
1792
+ await self .client .post (
1793
+ "/redirect" , body = {"key" : "value" }, options = {"follow_redirects" : False }, cast_to = httpx .Response
1794
+ )
1795
+
1796
+ assert exc_info .value .response .status_code == 302
1797
+ assert exc_info .value .response .headers ["Location" ] == f"{ base_url } /redirected"
0 commit comments