mirror of
https://github.com/Alishahryar1/free-claude-code.git
synced 2026-04-28 03:20:01 +00:00
- Create messaging/platforms/ (base, discord, telegram, factory) - Create messaging/rendering/ (discord_markdown, telegram_markdown) - Create messaging/trees/ (data, repository, processor, queue_manager) - Organize tests/ into api/, providers/, messaging/, cli/, config/ - Add backward-compatible re-exports at old locations - Update handler.py and test_messaging_factory.py imports - Fix Telegram type hints for TELEGRAM_AVAILABLE=False case - Fix Python 3 except syntax in discord_markdown Co-authored-by: Ali Khokhar <alishahryar2@gmail.com>
192 lines
5.8 KiB
Python
192 lines
5.8 KiB
Python
from messaging.event_parser import parse_cli_event
|
|
|
|
|
|
def test_parse_cli_event_assistant_content():
|
|
event = {
|
|
"type": "assistant",
|
|
"message": {
|
|
"content": [
|
|
{"type": "thinking", "thinking": "Internal thought"},
|
|
{"type": "text", "text": "Hello user"},
|
|
]
|
|
},
|
|
}
|
|
results = parse_cli_event(event)
|
|
assert len(results) == 2
|
|
assert results[0] == {"type": "thinking_chunk", "text": "Internal thought"}
|
|
assert results[1] == {"type": "text_chunk", "text": "Hello user"}
|
|
|
|
|
|
def test_parse_cli_event_assistant_tools():
|
|
event = {
|
|
"type": "assistant",
|
|
"message": {
|
|
"content": [{"type": "tool_use", "name": "ls", "input": {"path": "."}}]
|
|
},
|
|
}
|
|
results = parse_cli_event(event)
|
|
assert len(results) == 1
|
|
assert results[0]["type"] == "tool_use"
|
|
assert results[0]["name"] == "ls"
|
|
assert results[0]["input"] == {"path": "."}
|
|
|
|
|
|
def test_parse_cli_event_assistant_subagent():
|
|
event = {
|
|
"type": "assistant",
|
|
"message": {
|
|
"content": [
|
|
{
|
|
"type": "tool_use",
|
|
"name": "Task",
|
|
"input": {"description": "Fix bug"},
|
|
}
|
|
]
|
|
},
|
|
}
|
|
results = parse_cli_event(event)
|
|
assert len(results) == 1
|
|
assert results[0]["type"] == "tool_use"
|
|
assert results[0]["name"] == "Task"
|
|
assert results[0]["input"] == {"description": "Fix bug"}
|
|
|
|
|
|
def test_parse_cli_event_content_block_delta():
|
|
# Text delta
|
|
event_text = {
|
|
"type": "content_block_delta",
|
|
"index": 0,
|
|
"delta": {"type": "text_delta", "text": " more"},
|
|
}
|
|
results_text = parse_cli_event(event_text)
|
|
assert results_text == [{"type": "text_delta", "index": 0, "text": " more"}]
|
|
|
|
# Thinking delta
|
|
event_think = {
|
|
"type": "content_block_delta",
|
|
"index": 1,
|
|
"delta": {"type": "thinking_delta", "thinking": " more thought"},
|
|
}
|
|
results_think = parse_cli_event(event_think)
|
|
assert results_think == [
|
|
{"type": "thinking_delta", "index": 1, "text": " more thought"}
|
|
]
|
|
|
|
|
|
def test_parse_cli_event_content_block_start():
|
|
event = {
|
|
"type": "content_block_start",
|
|
"index": 2,
|
|
"content_block": {
|
|
"type": "tool_use",
|
|
"name": "Task",
|
|
"input": {"description": "deploy"},
|
|
},
|
|
}
|
|
results = parse_cli_event(event)
|
|
assert results == [
|
|
{
|
|
"type": "tool_use_start",
|
|
"index": 2,
|
|
"id": "",
|
|
"name": "Task",
|
|
"input": {"description": "deploy"},
|
|
}
|
|
]
|
|
|
|
|
|
def test_parse_cli_event_error():
|
|
event = {"type": "error", "error": {"message": "something failed"}}
|
|
results = parse_cli_event(event)
|
|
assert results == [{"type": "error", "message": "something failed"}]
|
|
|
|
|
|
def test_parse_cli_event_user_tool_result():
|
|
event = {
|
|
"type": "user",
|
|
"message": {
|
|
"content": [
|
|
{
|
|
"type": "tool_result",
|
|
"tool_use_id": "tool_1",
|
|
"content": "ok",
|
|
"is_error": False,
|
|
}
|
|
]
|
|
},
|
|
}
|
|
results = parse_cli_event(event)
|
|
assert results == [
|
|
{
|
|
"type": "tool_result",
|
|
"tool_use_id": "tool_1",
|
|
"content": "ok",
|
|
"is_error": False,
|
|
}
|
|
]
|
|
|
|
|
|
def test_parse_cli_event_exit_success():
|
|
event = {"type": "exit", "code": 0}
|
|
results = parse_cli_event(event)
|
|
assert results == [{"type": "complete", "status": "success"}]
|
|
|
|
|
|
def test_parse_cli_event_exit_failure():
|
|
event = {"type": "exit", "code": 1, "stderr": "fatal error"}
|
|
results = parse_cli_event(event)
|
|
assert len(results) == 2
|
|
assert results[0] == {"type": "error", "message": "fatal error"}
|
|
assert results[1] == {"type": "complete", "status": "failed"}
|
|
|
|
|
|
def test_parse_cli_event_invalid_input():
|
|
assert parse_cli_event(None) == []
|
|
assert parse_cli_event("not a dict") == []
|
|
assert parse_cli_event({"type": "unknown"}) == []
|
|
|
|
|
|
def test_parse_cli_event_system_ignored():
|
|
assert parse_cli_event({"type": "system", "foo": "bar"}) == []
|
|
|
|
|
|
def test_parse_cli_event_result_with_content_directly():
|
|
event = {"type": "result", "content": [{"type": "text", "text": "hi"}]}
|
|
assert parse_cli_event(event) == [{"type": "text_chunk", "text": "hi"}]
|
|
|
|
|
|
def test_parse_cli_event_result_with_result_content_directly():
|
|
event = {"type": "result", "result": {"content": [{"type": "text", "text": "hi"}]}}
|
|
assert parse_cli_event(event) == [{"type": "text_chunk", "text": "hi"}]
|
|
|
|
|
|
def test_parse_cli_event_content_block_unknown_type_skipped():
|
|
"""Content block with unknown type is skipped; known blocks still parsed."""
|
|
event = {
|
|
"type": "assistant",
|
|
"message": {
|
|
"content": [
|
|
{"type": "text", "text": "visible"},
|
|
{"type": "unknown", "data": "ignored"},
|
|
{"type": "thinking", "thinking": "thought"},
|
|
]
|
|
},
|
|
}
|
|
results = parse_cli_event(event)
|
|
assert len(results) == 2
|
|
assert results[0] == {"type": "text_chunk", "text": "visible"}
|
|
assert results[1] == {"type": "thinking_chunk", "text": "thought"}
|
|
|
|
|
|
def test_parse_cli_event_error_non_dict():
|
|
"""Error event with error as string (not dict) is handled."""
|
|
event = {"type": "error", "error": "plain string error"}
|
|
results = parse_cli_event(event)
|
|
assert results == [{"type": "error", "message": "plain string error"}]
|
|
|
|
|
|
def test_parse_cli_event_exit_code_none():
|
|
"""Exit event with no code defaults to success."""
|
|
event = {"type": "exit"}
|
|
results = parse_cli_event(event)
|
|
assert results == [{"type": "complete", "status": "success"}]
|