use super::fixture::Fixture;
use super::mtime;
use crate::git_tree::{Agent, GitTree};
fn agent_of(tree: &GitTree, id: &str) -> Agent {
tree.agents
.iter()
.find(|a| a.agent_id == id)
.expect("the enumerated agent")
.clone()
}
#[test]
fn the_model_call_start_is_the_latest_steps_request_stamp() {
let fx = Fixture::new();
let id = "20260802T120000Z-call";
fx.build_agent(id, "first ask");
let latest = fx.write_request(id, 2, "second ask");
let agent = agent_of(&GitTree::from_repo(&fx.path).unwrap(), id);
assert_eq!(agent.call_start_unix, Some(mtime(&latest)));
}
#[test]
fn a_latest_step_with_no_request_yet_has_no_start() {
let fx = Fixture::new();
let id = "20260802T120100Z-mid";
fx.build_agent(id, "first ask");
fx.write_response_events(id, 2, &[r#"{"type":"message_start"}"#]);
let agent = agent_of(&GitTree::from_repo(&fx.path).unwrap(), id);
assert_eq!(agent.call_start_unix, None);
}
#[test]
fn an_agent_with_no_step_tree_has_no_start() {
let fx = Fixture::new();
let id = "20260802T120200Z-fresh";
fx.build_agent(id, "dispatch a child");
let child = format!("{id}-k-1");
fx.build_child(id, &child);
let tree = GitTree::from_repo(&fx.path).unwrap();
assert_eq!(agent_of(&tree, &child).call_start_unix, None);
assert!(agent_of(&tree, id).call_start_unix.is_some());
}
#[test]
fn a_tool_calls_start_is_its_own_input_records_stamp() {
let fx = Fixture::new();
let id = "20260802T120300Z-tools";
fx.build_agent(id, "run two tools");
let done = fx.write_tool_call(id, 1, "toolu_done", Some(b"{}"));
let live = fx.write_tool_call(id, 1, "toolu_live", None);
let agent = agent_of(&GitTree::from_repo(&fx.path).unwrap(), id);
let calls = &agent.tool_calls;
assert_eq!(calls.len(), 2);
assert_eq!(calls[0].start_unix, Some(mtime(&done)));
assert_eq!(calls[1].start_unix, Some(mtime(&live)));
}