use clap::Parser;
use crate::cli::{Cli, Command};
use crate::commands::install::{deploy_report_lines, reset_report_lines};
#[test]
fn cli_parses_install_reset_agents_all() {
let cli = Cli::try_parse_from(["trusty-mpm", "install", "--reset-agents"]).unwrap();
match cli.command.unwrap() {
Command::Install { reset_agents, .. } => {
assert_eq!(reset_agents, Some(vec![]));
}
other => panic!("expected Install, got {other:?}"),
}
}
#[test]
fn cli_parses_install_reset_agents_filtered() {
let cli =
Cli::try_parse_from(["trusty-mpm", "install", "--reset-agents", "engineer,qa"]).unwrap();
match cli.command.unwrap() {
Command::Install { reset_agents, .. } => {
assert_eq!(
reset_agents,
Some(vec!["engineer".to_string(), "qa".to_string()])
);
}
other => panic!("expected Install, got {other:?}"),
}
}
#[test]
fn deploy_report_lines_flags_adopted_and_untracked_modified() {
let mut result = trusty_mpm::core::agent_deployer::DeployResult::default();
result.adopted.push("adopted-agent.md".to_string());
result.skipped.push("stale-agent.md".to_string());
result.untracked_modified.push("stale-agent.md".to_string());
result.skipped.push("edited-agent.md".to_string());
let dir = tempfile::tempdir().unwrap();
let lines = deploy_report_lines(&result, dir.path());
assert!(
lines
.iter()
.any(|l| l.contains("adopted-agent.md") && l.contains("adopted")),
"lines = {lines:?}"
);
assert!(
lines
.iter()
.any(|l| l.contains("stale-agent.md") && l.contains("differs from bundle")),
"lines = {lines:?}"
);
assert!(
lines
.iter()
.any(|l| l.contains("edited-agent.md") && l.contains("user-modified")),
"lines = {lines:?}"
);
assert!(
lines
.iter()
.any(|l| l.contains("1 untracked agent file") && l.contains("--reset-agents")),
"lines = {lines:?}"
);
}
#[test]
fn reset_report_lines_summarizes_counts() {
let result = trusty_mpm::core::agent_reset::ResetResult {
recomposed: vec!["a.md".to_string(), "b.md".to_string()],
adopted: vec!["c.md".to_string()],
backed_up: vec!["b.md".to_string()],
not_found: vec!["missing-agent".to_string()],
deselected: vec![],
retracted: vec![],
};
let lines = reset_report_lines(&result);
assert!(lines.iter().any(|l| l.contains("a.md (recomposed)")));
assert!(
lines
.iter()
.any(|l| l.contains("b.md (recomposed, backed up)"))
);
assert!(lines.iter().any(|l| l.contains("c.md (adopted)")));
assert!(lines.iter().any(|l| l.contains("missing-agent")));
assert!(
lines.iter().any(|l| l.contains("2 recomposed")
&& l.contains("1 adopted")
&& l.contains("1 backed up")
&& l.contains("1 not found")
&& l.contains("0 deselected")),
"lines = {lines:?}"
);
}
#[test]
fn reset_report_lines_shows_retracted() {
let result = trusty_mpm::core::agent_reset::ResetResult {
recomposed: vec![],
adopted: vec![],
backed_up: vec![],
not_found: vec![],
deselected: vec![],
retracted: vec!["engineer.md".to_string(), "qa.md".to_string()],
};
let lines = reset_report_lines(&result);
assert!(
lines
.iter()
.any(|l| l.contains("engineer.md") && l.contains("retracted")),
"lines = {lines:?}"
);
assert!(
lines.iter().any(|l| l.contains("2 retracted")),
"the summary must count retractions: lines = {lines:?}"
);
}
#[test]
fn reset_report_lines_shows_deselected() {
let result = trusty_mpm::core::agent_reset::ResetResult {
recomposed: vec!["base-agent.md".to_string()],
adopted: vec![],
backed_up: vec![],
not_found: vec![],
deselected: vec!["engineer".to_string()],
retracted: vec![],
};
let lines = reset_report_lines(&result);
assert!(
lines
.iter()
.any(|l| l.contains("engineer") && l.contains("excluded")),
"lines = {lines:?}"
);
assert!(
lines.iter().any(|l| l.contains("1 deselected")),
"lines = {lines:?}"
);
}
#[test]
fn cli_parses_install_reset_agents_workspaces() {
let cli = Cli::try_parse_from([
"trusty-mpm",
"install",
"--reset-agents",
"--reset-agents-workspaces",
])
.unwrap();
match cli.command.unwrap() {
Command::Install {
reset_agents,
reset_agents_workspaces,
..
} => {
assert_eq!(reset_agents, Some(vec![]));
assert!(reset_agents_workspaces);
}
other => panic!("expected Install, got {other:?}"),
}
}
#[test]
fn cli_rejects_reset_agents_workspaces_without_reset_agents() {
let result = Cli::try_parse_from(["trusty-mpm", "install", "--reset-agents-workspaces"]);
assert!(result.is_err());
}