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