cli_label.rs

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