use std::process::Command;
fn version_token() -> String {
let out = Command::new(env!("CARGO_BIN_EXE_teamctl"))
.arg("--version")
.output()
.expect("run `teamctl --version`");
assert!(out.status.success(), "`--version` exited non-zero");
let stdout = String::from_utf8(out.stdout).expect("utf8 --version output");
stdout
.trim()
.strip_prefix("teamctl ")
.expect("`teamctl <version>` shape")
.to_string()
}
#[test]
fn version_has_no_v_prefix() {
let v = version_token();
assert!(
!v.starts_with('v'),
"the leading `v` must be stripped so dev/release formats match: {v}"
);
}
#[test]
fn version_base_is_dotted_numeric_semver() {
let v = version_token();
let base = v.split('-').next().expect("non-empty version");
let parts: Vec<&str> = base.split('.').collect();
assert_eq!(
parts.len(),
3,
"version base must be MAJOR.MINOR.PATCH: {v}"
);
assert!(
parts
.iter()
.all(|p| !p.is_empty() && p.chars().all(|c| c.is_ascii_digit())),
"version base components must be numeric: {v}"
);
}