repro_compact.rs

 1use assert_cmd::Command;
 2use tempfile::TempDir;
 3
 4fn td(home: &TempDir) -> Command {
 5    let mut cmd = Command::cargo_bin("td").unwrap();
 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(["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    // Compact
39    td(&tmp).arg("compact").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}