mod support;
use support::git_repo::GitRepo;
use support::inspect::{Inspector, WorktreeCapture, capture};
#[test]
fn identity_reports_clone_placement_and_repo_basename() {
let repo = GitRepo::new();
repo.write("src/lib.rs", "pub fn v() -> u32 { 1 }\n");
repo.commit_all("base");
repo.write("src/lib.rs", "pub fn v() -> u32 { 2 }\n");
capture(repo.path());
let inspector = Inspector::spawn(repo.path());
let id = inspector.get_json("/api/identity");
assert_eq!(id["schema"], "pointbreak.inspect-identity");
let expected = repo.path().file_name().unwrap().to_str().unwrap();
assert_eq!(id["repository"], expected);
assert_eq!(id["placement"]["tier"], "clone");
assert_eq!(id["placement"]["label"], "clone store");
assert!(id.get("family").is_none() || id["family"].is_null());
assert!(id.get("worktree").is_none() || id["worktree"].is_null());
}
#[test]
fn identity_body_never_leaks_an_absolute_path() {
let repo = GitRepo::new();
repo.write("src/lib.rs", "pub fn v() -> u32 { 1 }\n");
repo.commit_all("base");
capture(repo.path());
let inspector = Inspector::spawn(repo.path());
let raw = inspector.get_text("/api/identity");
let abs = repo.path().to_str().unwrap();
assert!(
!raw.contains(abs),
"identity body leaked an absolute path: {raw}"
);
}
#[test]
fn identity_distinguishes_repository_from_a_linked_worktree() {
let capture = WorktreeCapture::on_branch("feat-foo", "feat/foo");
let inspector = Inspector::spawn(&capture.worktree);
let id = inspector.get_json("/api/identity");
let main_basename = capture._main.path().file_name().unwrap().to_str().unwrap();
assert_eq!(id["repository"], main_basename);
assert_eq!(id["worktree"], "feat-foo");
assert_eq!(id["placement"]["tier"], "clone");
}