Skip to content

Commit 70626ed

Browse files
authored
Merge pull request #887 from microsasa/test/render-detail-safe-event-data-885-516adeb9515fb1cd
test: cover _safe_event_data exception paths and wildcard case (#885)
2 parents cccf00d + 03b40a3 commit 70626ed

1 file changed

Lines changed: 49 additions & 0 deletions

File tree

tests/copilot_usage/test_render_detail.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
TokenUsage,
2222
ToolExecutionData,
2323
ToolTelemetry,
24+
UserMessageData,
2425
)
2526
from copilot_usage.render_detail import (
2627
_build_event_details,
@@ -31,6 +32,7 @@
3132
_render_code_changes,
3233
_render_recent_events,
3334
_render_shutdown_cycles,
35+
_safe_event_data,
3436
render_session_detail,
3537
)
3638

@@ -806,3 +808,50 @@ def test_empty_content_returns_empty_string(self) -> None:
806808
"""Empty content → empty string."""
807809
ev = SessionEvent(type=EventType.USER_MESSAGE, data={"content": ""})
808810
assert _build_event_details(ev) == ""
811+
812+
813+
# ---------------------------------------------------------------------------
814+
# _safe_event_data — exception recovery paths (issue #885)
815+
# ---------------------------------------------------------------------------
816+
817+
818+
class TestSafeEventData:
819+
"""Cover the except (ValidationError, ValueError) branch of _safe_event_data."""
820+
821+
def test_returns_none_on_validation_error(self) -> None:
822+
"""ValidationError from the parser must be caught; returns None."""
823+
ev = SessionEvent(
824+
type=EventType.USER_MESSAGE,
825+
data={"attachments": 123}, # int, not list[str]
826+
)
827+
result = _safe_event_data(ev, ev.as_user_message)
828+
assert result is None
829+
830+
def test_returns_none_on_value_error(self) -> None:
831+
"""ValueError from the parser must be caught; returns None."""
832+
ev = SessionEvent(type=EventType.USER_MESSAGE, data={})
833+
834+
def _raise() -> UserMessageData:
835+
raise ValueError("synthetic mismatch")
836+
837+
result = _safe_event_data(ev, _raise)
838+
assert result is None
839+
840+
def test_returns_none_propagates_to_build_event_details(self) -> None:
841+
"""_build_event_details returns '' when _safe_event_data returns None."""
842+
ev = SessionEvent(
843+
type=EventType.USER_MESSAGE,
844+
data={"attachments": 123},
845+
)
846+
assert _build_event_details(ev) == ""
847+
848+
849+
# ---------------------------------------------------------------------------
850+
# _build_event_details — wildcard case (issue #885)
851+
# ---------------------------------------------------------------------------
852+
853+
854+
def test_build_event_details_returns_empty_for_unrecognized_type() -> None:
855+
"""Wildcard case must return '' for event types without explicit handling."""
856+
ev = SessionEvent(type=EventType.SESSION_RESUME, data={})
857+
assert _build_event_details(ev) == ""

0 commit comments

Comments
 (0)