use std::path::{Path, PathBuf};
use std::process::{Command, Output};
fn bin() -> PathBuf {
PathBuf::from(env!("CARGO_BIN_EXE_supercode"))
}
fn fresh_dir(tag: &str) -> PathBuf {
let nanos = std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)
.unwrap()
.as_nanos();
let dir = std::env::temp_dir().join(format!(
"supercode-mcpgate-{tag}-{}-{nanos}",
std::process::id()
));
std::fs::create_dir_all(&dir).unwrap();
dir
}
fn run(supercode_home: &Path, project_dir: &Path) -> Output {
Command::new(bin())
.current_dir(project_dir)
.env("SUPERCODE_HOME", supercode_home)
.env("HOME", supercode_home)
.env("OPENROUTER_API_KEY", "dummy-key-never-valid")
.args(["run", "hi", "--dangerous"])
.stdin(std::process::Stdio::null())
.stdout(std::process::Stdio::piped())
.stderr(std::process::Stdio::piped())
.output()
.expect("failed to spawn the supercode binary")
}
fn stderr(out: &Output) -> String {
String::from_utf8_lossy(&out.stderr).into_owned()
}
const PROBE_SERVER_TOML: &str = r#"
[capabilities.mcp.servers.probe]
command = "false"
args = []
"#;
#[test]
fn module_off_by_default_never_attempts_a_capabilities_mcp_servers_entry() {
let home = fresh_dir("off");
let project = fresh_dir("off-project");
std::fs::write(
home.join("config.toml"),
format!("schema_version = 1\n[capabilities.mcp]\nenabled = true\n{PROBE_SERVER_TOML}"),
)
.unwrap();
let out = run(&home, &project);
let err = stderr(&out);
assert!(
!err.contains("probe"),
"capabilities.mcp.servers.probe must never be attempted with module_registry off: {err}"
);
std::fs::remove_dir_all(&home).ok();
std::fs::remove_dir_all(&project).ok();
}
#[test]
fn module_off_even_with_mcp_enabled_true_alone_still_skips_it() {
let home = fresh_dir("half-on");
let project = fresh_dir("half-on-project");
std::fs::write(
home.join("config.toml"),
format!("schema_version = 1\n[capabilities.mcp]\nenabled = true\n{PROBE_SERVER_TOML}"),
)
.unwrap();
let out = run(&home, &project);
assert!(!stderr(&out).contains("probe"));
std::fs::remove_dir_all(&home).ok();
std::fs::remove_dir_all(&project).ok();
}
#[test]
fn module_fully_on_attempts_the_capabilities_mcp_servers_entry() {
let home = fresh_dir("on");
let project = fresh_dir("on-project");
std::fs::write(
home.join("config.toml"),
format!(
"schema_version = 1\n[experimental]\nmodule_registry = true\n[capabilities.mcp]\nenabled = true\n{PROBE_SERVER_TOML}"
),
)
.unwrap();
let out = run(&home, &project);
let err = stderr(&out);
assert!(
err.contains("probe"),
"with module_registry AND capabilities.mcp.enabled both on, the \
capabilities.mcp.servers entry must be attempted: {err}"
);
std::fs::remove_dir_all(&home).ok();
std::fs::remove_dir_all(&project).ok();
}