use super::fixture::Fixture;
use crate::git_tree::{AgentState, GitTree};
#[test]
fn agent_with_no_response_yet_classifies_as_stopped() {
let fx = Fixture::new();
fx.commit_other("README.md", "initial");
fx.build_agent("20260427T160000Z-pre0", "no response yet");
let tree = GitTree::from_repo(&fx.path).unwrap();
assert_eq!(tree.agents.len(), 1);
assert_eq!(tree.agents[0].state, AgentState::Stopped);
}
#[test]
fn agent_with_partial_response_and_no_executor_classifies_as_stopped() {
let fx = Fixture::new();
fx.commit_other("README.md", "initial");
fx.build_agent("20260427T160100Z-mid0", "mid stream");
fx.write_response_events(
"20260427T160100Z-mid0",
1,
&[
r#"{"type":"message_start","v":1,"role":"assistant"}"#,
r#"{"type":"content_delta","index":0,"delta":{"text_delta":"hello"}}"#,
],
);
let tree = GitTree::from_repo(&fx.path).unwrap();
assert_eq!(tree.agents[0].state, AgentState::Stopped);
}
#[test]
fn agent_with_clean_terminal_classifies_as_quiescent() {
let fx = Fixture::new();
fx.commit_other("README.md", "initial");
fx.build_agent("20260427T160200Z-end0", "ended");
fx.write_response_events(
"20260427T160200Z-end0",
1,
&[
r#"{"type":"message_start","v":1,"role":"assistant"}"#,
r#"{"type":"content_delta","index":0,"delta":{"text_delta":"done"}}"#,
r#"{"type":"finish","reason":"stop"}"#,
r#"{"type":"end"}"#,
],
);
let tree = GitTree::from_repo(&fx.path).unwrap();
assert_eq!(tree.agents[0].state, AgentState::Quiescent);
}
#[test]
fn agent_with_error_terminal_classifies_as_stopped() {
let fx = Fixture::new();
fx.commit_other("README.md", "initial");
fx.build_agent("20260427T160300Z-err0", "errored");
fx.write_response_events(
"20260427T160300Z-err0",
1,
&[
r#"{"type":"message_start","v":1,"role":"assistant"}"#,
r#"{"type":"error","kind":"provider","message":"oops"}"#,
r#"{"type":"end"}"#,
],
);
let tree = GitTree::from_repo(&fx.path).unwrap();
assert_eq!(tree.agents[0].state, AgentState::Stopped);
}