cli_label.rs

 1use assert_cmd::Command;
 2use predicates::prelude::*;
 3use tempfile::TempDir;
 4
 5fn td() -> Command {
 6    Command::cargo_bin("td").unwrap()
 7}
 8
 9fn init_tmp() -> TempDir {
10    let tmp = TempDir::new().unwrap();
11    td().arg("init").current_dir(&tmp).assert().success();
12    tmp
13}
14
15fn create_task(dir: &TempDir, title: &str) -> String {
16    let out = td()
17        .args(["--json", "create", title])
18        .current_dir(dir)
19        .output()
20        .unwrap();
21    let v: serde_json::Value = serde_json::from_slice(&out.stdout).unwrap();
22    v["id"].as_str().unwrap().to_string()
23}
24
25#[test]
26fn label_add_and_list() {
27    let tmp = init_tmp();
28    let id = create_task(&tmp, "Tag me");
29
30    td().args(["label", "add", &id, "important"])
31        .current_dir(&tmp)
32        .assert()
33        .success()
34        .stdout(predicate::str::contains("added"));
35
36    td().args(["label", "list", &id])
37        .current_dir(&tmp)
38        .assert()
39        .success()
40        .stdout(predicate::str::contains("important"));
41}
42
43#[test]
44fn label_rm_removes_label() {
45    let tmp = init_tmp();
46    let id = create_task(&tmp, "Untag me");
47
48    td().args(["label", "add", &id, "temp"])
49        .current_dir(&tmp)
50        .assert()
51        .success();
52    td().args(["label", "rm", &id, "temp"])
53        .current_dir(&tmp)
54        .assert()
55        .success();
56
57    td().args(["label", "list", &id])
58        .current_dir(&tmp)
59        .assert()
60        .success()
61        .stdout(predicate::str::is_empty());
62}
63
64#[test]
65fn label_list_all_shows_distinct_labels() {
66    let tmp = init_tmp();
67    let a = create_task(&tmp, "A");
68    let b = create_task(&tmp, "B");
69
70    td().args(["label", "add", &a, "bug"])
71        .current_dir(&tmp)
72        .assert()
73        .success();
74    td().args(["label", "add", &b, "bug"])
75        .current_dir(&tmp)
76        .assert()
77        .success();
78    td().args(["label", "add", &b, "ui"])
79        .current_dir(&tmp)
80        .assert()
81        .success();
82
83    td().args(["label", "list-all"])
84        .current_dir(&tmp)
85        .assert()
86        .success()
87        .stdout(predicate::str::contains("bug"))
88        .stdout(predicate::str::contains("ui"));
89}