use super::*;
#[test]
fn tool_call_args_over_cap_are_recoverable_from_metadata_full() {
let args = format!("{{\"command\":\"{}\"}}", "cargo test --workspace ".repeat(8));
let event = parse_json_event(
AgentKind::OpenCode,
AgentKind::OpenCode,
None,
&TaskId("t-tool".to_string()),
&serde_json::json!({"type": "tool_call", "name": "bash", "arguments": args}),
Local::now(),
)
.expect("tool_call events should parse");
let expected_full = format!("bash: {args}");
assert_eq!(event.event_kind, EventKind::Test);
assert_eq!(event.detail.len(), super::super::truncate::EVENT_DETAIL_MAX);
assert!(event.detail.ends_with("..."));
assert_eq!(event.full_detail(), expected_full);
assert_eq!(
event.metadata.as_ref().and_then(|m| m["full"].as_str()),
Some(expected_full.as_str())
);
}
#[test]
fn tool_call_args_under_cap_keep_plain_detail() {
let event = parse_json_event(
AgentKind::OpenCode,
AgentKind::OpenCode,
None,
&TaskId("t-tool".to_string()),
&serde_json::json!({"type": "tool_call", "name": "read", "arguments": "src/main.rs"}),
Local::now(),
)
.expect("tool_call events should parse");
assert_eq!(event.detail, "read: src/main.rs");
assert!(event.metadata.is_none());
}
#[test]
fn parses_step_finish_token_event() {
let task_id = TaskId("t-step".to_string());
let event = parse_json_event(
AgentKind::OpenCode,
AgentKind::OpenCode,
None,
&task_id,
&serde_json::json!({
"type": "step_finish",
"part": {
"tokens": {
"total": 16125,
"input": 14040,
"output": 2,
"reasoning": 0
},
"cost": 0.0
}
}),
Local::now(),
)
.expect("step_finish events should parse");
assert_eq!(event.event_kind, EventKind::Completion);
assert_eq!(event.detail, "tokens: 14040 in + 2 out = 16125");
assert_eq!(
event.metadata,
Some(serde_json::json!({
"tokens": 16125,
"input_tokens": 14040,
"output_tokens": 2,
"cost_usd": 0.0,
"usage_is_delta": true
}))
);
}