Files
tolaria/src-tauri/src/opencode_events_tests.rs
2026-04-28 01:26:21 +02:00

64 lines
2.0 KiB
Rust

use super::*;
#[test]
fn dispatch_maps_session_reasoning_and_text() {
let mut events = Vec::new();
let started = serde_json::json!({ "type": "session", "sessionID": "ses_1" });
let reasoning = serde_json::json!({ "type": "reasoning", "text": "Checking links" });
let text = serde_json::json!({ "type": "message", "text": "Done" });
for event in [started, reasoning, text] {
dispatch_event(&event, &mut |event| events.push(event));
}
assert!(matches!(
&events[0],
AiAgentStreamEvent::Init { session_id } if session_id == "ses_1"
));
assert!(matches!(
&events[1],
AiAgentStreamEvent::ThinkingDelta { text } if text == "Checking links"
));
assert!(matches!(
&events[2],
AiAgentStreamEvent::TextDelta { text } if text == "Done"
));
}
#[test]
fn dispatch_maps_tool_events() {
let mut events = Vec::new();
let tool_start = serde_json::json!({
"type": "tool_use",
"id": "tool_1",
"name": "read",
"input": { "path": "Note.md" }
});
let tool_done = serde_json::json!({ "type": "tool_result", "id": "tool_1", "output": "ok" });
dispatch_event(&tool_start, &mut |event| events.push(event));
dispatch_event(&tool_done, &mut |event| events.push(event));
assert!(matches!(
&events[0],
AiAgentStreamEvent::ToolStart { tool_name, tool_id, input }
if tool_name == "read" && tool_id == "tool_1" && input.as_deref() == Some(r#"{"path":"Note.md"}"#)
));
assert!(matches!(
&events[1],
AiAgentStreamEvent::ToolDone { tool_id, output }
if tool_id == "tool_1" && output.as_deref() == Some("ok")
));
}
#[test]
fn format_error_explains_missing_auth_or_provider_setup() {
let message = format_error(
"provider auth failed: please login".into(),
"exit status: 1".into(),
);
assert!(message.contains("OpenCode CLI is not authenticated"));
assert!(message.contains("opencode auth login"));
}