use std::path::PathBuf;
use std::process::Command;
fn fixtures() -> PathBuf {
PathBuf::from(env!("CARGO_MANIFEST_DIR"))
.join("../harness/tests/fixtures")
.canonicalize()
.unwrap()
}
fn command() -> Command {
let fixtures = fixtures();
let mut command = Command::new(env!("CARGO_BIN_EXE_supercode"));
command
.env("HERMES_HOME", fixtures.join("hermes_home"))
.env("OPENCLAW_STATE_DIR", fixtures.join("openclaw_home"));
command
}
#[test]
fn routes_list_json_is_the_rpc_result_verbatim() {
let output = command()
.args(["routes", "list", "--json"])
.output()
.unwrap();
assert!(
output.status.success(),
"{}",
String::from_utf8_lossy(&output.stderr)
);
let value: serde_json::Value = serde_json::from_slice(&output.stdout).unwrap();
assert_eq!(value["schema"], "supercode.routes.v1");
let routes = value["routes"].as_array().unwrap();
assert!(routes
.iter()
.any(|r| r["harness"] == "hermes" && r["target"] == "coder" && r["specificity"] == 4));
assert!(routes
.iter()
.any(|r| r["harness"] == "openclaw" && r["target"] == "design"));
assert_eq!(routes.iter().filter(|r| r["default"] == true).count(), 2);
for secret in ["FAKE-TOKEN-DO-NOT-EMIT", "FAKE-API-SERVER-KEY-DO-NOT-EMIT"] {
assert!(!String::from_utf8_lossy(&output.stdout).contains(secret));
}
}
#[test]
fn routes_list_table_and_filters() {
let output = command()
.args([
"routes",
"list",
"--harness",
"hermes",
"--profile",
"coder",
])
.output()
.unwrap();
assert!(output.status.success());
let text = String::from_utf8_lossy(&output.stdout);
assert!(
text.contains("coder") && text.contains("slack") && text.contains("chat=C0FIXTURE"),
"{text}"
);
assert!(!text.contains("(default)"), "{text}");
}
#[test]
fn a_core_harness_is_refused_not_emptied() {
let output = command()
.args(["routes", "list", "--harness", "codex"])
.output()
.unwrap();
assert!(!output.status.success());
assert!(String::from_utf8_lossy(&output.stderr).contains("routing concept"));
}