use std::process::Command;
use assert_cmd::prelude::*;
fn podbox() -> Command {
Command::cargo_bin("podbox").unwrap()
}
#[test]
fn help_orders_daily_path_first_and_hides_internals() {
let out = podbox().args(["--help"]).output().unwrap();
assert!(out.status.success());
let stdout = String::from_utf8_lossy(&out.stdout);
let commands_section = stdout
.split("Commands:")
.nth(1)
.and_then(|s| s.split("\n\n").next())
.unwrap_or_default();
assert!(
!commands_section.contains("serve"),
"serve should be hidden from default help"
);
assert!(
!commands_section.contains("compositor"),
"compositor should be hidden from default help"
);
let pos = |name: &str| stdout.find(&format!("\n {name} ")).expect(name);
assert!(pos("create") < pos("enter"));
assert!(pos("enter") < pos("exec"));
assert!(pos("exec") < pos("start"));
assert!(pos("start") < pos("list"));
assert!(pos("list") < pos("build"));
assert!(pos("build") < pos("logs"));
assert!(pos("clone") < pos("remove"));
assert!(pos("remove") < pos("use"));
}
#[test]
fn help_advertises_visible_aliases() {
let out = podbox().args(["--help"]).output().unwrap();
let stdout = String::from_utf8_lossy(&out.stdout);
assert!(stdout.contains("[aliases: ls]"), "list alias");
assert!(stdout.contains("[aliases: rm]"), "remove alias");
assert!(stdout.contains("[aliases: shell]"), "enter alias");
}
#[test]
fn help_shows_workflow_hints() {
let out = podbox().args(["--help"]).output().unwrap();
let stdout = String::from_utf8_lossy(&out.stdout);
assert!(stdout.contains("Common workflow:"));
assert!(stdout.contains("podbox enter"));
}
#[test]
fn shell_alias_resolves_to_enter() {
let out = podbox().args(["shell", "--help"]).output().unwrap();
assert!(out.status.success());
let stdout = String::from_utf8_lossy(&out.stdout);
assert!(
stdout.contains("Open an interactive shell in the container"),
"shell alias should resolve to enter"
);
}
#[test]
fn rm_alias_resolves_to_remove() {
let out = podbox().args(["rm", "--help"]).output().unwrap();
assert!(out.status.success());
let stdout = String::from_utf8_lossy(&out.stdout);
assert!(stdout.contains("Remove the container"));
}