@@ -967,26 +967,50 @@ def test_parse_result_message_success_no_errors(self):
967967 assert message .result == "Task completed successfully"
968968
969969 def test_parse_hook_event_message (self ):
970- """Test parsing a hook event into HookEventMessage."""
970+ """Hook started events (system/hook_started) parse into HookEventMessage."""
971971 data = {
972- "hook_event_name" : "PreToolUse" ,
972+ "type" : "system" ,
973+ "subtype" : "hook_started" ,
974+ "hook_event" : "PreToolUse" ,
975+ "hook_name" : "PreToolUse" ,
973976 "session_id" : "sess-123" ,
974977 "uuid" : "uuid-456" ,
975978 "tool_name" : "Bash" ,
976979 "tool_input" : {"command" : "ls" },
977980 }
978981 message = parse_message (data )
979982 assert isinstance (message , HookEventMessage )
983+ assert message .subtype == "hook_started"
980984 assert message .hook_event_name == "PreToolUse"
981985 assert message .session_id == "sess-123"
982986 assert message .uuid == "uuid-456"
983987 assert message .data == data
984988
989+ def test_parse_hook_event_message_response (self ):
990+ """Hook response events (system/hook_response) parse into HookEventMessage."""
991+ data = {
992+ "type" : "system" ,
993+ "subtype" : "hook_response" ,
994+ "hook_event" : "PostToolUse" ,
995+ "hook_name" : "PostToolUse" ,
996+ "session_id" : "sess-123" ,
997+ "uuid" : "uuid-789" ,
998+ "response" : {"decision" : "approve" },
999+ }
1000+ message = parse_message (data )
1001+ assert isinstance (message , HookEventMessage )
1002+ assert message .subtype == "hook_response"
1003+ assert message .hook_event_name == "PostToolUse"
1004+ assert message .session_id == "sess-123"
1005+ assert message .uuid == "uuid-789"
1006+ assert message .data ["response" ] == {"decision" : "approve" }
1007+
9851008 def test_parse_hook_event_message_minimal (self ):
986- """Hook events without session_id/uuid still parse."""
987- data = {"hook_event_name " : "Stop" }
1009+ """Hook events without session_id/uuid/hook_event still parse."""
1010+ data = {"type" : "system" , "subtype" : "hook_started" , "hook_name " : "Stop" }
9881011 message = parse_message (data )
9891012 assert isinstance (message , HookEventMessage )
1013+ assert message .subtype == "hook_started"
9901014 assert message .hook_event_name == "Stop"
9911015 assert message .session_id is None
9921016 assert message .uuid is None
0 commit comments