mod common;
#[test]
fn edit_with_backup_creates_bak() {
let dir = tempfile::tempdir().expect("tempdir");
let target = dir.path().join("auditable.rs");
std::fs::write(&target, "fn original() {}\n").expect("seed");
let output = common::atomwrite()
.args([
"--workspace",
dir.path().to_str().unwrap(),
"edit",
"--backup",
"--keep-backup",
"--retention",
"3",
"--old",
"original",
"--new",
"modified",
])
.arg(&target)
.output()
.expect("run");
assert!(
output.status.success(),
"edit --backup failed: stderr={}",
String::from_utf8_lossy(&output.stderr)
);
let content = std::fs::read_to_string(&target).expect("read");
assert!(content.contains("fn modified()"));
assert!(!content.contains("original"));
let bak_entries: Vec<_> = std::fs::read_dir(dir.path())
.expect("readdir")
.filter_map(|e| e.ok())
.filter(|e| {
e.file_name()
.to_str()
.is_some_and(|n| n.starts_with("auditable.rs.bak."))
})
.collect();
assert_eq!(
bak_entries.len(),
1,
"exactly one .bak.* file must be preserved with --keep-backup"
);
let bak_path = dir.path().join(bak_entries[0].file_name());
let bak_content = std::fs::read_to_string(&bak_path).expect("read bak");
assert_eq!(bak_content, "fn original() {}\n");
}
#[test]
fn edit_without_backup_no_bak() {
let dir = tempfile::tempdir().expect("tempdir");
let target = dir.path().join("fast.rs");
std::fs::write(&target, "fn fast() {}\n").expect("seed");
let output = common::atomwrite()
.args([
"--workspace",
dir.path().to_str().unwrap(),
"edit",
"--old",
"fast",
"--new",
"quick",
])
.arg(&target)
.output()
.expect("run");
assert!(
output.status.success(),
"edit failed: stderr={}",
String::from_utf8_lossy(&output.stderr)
);
let content = std::fs::read_to_string(&target).expect("read");
assert!(content.contains("fn quick()"));
assert!(!content.contains("fast"));
let bak_entries: Vec<_> = std::fs::read_dir(dir.path())
.expect("readdir")
.filter_map(|e| e.ok())
.filter(|e| {
e.file_name()
.to_str()
.is_some_and(|n| n.starts_with("fast.rs.bak."))
})
.collect();
assert!(
bak_entries.is_empty(),
"no .bak.* files should be created without --backup, found: {:?}",
bak_entries
.iter()
.map(|e| e.file_name())
.collect::<Vec<_>>()
);
}