File tree Expand file tree Collapse file tree 2 files changed +36
-1
lines changed
hyperbrowser/client/managers Expand file tree Collapse file tree 2 files changed +36
-1
lines changed Original file line number Diff line number Diff line change @@ -10,8 +10,17 @@ def parse_session_recordings_response_data(response_data: Any) -> List[SessionRe
1010 raise HyperbrowserError (
1111 "Expected session recording response to be a list of objects"
1212 )
13+ try :
14+ recording_items = list (response_data )
15+ except HyperbrowserError :
16+ raise
17+ except Exception as exc :
18+ raise HyperbrowserError (
19+ "Failed to iterate session recording response list" ,
20+ original_error = exc ,
21+ ) from exc
1322 parsed_recordings : List [SessionRecording ] = []
14- for index , recording in enumerate (response_data ):
23+ for index , recording in enumerate (recording_items ):
1524 if not isinstance (recording , Mapping ):
1625 raise HyperbrowserError (
1726 "Expected session recording object at index "
Original file line number Diff line number Diff line change @@ -115,6 +115,32 @@ def test_parse_session_recordings_response_data_wraps_invalid_items():
115115 assert exc_info .value .original_error is not None
116116
117117
118+ def test_parse_session_recordings_response_data_wraps_unreadable_list_iteration ():
119+ class _BrokenRecordingList (list ):
120+ def __iter__ (self ):
121+ raise RuntimeError ("cannot iterate recordings" )
122+
123+ with pytest .raises (
124+ HyperbrowserError , match = "Failed to iterate session recording response list"
125+ ) as exc_info :
126+ parse_session_recordings_response_data (_BrokenRecordingList ([{}]))
127+
128+ assert exc_info .value .original_error is not None
129+
130+
131+ def test_parse_session_recordings_response_data_preserves_hyperbrowser_iteration_errors ():
132+ class _BrokenRecordingList (list ):
133+ def __iter__ (self ):
134+ raise HyperbrowserError ("custom recording iteration failure" )
135+
136+ with pytest .raises (
137+ HyperbrowserError , match = "custom recording iteration failure"
138+ ) as exc_info :
139+ parse_session_recordings_response_data (_BrokenRecordingList ([{}]))
140+
141+ assert exc_info .value .original_error is None
142+
143+
118144def test_sync_session_manager_get_recording_uses_recording_parser ():
119145 manager = SyncSessionManager (
120146 _FakeClient (
You can’t perform that action at this time.
0 commit comments