#![cfg(unix)]
use std::process::Command;
use tempfile::TempDir;
#[test]
fn hooks_install_path_shim_dry_run_does_not_create_symlink() {
let bin = env!("CARGO_BIN_EXE_git-prism");
let home = TempDir::new().unwrap();
let out = Command::new(bin)
.env("HOME", home.path())
.args(["hooks", "install", "--path-shim", "--dry-run"])
.output()
.unwrap();
assert_eq!(
out.status.code(),
Some(0),
"hooks install --path-shim --dry-run must exit 0"
);
let stdout = String::from_utf8_lossy(&out.stdout);
let stderr = String::from_utf8_lossy(&out.stderr);
let combined = format!("{}{}", stdout, stderr);
assert!(
combined.contains("dry-run"),
"output must contain 'dry-run' confirmation; got stdout: {}\nstderr: {}",
stdout,
stderr
);
let symlink_path = home.path().join(".local/share/git-prism/bin/git");
assert!(
!symlink_path.exists(),
"symlink must not exist after --dry-run; checked at {}",
symlink_path.display()
);
}
#[test]
fn hooks_install_path_shim_without_dry_run_creates_symlink() {
let bin = env!("CARGO_BIN_EXE_git-prism");
let home = TempDir::new().unwrap();
let out = Command::new(bin)
.env("HOME", home.path())
.args(["hooks", "install", "--path-shim"])
.output()
.unwrap();
assert_eq!(
out.status.code(),
Some(0),
"hooks install --path-shim must exit 0"
);
let symlink_path = home.path().join(".local/share/git-prism/bin/git");
assert!(
symlink_path.exists(),
"symlink must exist after install without --dry-run; checked at {}",
symlink_path.display()
);
assert!(
symlink_path.is_symlink(),
"path must be a symlink; checked at {}",
symlink_path.display()
);
}