use std::process::Command;
type TestResult = Result<(), Box<dyn std::error::Error>>;
const TEST_TOKEN: &str = "phase7-test-token";
const fn prompter_bin() -> &'static str {
env!("CARGO_BIN_EXE_prompter")
}
fn agent_command(args: &[&str]) -> Command {
let mut command = Command::new(prompter_bin());
command.args(args);
command
.env("TFTIO_AGENT_TOKEN", TEST_TOKEN)
.env("TFTIO_AGENT_TOKEN_EXPECTED", TEST_TOKEN);
command
}
#[test]
fn agent_surface_help_lists_only_visible_capabilities() -> TestResult {
let output = agent_command(&["--agent-help"]).output()?;
assert!(
output.status.success(),
"stderr: {}",
String::from_utf8_lossy(&output.stderr)
);
let stdout = String::from_utf8_lossy(&output.stdout);
for capability in [
"render-prompts",
"render-system-base",
"list-profiles",
"tree-profiles",
"validate-profiles",
] {
assert!(stdout.contains(capability), "stdout: {stdout}");
}
for hidden in ["doctor", "license", "version", "completions", "init"] {
assert!(!stdout.contains(hidden), "stdout: {stdout}");
}
Ok(())
}
#[test]
fn agent_surface_skill_renders_render_prompts_contract() -> TestResult {
let output = agent_command(&["--agent-skill", "render-prompts"]).output()?;
assert!(
output.status.success(),
"stderr: {}",
String::from_utf8_lossy(&output.stderr)
);
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(
stdout.contains("capability:\n- render-prompts"),
"stdout: {stdout}"
);
assert!(stdout.contains("commands:\n- run"), "stdout: {stdout}");
for hidden in ["doctor", "license", "version", "completions", "init"] {
assert!(!stdout.contains(hidden), "stdout: {stdout}");
}
Ok(())
}
#[test]
fn agent_surface_hides_privileged_commands() -> TestResult {
for args in [
&["doctor"][..],
&["license"][..],
&["version"][..],
&["completions", "bash"][..],
&["init"][..],
] {
let output = agent_command(args).output()?;
assert!(
!output.status.success(),
"stdout: {}",
String::from_utf8_lossy(&output.stdout)
);
let stderr = String::from_utf8_lossy(&output.stderr);
assert!(
stderr.contains("unrecognized subcommand") || stderr.contains("invalid value"),
"stderr: {stderr}"
);
}
Ok(())
}