use std::path::PathBuf;
use std::process::Command;
fn vik_bin() -> PathBuf {
PathBuf::from(env!("CARGO_BIN_EXE_vik"))
}
fn fixture_dir(name: &str) -> PathBuf {
PathBuf::from(env!("CARGO_MANIFEST_DIR"))
.join("tests")
.join("fixtures")
.join("workflows")
.join(name)
}
#[test]
fn valid_fixture_exits_zero() {
let workflow = fixture_dir("valid").join("workflow.yml");
let output = Command::new(vik_bin())
.args(["doctor", workflow.to_str().expect("utf-8 path")])
.output()
.expect("spawn vik");
assert!(
output.status.success(),
"stdout: {}\nstderr: {}",
String::from_utf8_lossy(&output.stdout),
String::from_utf8_lossy(&output.stderr),
);
let stdout = String::from_utf8(output.stdout).expect("utf-8 stdout");
assert!(
stdout.contains("Vik doctor shows 0 error(s), 0 warning(s)"),
"got: {stdout}"
);
}
#[test]
fn valid_fixture_json_has_expected_shape() {
let workflow = fixture_dir("valid").join("workflow.yml");
let output = Command::new(vik_bin())
.args(["doctor", "--json", workflow.to_str().expect("utf-8 path")])
.output()
.expect("spawn vik");
assert!(output.status.success());
let stdout = String::from_utf8(output.stdout).expect("utf-8 stdout");
let json: serde_json::Value = serde_json::from_str(&stdout).expect("valid JSON");
assert!(json["errors"].is_array());
assert!(json["warnings"].is_array());
}