use assert_cmd::prelude::*;
use predicates::prelude::*;
use std::process::Command;
const SUBCOMMANDS: &[&str] = &[
"version", "identity", "admin", "ice", "snapshot", "audit", "log", "failures", "cap", "peer",
"daemon", "netdb",
];
#[test]
fn help_succeeds() {
Command::cargo_bin("net-mesh")
.unwrap()
.arg("--help")
.assert()
.success()
.stdout(predicate::str::contains("net"));
}
#[test]
fn version_flag_succeeds() {
Command::cargo_bin("net-mesh")
.unwrap()
.arg("--version")
.assert()
.success()
.stdout(predicate::str::contains(env!("CARGO_PKG_VERSION")));
}
#[test]
fn every_top_level_subcommand_has_help() {
for sub in SUBCOMMANDS {
let assert = Command::cargo_bin("net-mesh")
.unwrap()
.args([sub, "--help"])
.assert();
assert.success().stdout(predicate::str::is_empty().not());
}
}
#[test]
fn version_subcommand_emits_json() {
let output = Command::cargo_bin("net-mesh")
.unwrap()
.arg("version")
.output()
.unwrap();
assert!(output.status.success(), "version failed: {output:?}");
let stdout = String::from_utf8(output.stdout).unwrap();
let value: serde_json::Value =
serde_json::from_str(&stdout).expect("version output should be valid JSON");
assert!(value.get("cli_version").is_some(), "missing cli_version");
assert!(value.get("sdk_version").is_some(), "missing sdk_version");
}