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