@@ -26,6 +26,32 @@ def raise_for_status(self) -> None:
2626 raise httpx .RequestError ("network down" )
2727
2828
29+ class _BrokenJsonSuccessResponse :
30+ status_code = 200
31+ content = b"{broken-json}"
32+
33+ def raise_for_status (self ) -> None :
34+ return None
35+
36+ def json (self ):
37+ raise RuntimeError ("broken json" )
38+
39+
40+ class _BrokenJsonErrorResponse :
41+ status_code = 500
42+ content = b"{broken-json}"
43+
44+ def raise_for_status (self ) -> None :
45+ return None
46+
47+ @property
48+ def text (self ) -> str :
49+ raise RuntimeError ("broken response text" )
50+
51+ def json (self ):
52+ raise RuntimeError ("broken json" )
53+
54+
2955def test_sync_handle_response_with_non_json_success_body_returns_status_only ():
3056 transport = SyncTransport (api_key = "test-key" )
3157 try :
@@ -39,6 +65,30 @@ def test_sync_handle_response_with_non_json_success_body_returns_status_only():
3965 transport .close ()
4066
4167
68+ def test_sync_handle_response_with_broken_json_success_payload_returns_status_only ():
69+ transport = SyncTransport (api_key = "test-key" )
70+ try :
71+ api_response = transport ._handle_response (
72+ _BrokenJsonSuccessResponse () # type: ignore[arg-type]
73+ )
74+
75+ assert api_response .status_code == 200
76+ assert api_response .data is None
77+ finally :
78+ transport .close ()
79+
80+
81+ def test_sync_handle_response_with_broken_json_error_payload_uses_default_message ():
82+ transport = SyncTransport (api_key = "test-key" )
83+ try :
84+ with pytest .raises (HyperbrowserError , match = "Unknown error occurred" ):
85+ transport ._handle_response (
86+ _BrokenJsonErrorResponse () # type: ignore[arg-type]
87+ )
88+ finally :
89+ transport .close ()
90+
91+
4292def test_sync_handle_response_with_request_error_includes_method_and_url ():
4393 transport = SyncTransport (api_key = "test-key" )
4494 try :
@@ -111,6 +161,36 @@ async def run() -> None:
111161 asyncio .run (run ())
112162
113163
164+ def test_async_handle_response_with_broken_json_success_payload_returns_status_only ():
165+ async def run () -> None :
166+ transport = AsyncTransport (api_key = "test-key" )
167+ try :
168+ api_response = await transport ._handle_response (
169+ _BrokenJsonSuccessResponse () # type: ignore[arg-type]
170+ )
171+
172+ assert api_response .status_code == 200
173+ assert api_response .data is None
174+ finally :
175+ await transport .close ()
176+
177+ asyncio .run (run ())
178+
179+
180+ def test_async_handle_response_with_broken_json_error_payload_uses_default_message ():
181+ async def run () -> None :
182+ transport = AsyncTransport (api_key = "test-key" )
183+ try :
184+ with pytest .raises (HyperbrowserError , match = "Unknown error occurred" ):
185+ await transport ._handle_response (
186+ _BrokenJsonErrorResponse () # type: ignore[arg-type]
187+ )
188+ finally :
189+ await transport .close ()
190+
191+ asyncio .run (run ())
192+
193+
114194def test_async_handle_response_with_request_error_includes_method_and_url ():
115195 async def run () -> None :
116196 transport = AsyncTransport (api_key = "test-key" )
0 commit comments