use super::*;
use trusty_mpm::core::skill_deployer::deploy_skills;
fn hermetic_paths(base: &Path) -> FrameworkPaths {
let mut paths = FrameworkPaths::under(base);
paths.trusty_mpm_root = None;
paths
}
fn bundle(paths: &FrameworkPaths, stem: &str, body: &str) {
let dir = paths.skill_source_dir();
std::fs::create_dir_all(&dir).unwrap();
std::fs::write(dir.join(format!("{stem}.md")), body).unwrap();
}
fn stage_untracked(dir: &Path, stem: &str, body: &str) {
let skill_dir = dir.join(stem);
std::fs::create_dir_all(&skill_dir).unwrap();
std::fs::write(skill_dir.join("SKILL.md"), body).unwrap();
}
#[test]
fn report_lines_name_the_tier_and_the_skill() {
let base = tempfile::TempDir::new().unwrap();
let paths = hermetic_paths(base.path());
bundle(&paths, "tm-workflow", "current text");
let tier = paths.claude_skills_dir();
std::fs::create_dir_all(&tier).unwrap();
stage_untracked(&tier, "tm-workflow", "stale text");
let lines = unmanaged_report_lines(&paths, None);
assert_eq!(lines.len(), 1, "{lines:?}");
assert!(
lines[0].starts_with("! tm-workflow (untracked at "),
"{lines:?}"
);
assert!(lines[0].contains(&tier.display().to_string()), "{lines:?}");
assert!(lines[0].contains("--reconcile-skills"), "{lines:?}");
}
#[test]
fn report_lines_are_empty_when_every_skill_is_tracked() {
let base = tempfile::TempDir::new().unwrap();
let paths = hermetic_paths(base.path());
bundle(&paths, "tm-workflow", "current text");
deploy_skills(&paths.skill_source_dir(), &paths.claude_skills_dir()).unwrap();
assert!(unmanaged_report_lines(&paths, None).is_empty());
}
#[test]
fn report_lines_ignore_an_operator_skill() {
let base = tempfile::TempDir::new().unwrap();
let paths = hermetic_paths(base.path());
bundle(&paths, "tm-workflow", "current text");
let tier = paths.claude_skills_dir();
std::fs::create_dir_all(&tier).unwrap();
stage_untracked(&tier, "my-own-skill", "mine");
assert!(unmanaged_report_lines(&paths, None).is_empty());
}
#[test]
fn backup_root_is_timestamped_under_the_framework_root() {
let base = tempfile::TempDir::new().unwrap();
let paths = hermetic_paths(base.path());
let root = backup_root(&paths);
assert_eq!(root.parent().unwrap(), paths.root);
let name = root.file_name().unwrap().to_str().unwrap();
assert!(name.starts_with(RECONCILE_BACKUP_PREFIX), "{name}");
assert_eq!(name.len(), RECONCILE_BACKUP_PREFIX.len() + 14, "{name}");
}