@@ -811,6 +811,33 @@ def retry_handler(_request: httpx.Request) -> httpx.Response:
811
811
812
812
assert response .http_request .headers .get ("x-stainless-retry-count" ) == "42"
813
813
814
+ @pytest .mark .respx (base_url = base_url )
815
+ def test_follow_redirects (self , respx_mock : MockRouter ) -> None :
816
+ # Test that the default follow_redirects=True allows following redirects
817
+ respx_mock .post ("/redirect" ).mock (
818
+ return_value = httpx .Response (302 , headers = {"Location" : f"{ base_url } /redirected" })
819
+ )
820
+ respx_mock .get ("/redirected" ).mock (return_value = httpx .Response (200 , json = {"status" : "ok" }))
821
+
822
+ response = self .client .post ("/redirect" , body = {"key" : "value" }, cast_to = httpx .Response )
823
+ assert response .status_code == 200
824
+ assert response .json () == {"status" : "ok" }
825
+
826
+ @pytest .mark .respx (base_url = base_url )
827
+ def test_follow_redirects_disabled (self , respx_mock : MockRouter ) -> None :
828
+ # Test that follow_redirects=False prevents following redirects
829
+ respx_mock .post ("/redirect" ).mock (
830
+ return_value = httpx .Response (302 , headers = {"Location" : f"{ base_url } /redirected" })
831
+ )
832
+
833
+ with pytest .raises (APIStatusError ) as exc_info :
834
+ self .client .post (
835
+ "/redirect" , body = {"key" : "value" }, options = {"follow_redirects" : False }, cast_to = httpx .Response
836
+ )
837
+
838
+ assert exc_info .value .response .status_code == 302
839
+ assert exc_info .value .response .headers ["Location" ] == f"{ base_url } /redirected"
840
+
814
841
815
842
class TestAsyncRiza :
816
843
client = AsyncRiza (base_url = base_url , api_key = api_key , _strict_response_validation = True )
@@ -1632,3 +1659,30 @@ async def test_main() -> None:
1632
1659
raise AssertionError ("calling get_platform using asyncify resulted in a hung process" )
1633
1660
1634
1661
time .sleep (0.1 )
1662
+
1663
+ @pytest .mark .respx (base_url = base_url )
1664
+ async def test_follow_redirects (self , respx_mock : MockRouter ) -> None :
1665
+ # Test that the default follow_redirects=True allows following redirects
1666
+ respx_mock .post ("/redirect" ).mock (
1667
+ return_value = httpx .Response (302 , headers = {"Location" : f"{ base_url } /redirected" })
1668
+ )
1669
+ respx_mock .get ("/redirected" ).mock (return_value = httpx .Response (200 , json = {"status" : "ok" }))
1670
+
1671
+ response = await self .client .post ("/redirect" , body = {"key" : "value" }, cast_to = httpx .Response )
1672
+ assert response .status_code == 200
1673
+ assert response .json () == {"status" : "ok" }
1674
+
1675
+ @pytest .mark .respx (base_url = base_url )
1676
+ async def test_follow_redirects_disabled (self , respx_mock : MockRouter ) -> None :
1677
+ # Test that follow_redirects=False prevents following redirects
1678
+ respx_mock .post ("/redirect" ).mock (
1679
+ return_value = httpx .Response (302 , headers = {"Location" : f"{ base_url } /redirected" })
1680
+ )
1681
+
1682
+ with pytest .raises (APIStatusError ) as exc_info :
1683
+ await self .client .post (
1684
+ "/redirect" , body = {"key" : "value" }, options = {"follow_redirects" : False }, cast_to = httpx .Response
1685
+ )
1686
+
1687
+ assert exc_info .value .response .status_code == 302
1688
+ assert exc_info .value .response .headers ["Location" ] == f"{ base_url } /redirected"
0 commit comments