use std::process::Command;
fn ownserp() -> Command {
Command::new(env!("CARGO_BIN_EXE_ownserp"))
}
#[test]
fn version_prints_the_package_version() {
let output = ownserp().arg("--version").output().expect("run");
assert!(output.status.success());
let text = String::from_utf8(output.stdout).expect("utf8");
assert!(text.contains(env!("CARGO_PKG_VERSION")), "got: {text}");
}
#[test]
fn a_subcommand_accepts_version_too() {
let output = ownserp()
.args(["serve", "--version"])
.output()
.expect("run");
assert!(output.status.success());
}
#[test]
fn help_lists_every_subcommand() {
let output = ownserp().arg("--help").output().expect("run");
assert!(output.status.success());
let text = String::from_utf8(output.stdout).expect("utf8");
for name in ["serve", "doctor", "config", "audit", "completions", "man"] {
assert!(text.contains(name), "{name} is missing from help");
}
}
#[test]
fn completions_are_generated_for_bash() {
let output = ownserp()
.args(["completions", "bash"])
.output()
.expect("run");
assert!(output.status.success());
let text = String::from_utf8(output.stdout).expect("utf8");
assert!(text.contains("ownserp"));
}
#[test]
fn the_manual_page_is_generated() {
let output = ownserp().arg("man").output().expect("run");
assert!(output.status.success());
let text = String::from_utf8(output.stdout).expect("utf8");
assert!(text.contains(".TH"));
}
#[test]
fn an_unknown_flag_is_a_usage_error() {
let output = ownserp().args(["serve", "--bogus"]).output().expect("run");
assert_eq!(output.status.code(), Some(2));
assert!(output.stdout.is_empty());
}
#[test]
fn a_missing_subcommand_is_a_usage_error() {
let output = ownserp().output().expect("run");
assert_eq!(output.status.code(), Some(2));
}
#[test]
fn conflicting_transport_flags_are_refused() {
let output = ownserp()
.args(["serve", "--http", "--no-http"])
.output()
.expect("run");
assert_eq!(output.status.code(), Some(2));
}