use std::process::Command;
use tempfile::TempDir;
fn recon() -> Command {
let mut c = Command::new(env!("CARGO_BIN_EXE_recon"));
c.env_remove("RECON_CONFIG");
c.env_remove("RECON_SYSTEM_CONFIG");
c.env_remove("HOMEBREW_PREFIX");
c
}
#[test]
fn show_config_paths_with_user_override() {
let dir = TempDir::new().unwrap();
let cfg = dir.path().join("config.toml");
std::fs::write(&cfg, "").unwrap();
let out = recon()
.env("RECON_CONFIG", &cfg)
.arg("--show-config-paths")
.output()
.unwrap();
let stdout = String::from_utf8_lossy(&out.stdout);
assert!(out.status.success(), "stderr: {}", String::from_utf8_lossy(&out.stderr));
assert!(
stdout.contains(&format!("user: {}", cfg.display())),
"stdout:\n{stdout}",
);
}
#[test]
fn show_config_paths_with_no_user_config_flag_skips() {
let dir = TempDir::new().unwrap();
let cfg = dir.path().join("config.toml");
std::fs::write(&cfg, "").unwrap();
let out = recon()
.env("RECON_CONFIG", &cfg)
.args(["--show-config-paths", "--no-user-config"])
.output()
.unwrap();
let stdout = String::from_utf8_lossy(&out.stdout);
assert!(stdout.contains("user: (skipped)"), "stdout:\n{stdout}");
}
#[test]
fn show_config_paths_with_disable_skips_both() {
let out = recon()
.args(["--show-config-paths", "--disable"])
.output()
.unwrap();
let stdout = String::from_utf8_lossy(&out.stdout);
assert!(stdout.contains("system: (skipped)"), "stdout:\n{stdout}");
assert!(stdout.contains("user: (skipped)"), "stdout:\n{stdout}");
}
#[test]
fn gh_accounts_in_user_config_is_reachable_via_show_paths() {
let dir = TempDir::new().unwrap();
let cfg = dir.path().join("config.toml");
std::fs::write(
&cfg,
r#"[gh.accounts]
"e2e@test.example" = "e2e-handle"
"#,
)
.unwrap();
let out = recon()
.env("RECON_CONFIG", &cfg)
.arg("--show-config-paths")
.output()
.unwrap();
assert!(out.status.success(), "stderr: {}", String::from_utf8_lossy(&out.stderr));
let stdout = String::from_utf8_lossy(&out.stdout);
assert!(
stdout.contains(&format!("user: {}", cfg.display())),
"stdout:\n{stdout}",
);
}