add purge command

This commit is contained in:
atagen 2026-05-24 18:15:32 +10:00
parent 4a7febee6c
commit 2682ed958b
6 changed files with 97 additions and 4 deletions

View file

@ -665,6 +665,47 @@ fn flag_demo_cache(name: &str, flags: &[&str]) -> std::path::PathBuf {
cache_dir
}
#[test]
fn purge_clears_user_cache_but_not_system_dirs() {
let root = unique_temp_dir("inshellah-purge");
let user_dir = root.join("cache");
let system_dir = root.join("system");
fs::create_dir_all(&user_dir).expect("user dir");
fs::create_dir_all(&system_dir).expect("system dir");
let result = ManpageResult {
entries: Vec::new(),
subcommands: Vec::new(),
positionals: Vec::new(),
description: String::new(),
};
write_result(&user_dir, "usercmd", "help", &result).expect("user cache");
write_result(&system_dir, "syscmd", "manpage", &result).expect("system cache");
// a non-cache file in the user dir must survive the purge.
fs::write(user_dir.join("keep.txt"), "keep me").expect("sentinel");
let dir_arg = format!("{}:{}", user_dir.display(), system_dir.display());
let output = Command::new(env!("CARGO_BIN_EXE_inshellah"))
.args(["purge", "--dir", &dir_arg])
.output()
.expect("run inshellah purge");
assert!(
output.status.success(),
"stderr = {}",
String::from_utf8_lossy(&output.stderr)
);
// user cache entry gone, non-cache file kept, system dir untouched.
assert!(!user_dir.join("usercmd.json").exists(), "user entry not purged");
assert!(user_dir.join("keep.txt").exists(), "non-cache file removed");
assert!(
system_dir.join("syscmd.json").exists(),
"system dir must not be purged"
);
let _ = fs::remove_dir_all(root);
}
#[test]
fn complete_flag_on_empty_env_surfaces_flags_after_space() {
let cache_dir = flag_demo_cache("inshellah-flag-on-empty", &["verbose"]);