@@ -837,6 +837,33 @@ def retry_handler(_request: httpx.Request) -> httpx.Response:
837
837
838
838
assert response .http_request .headers .get ("x-stainless-retry-count" ) == "42"
839
839
840
+ @pytest .mark .respx (base_url = base_url )
841
+ def test_follow_redirects (self , respx_mock : MockRouter ) -> None :
842
+ # Test that the default follow_redirects=True allows following redirects
843
+ respx_mock .post ("/redirect" ).mock (
844
+ return_value = httpx .Response (302 , headers = {"Location" : f"{ base_url } /redirected" })
845
+ )
846
+ respx_mock .get ("/redirected" ).mock (return_value = httpx .Response (200 , json = {"status" : "ok" }))
847
+
848
+ response = self .client .post ("/redirect" , body = {"key" : "value" }, cast_to = httpx .Response )
849
+ assert response .status_code == 200
850
+ assert response .json () == {"status" : "ok" }
851
+
852
+ @pytest .mark .respx (base_url = base_url )
853
+ def test_follow_redirects_disabled (self , respx_mock : MockRouter ) -> None :
854
+ # Test that follow_redirects=False prevents following redirects
855
+ respx_mock .post ("/redirect" ).mock (
856
+ return_value = httpx .Response (302 , headers = {"Location" : f"{ base_url } /redirected" })
857
+ )
858
+
859
+ with pytest .raises (APIStatusError ) as exc_info :
860
+ self .client .post (
861
+ "/redirect" , body = {"key" : "value" }, options = {"follow_redirects" : False }, cast_to = httpx .Response
862
+ )
863
+
864
+ assert exc_info .value .response .status_code == 302
865
+ assert exc_info .value .response .headers ["Location" ] == f"{ base_url } /redirected"
866
+
840
867
841
868
class TestAsyncJulep :
842
869
client = AsyncJulep (base_url = base_url , api_key = api_key , _strict_response_validation = True )
@@ -1688,3 +1715,30 @@ async def test_main() -> None:
1688
1715
raise AssertionError ("calling get_platform using asyncify resulted in a hung process" )
1689
1716
1690
1717
time .sleep (0.1 )
1718
+
1719
+ @pytest .mark .respx (base_url = base_url )
1720
+ async def test_follow_redirects (self , respx_mock : MockRouter ) -> None :
1721
+ # Test that the default follow_redirects=True allows following redirects
1722
+ respx_mock .post ("/redirect" ).mock (
1723
+ return_value = httpx .Response (302 , headers = {"Location" : f"{ base_url } /redirected" })
1724
+ )
1725
+ respx_mock .get ("/redirected" ).mock (return_value = httpx .Response (200 , json = {"status" : "ok" }))
1726
+
1727
+ response = await self .client .post ("/redirect" , body = {"key" : "value" }, cast_to = httpx .Response )
1728
+ assert response .status_code == 200
1729
+ assert response .json () == {"status" : "ok" }
1730
+
1731
+ @pytest .mark .respx (base_url = base_url )
1732
+ async def test_follow_redirects_disabled (self , respx_mock : MockRouter ) -> None :
1733
+ # Test that follow_redirects=False prevents following redirects
1734
+ respx_mock .post ("/redirect" ).mock (
1735
+ return_value = httpx .Response (302 , headers = {"Location" : f"{ base_url } /redirected" })
1736
+ )
1737
+
1738
+ with pytest .raises (APIStatusError ) as exc_info :
1739
+ await self .client .post (
1740
+ "/redirect" , body = {"key" : "value" }, options = {"follow_redirects" : False }, cast_to = httpx .Response
1741
+ )
1742
+
1743
+ assert exc_info .value .response .status_code == 302
1744
+ assert exc_info .value .response .headers ["Location" ] == f"{ base_url } /redirected"
0 commit comments