use assert_cmd::Command;
fn cmd() -> Command {
Command::cargo_bin("opencode-ralph-loop-cli").unwrap()
}
#[test]
fn scenario_10_doctor_json_output_structured() {
let output = cmd().args(["doctor", "--output", "json"]).output().unwrap();
let json: serde_json::Value = serde_json::from_slice(&output.stdout).unwrap();
assert!(json["status"].is_string(), "status missing in JSON: {json}");
assert!(
json["dependencies"].is_array(),
"dependencies missing: {json}"
);
let deps = json["dependencies"].as_array().unwrap();
assert!(!deps.is_empty(), "dependency list is empty");
for dep in deps {
assert!(dep["name"].is_string());
assert!(dep["available"].is_boolean());
}
}
#[test]
fn scenario_10_doctor_reports_bun_and_node() {
let output = cmd().args(["doctor", "--output", "json"]).output().unwrap();
let json: serde_json::Value = serde_json::from_slice(&output.stdout).unwrap();
let deps = json["dependencies"].as_array().unwrap();
let names: Vec<&str> = deps.iter().map(|d| d["name"].as_str().unwrap()).collect();
assert!(names.contains(&"bun"), "bun should be listed");
assert!(names.contains(&"node"), "node should be listed");
assert!(names.contains(&"opencode"), "opencode should be listed");
}