@@ -921,6 +921,33 @@ def retry_handler(_request: httpx.Request) -> httpx.Response:
921
921
922
922
assert response .http_request .headers .get ("x-stainless-retry-count" ) == "42"
923
923
924
+ @pytest .mark .respx (base_url = base_url )
925
+ def test_follow_redirects (self , respx_mock : MockRouter ) -> None :
926
+ # Test that the default follow_redirects=True allows following redirects
927
+ respx_mock .post ("/redirect" ).mock (
928
+ return_value = httpx .Response (302 , headers = {"Location" : f"{ base_url } /redirected" })
929
+ )
930
+ respx_mock .get ("/redirected" ).mock (return_value = httpx .Response (200 , json = {"status" : "ok" }))
931
+
932
+ response = self .client .post ("/redirect" , body = {"key" : "value" }, cast_to = httpx .Response )
933
+ assert response .status_code == 200
934
+ assert response .json () == {"status" : "ok" }
935
+
936
+ @pytest .mark .respx (base_url = base_url )
937
+ def test_follow_redirects_disabled (self , respx_mock : MockRouter ) -> None :
938
+ # Test that follow_redirects=False prevents following redirects
939
+ respx_mock .post ("/redirect" ).mock (
940
+ return_value = httpx .Response (302 , headers = {"Location" : f"{ base_url } /redirected" })
941
+ )
942
+
943
+ with pytest .raises (APIStatusError ) as exc_info :
944
+ self .client .post (
945
+ "/redirect" , body = {"key" : "value" }, options = {"follow_redirects" : False }, cast_to = httpx .Response
946
+ )
947
+
948
+ assert exc_info .value .response .status_code == 302
949
+ assert exc_info .value .response .headers ["Location" ] == f"{ base_url } /redirected"
950
+
924
951
925
952
class TestAsyncOpenlayer :
926
953
client = AsyncOpenlayer (base_url = base_url , api_key = api_key , _strict_response_validation = True )
@@ -1847,3 +1874,30 @@ async def test_main() -> None:
1847
1874
raise AssertionError ("calling get_platform using asyncify resulted in a hung process" )
1848
1875
1849
1876
time .sleep (0.1 )
1877
+
1878
+ @pytest .mark .respx (base_url = base_url )
1879
+ async def test_follow_redirects (self , respx_mock : MockRouter ) -> None :
1880
+ # Test that the default follow_redirects=True allows following redirects
1881
+ respx_mock .post ("/redirect" ).mock (
1882
+ return_value = httpx .Response (302 , headers = {"Location" : f"{ base_url } /redirected" })
1883
+ )
1884
+ respx_mock .get ("/redirected" ).mock (return_value = httpx .Response (200 , json = {"status" : "ok" }))
1885
+
1886
+ response = await self .client .post ("/redirect" , body = {"key" : "value" }, cast_to = httpx .Response )
1887
+ assert response .status_code == 200
1888
+ assert response .json () == {"status" : "ok" }
1889
+
1890
+ @pytest .mark .respx (base_url = base_url )
1891
+ async def test_follow_redirects_disabled (self , respx_mock : MockRouter ) -> None :
1892
+ # Test that follow_redirects=False prevents following redirects
1893
+ respx_mock .post ("/redirect" ).mock (
1894
+ return_value = httpx .Response (302 , headers = {"Location" : f"{ base_url } /redirected" })
1895
+ )
1896
+
1897
+ with pytest .raises (APIStatusError ) as exc_info :
1898
+ await self .client .post (
1899
+ "/redirect" , body = {"key" : "value" }, options = {"follow_redirects" : False }, cast_to = httpx .Response
1900
+ )
1901
+
1902
+ assert exc_info .value .response .status_code == 302
1903
+ assert exc_info .value .response .headers ["Location" ] == f"{ base_url } /redirected"
0 commit comments