1+ from collections .abc import Mapping
12from typing import cast
23
34import pytest
@@ -18,6 +19,18 @@ def __init__(self, **kwargs):
1819 raise HyperbrowserError ("model validation failed" )
1920
2021
22+ class _BrokenKeysMapping (Mapping [str , object ]):
23+ def __iter__ (self ):
24+ raise RuntimeError ("cannot iterate mapping keys" )
25+
26+ def __len__ (self ) -> int :
27+ return 1
28+
29+ def __getitem__ (self , key : str ) -> object :
30+ _ = key
31+ return "value"
32+
33+
2134def test_api_response_from_json_parses_model_data () -> None :
2235 response = APIResponse .from_json (
2336 {"name" : "job-1" , "retries" : 2 }, _SampleResponseModel
@@ -67,6 +80,19 @@ def test_api_response_from_json_wraps_non_hyperbrowser_errors() -> None:
6780 assert exc_info .value .original_error is not None
6881
6982
83+ def test_api_response_from_json_wraps_unreadable_mapping_keys () -> None :
84+ with pytest .raises (
85+ HyperbrowserError ,
86+ match = (
87+ "Failed to parse response data for _SampleResponseModel: "
88+ "unable to read mapping keys"
89+ ),
90+ ) as exc_info :
91+ APIResponse .from_json (_BrokenKeysMapping (), _SampleResponseModel )
92+
93+ assert exc_info .value .original_error is not None
94+
95+
7096def test_api_response_from_json_preserves_hyperbrowser_errors () -> None :
7197 with pytest .raises (HyperbrowserError , match = "model validation failed" ) as exc_info :
7298 APIResponse .from_json ({}, _RaisesHyperbrowserModel )
0 commit comments