Skip to main content

apm/cmd/
instructions.rs

1use anyhow::Result;
2
3const PREAMBLE: &str = "apm \u{2014} Agent Project Manager\n\
4Run `apm <command> --help` for full flag details on any command.\n";
5
6pub fn run(cli_cmd: clap::Command) -> Result<()> {
7    print!("{}", render(cli_cmd));
8    Ok(())
9}
10
11fn render(cli_cmd: clap::Command) -> String {
12    let mut out = String::from(PREAMBLE);
13    out.push('\n');
14    out.push_str(&super::help::render_commands(&cli_cmd));
15    out.push('\n');
16    out
17}
18
19#[cfg(test)]
20mod tests {
21    use super::*;
22
23    fn make_test_cmd() -> clap::Command {
24        clap::Command::new("testapp")
25            .subcommand(clap::Command::new("foo").about("Do foo things"))
26            .subcommand(clap::Command::new("bar").about("Do bar things"))
27    }
28
29    #[test]
30    fn run_returns_ok() {
31        let result = run(make_test_cmd());
32        assert!(result.is_ok());
33    }
34
35    #[test]
36    fn render_includes_preamble() {
37        let out = render(make_test_cmd());
38        assert!(
39            out.contains("apm \u{2014} Agent Project Manager"),
40            "preamble missing in:\n{out}"
41        );
42    }
43
44    #[test]
45    fn render_includes_command_name() {
46        let out = render(make_test_cmd());
47        assert!(out.contains("foo"), "command name 'foo' missing in:\n{out}");
48    }
49
50    #[test]
51    fn render_no_ansi() {
52        let out = render(make_test_cmd());
53        assert!(!out.contains('\x1b'), "ANSI escape code found in:\n{out}");
54    }
55}