1use assert_cmd::cargo::cargo_bin_cmd;
2use tempfile::TempDir;
3
4fn td(home: &TempDir) -> assert_cmd::Command {
5 let mut cmd = cargo_bin_cmd!("td");
6 cmd.env("HOME", home.path());
7 cmd
8}
9
10#[test]
11fn compact_cleans_delta_files() {
12 let tmp = TempDir::new().unwrap();
13 td(&tmp)
14 .args(["project", "init", "main"])
15 .current_dir(&tmp)
16 .assert()
17 .success();
18
19 // Generate some deltas
20 td(&tmp)
21 .args(["create", "Task 1"])
22 .current_dir(&tmp)
23 .assert()
24 .success();
25 td(&tmp)
26 .args(["create", "Task 2"])
27 .current_dir(&tmp)
28 .assert()
29 .success();
30
31 let project_dir = tmp.path().join(".local/share/td/projects/main");
32 let changes_dir = project_dir.join("changes");
33
34 // Check deltas exist
35 let deltas = std::fs::read_dir(&changes_dir).unwrap().count();
36 assert!(deltas > 0, "Deltas should exist before compaction");
37
38 // Tidy (formerly compact)
39 td(&tmp).arg("tidy").current_dir(&tmp).assert().success();
40
41 // Deltas are folded into the snapshot and removed.
42 let deltas_after = std::fs::read_dir(&changes_dir).unwrap().count();
43 assert_eq!(deltas_after, 0, "Compaction should clean up delta files");
44}