use super::super::governing;
use crate::boundary::tests::{agent, snapshot};
use crate::git_tree::tests::fixture::Fixture;
use crate::git_tree::{AgentState, GitTree};
const AGENT: &str = "r1";
fn world() -> (Fixture, crate::app::Snapshot) {
let fx = Fixture::new();
fx.agent_off(AGENT, "config/default");
let tip = GitTree::from_repo(&fx.path)
.unwrap()
.agents
.into_iter()
.find(|a| a.agent_id == AGENT)
.unwrap()
.tip_oid;
let mut row = agent(AGENT, AgentState::Quiescent, 100);
row.tip_oid = tip;
let snap = snapshot(&fx.path, "alba", vec![row], vec![]);
(fx, snap)
}
#[test]
fn an_unnamed_commit_is_the_agents_own_tip() {
let (fx, snap) = world();
let gov = governing(&snap, &fx.path, AGENT, None).expect("the fork point is derivable");
assert_eq!(gov.followed_lineage().as_deref(), Some("default"));
assert!(gov.files.contains(&"version".to_owned()));
}
#[test]
fn a_named_commit_is_the_one_the_walk_starts_from() {
let (fx, snap) = world();
let at_fork = governing(&snap, &fx.path, AGENT, None)
.expect("the fork point")
.oid;
fx.commit_other("workflow.yaml", "events: {}\n");
let head = crate::config_edit::branch::config_branches(&fx.path)
.unwrap()
.into_iter()
.find(|b| b.name == "default")
.unwrap()
.tip_oid;
let advanced = governing(&snap, &fx.path, AGENT, None).expect("still derivable");
assert_ne!(advanced.oid, at_fork, "the lineage moved and it followed");
assert_eq!(advanced.oid, head);
assert!(advanced.files.contains(&"workflow.yaml".to_owned()));
let pinned = governing(&snap, &fx.path, AGENT, Some(&at_fork)).expect("derivable at the fork");
assert_eq!(pinned.oid, head);
}
#[test]
fn an_agent_the_snapshot_does_not_carry_refuses_rather_than_answering_absent() {
let (fx, snap) = world();
let said = governing(&snap, &fx.path, "unheard-of", None).expect_err("no tip, no answer");
assert!(!said.is_empty(), "the refusal carries git's own words");
}