use std::path::PathBuf;
use std::process::Command;
fn vik_bin() -> PathBuf {
PathBuf::from(env!("CARGO_BIN_EXE_vik"))
}
fn fixture_workflow() -> PathBuf {
PathBuf::from(env!("CARGO_MANIFEST_DIR"))
.join("tests")
.join("fixtures")
.join("workflows")
.join("valid")
.join("workflow.yml")
}
#[test]
fn status_reports_not_installed_when_no_state_file() {
let workflow = fixture_workflow();
let state_file = workflow.parent().unwrap().join(".vik").join("service").join("state.json");
let _ = std::fs::remove_file(&state_file);
let output = Command::new(vik_bin())
.args(["status", 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("not installed"), "got: {stdout}");
}
#[test]
fn stop_without_state_file_exits_nonzero() {
let workflow = fixture_workflow();
let state_file = workflow.parent().unwrap().join(".vik").join("service").join("state.json");
let _ = std::fs::remove_file(&state_file);
let output = Command::new(vik_bin())
.args(["stop", workflow.to_str().expect("utf-8 path")])
.output()
.expect("spawn vik");
assert!(
!output.status.success(),
"expected non-zero exit; stdout={} stderr={}",
String::from_utf8_lossy(&output.stdout),
String::from_utf8_lossy(&output.stderr),
);
}
#[test]
fn uninstall_without_state_file_is_noop() {
let workflow = fixture_workflow();
let state_file = workflow.parent().unwrap().join(".vik").join("service").join("state.json");
let _ = std::fs::remove_file(&state_file);
let output = Command::new(vik_bin())
.args(["uninstall", 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),
);
}