use std::path::Path;
use super::{check_agent_reachability, verdict};
use crate::core::doctor::CheckStatus;
use crate::core::model_inject::relocated_setting_source_tiers;
use crate::core::paths::FrameworkPaths;
#[test]
fn ok_when_the_deploy_tier_is_loaded() {
let check = verdict(
Path::new("/tm/claude-config/agents"),
"user",
&["user", "project", "local"],
);
assert_eq!(check.status, CheckStatus::Ok);
assert_eq!(check.name, "agent_reachability");
}
#[test]
fn fails_when_the_spawn_flag_drops_the_deploy_tier() {
let check = verdict(
Path::new("/tm/claude-config/agents"),
"user",
&["project", "local"],
);
assert_eq!(
check.status,
CheckStatus::Fail,
"a deploy tier the spawn never loads must FAIL, not warn: {}",
check.message
);
}
#[test]
fn failure_names_the_directory_the_tier_and_the_flag() {
let check = verdict(
Path::new("/tm/claude-config/agents"),
"user",
&["project", "local"],
);
assert!(
check.message.contains("/tm/claude-config/agents"),
"message must name the deploy directory: {}",
check.message
);
assert!(
check.message.contains("`user` tier"),
"message must name the unreachable tier: {}",
check.message
);
assert!(
check.message.contains("--setting-sources"),
"message must name the spawn flag: {}",
check.message
);
assert!(
check.message.contains("#4451"),
"message must cite the issue: {}",
check.message
);
}
#[test]
fn failure_is_a_hard_fail_not_a_warn() {
let check = verdict(Path::new("/somewhere/agents"), "user", &[]);
assert_ne!(check.status, CheckStatus::Warn);
assert_eq!(check.status, CheckStatus::Fail);
}
#[test]
fn production_deploy_tier_is_reachable() {
let paths = FrameworkPaths::under("/base");
let check = check_agent_reachability(&paths, Some(Path::new("/base/workspace")));
assert_eq!(
check.status,
CheckStatus::Ok,
"the bundled roster deploys into a tier managed sessions do not load \
(loaded: {:?}): {}",
relocated_setting_source_tiers(),
check.message
);
}
#[test]
fn ok_for_a_project_tier_deploy_destination() {
let mut paths = FrameworkPaths::under("/base");
let workspace = Path::new("/base/workspace");
paths.agent_deploy = workspace.join("agents");
let check = check_agent_reachability(&paths, Some(workspace));
assert_eq!(check.status, CheckStatus::Ok, "{}", check.message);
assert!(
check.message.contains("`project` tier"),
"expected the project tier to be named: {}",
check.message
);
}
#[test]
fn resolves_a_tier_without_a_project_directory() {
let paths = FrameworkPaths::under("/base");
let check = check_agent_reachability(&paths, None);
assert_eq!(check.status, CheckStatus::Ok, "{}", check.message);
assert!(check.message.contains("`user` tier"), "{}", check.message);
}