use super::super::{AGENT, BALL, CONV, NAME, named_agent, snap, trail};
use super::Lab;
use crate::science::Outcome;
use crate::workdiff::{Change, tests::Project};
#[test]
fn an_unreadable_project_is_pending_with_nothing_named() {
let lab = Lab::new();
let plain = lab.ws.join("not-a-repo");
std::fs::create_dir_all(&plain).unwrap();
let snap = snap(&lab.ws, &plain, vec![], vec![]);
let rows = lab.project_at(&snap, &[]);
assert_eq!(rows.len(), 1);
assert_eq!(rows[0].diff.change, Change::Unreadable);
assert_eq!(rows[0].diff.range(), None);
assert_eq!(rows[0].base, None, "no pair, so no commit to name");
assert_eq!(rows[0].outcome, Outcome::Pending);
}
#[test]
fn ends_with_no_shared_ancestor_have_no_base() {
let project = Project::new();
let source = balls::delivery_path::work_branch(BALL);
crate::git_tree::tests::git::run_git(&project.path, &["checkout", "-q", "--orphan", &source]);
project.commit("src/b.rs", "fn b() {}\n");
project.checkout(crate::workdiff::tests::MAIN);
let lab = Lab::over(project);
let snap = snap(&lab.ws, &lab.project.path, vec![], vec![]);
let rows = lab.project_at(&snap, &[]);
assert!(
matches!(rows[0].diff.change, Change::Diff { .. }),
"{rows:?}"
);
assert_eq!(rows[0].base, None);
}
#[test]
fn no_obligation_projects_no_rows() {
let lab = Lab::new();
let mut snap = snap(&lab.ws, &lab.project.path, vec![], vec![]);
snap.balls_by_project.clear();
assert!(lab.project_at(&snap, &[]).is_empty());
}
#[test]
fn an_unresolvable_project_binds_nothing() {
let lab = Lab::new();
let claim = lab.claim(None);
let entries = trail(&lab.ws, &lab.project.path, &[(CONV, &claim)]);
let mut snap = snap(&lab.ws, &lab.project.path, vec![named_agent()], vec![]);
snap.projects.clear();
let rows = lab.project_at(&snap, &entries);
assert_eq!(rows.len(), 1);
assert_eq!(rows[0].conversation, None);
}
#[test]
fn the_claimant_disambiguated_leaf_binds() {
let lab = Lab::new();
let claim = lab.claim(Some(NAME));
let entries = trail(&lab.ws, &lab.project.path, &[(CONV, &claim)]);
let snap = snap(&lab.ws, &lab.project.path, vec![named_agent()], vec![]);
super::super::worktree(&lab.ws, AGENT, "either leaf", &[]);
let rows = lab.project_at(&snap, &entries);
assert_eq!(rows[0].conversation.as_deref(), Some(AGENT));
}