diff --git a/src/db.rs b/src/db.rs index f569cdf8b09137bc77a5c26f4dcb61321003a527..17c58d0fe80465d1034d03b9ea36914d71d52dad 100644 --- a/src/db.rs +++ b/src/db.rs @@ -143,7 +143,7 @@ impl TaskId { } pub fn short(&self) -> String { - self.0.chars().take(7).collect() + self.0[self.0.len() - 7..].to_string() } } @@ -491,9 +491,10 @@ pub fn resolve_task_id(store: &Store, raw: &str, include_deleted: bool) -> Resul store.list_tasks()? }; + let upper = raw.to_ascii_uppercase(); let matches: Vec = tasks .into_iter() - .filter(|t| t.id.as_str().starts_with(raw)) + .filter(|t| t.id.as_str().ends_with(&upper)) .map(|t| t.id) .collect(); diff --git a/tests/cli_dep.rs b/tests/cli_dep.rs index 155a5e7440422f3ec4ce940b9f406553a5ac5d77..b9026833167a6e2cf26758ea4f7da4ccb4a05e8b 100644 --- a/tests/cli_dep.rs +++ b/tests/cli_dep.rs @@ -103,9 +103,13 @@ fn dep_tree_shows_children() { .current_dir(&tmp) .assert() .success() - .stdout(predicate::str::contains(&parent[..7])) - .stdout(predicate::str::contains(&subtask_one_id[..7])) - .stdout(predicate::str::contains(&subtask_two_id[..7])); + .stdout(predicate::str::contains(&parent[parent.len() - 7..])) + .stdout(predicate::str::contains( + &subtask_one_id[subtask_one_id.len() - 7..], + )) + .stdout(predicate::str::contains( + &subtask_two_id[subtask_two_id.len() - 7..], + )); } #[test] diff --git a/tests/cli_list_show.rs b/tests/cli_list_show.rs index 07529b45163aaf84a6676a79278d3f9aa1b0f13c..57fc3f62bced1da0b4192134f0dae19c97b99ca2 100644 --- a/tests/cli_list_show.rs +++ b/tests/cli_list_show.rs @@ -168,7 +168,7 @@ fn show_displays_task() { .assert() .success() .stdout(predicate::str::contains("Details here")) - .stdout(predicate::str::contains(&id[..7])); + .stdout(predicate::str::contains(&id[id.len() - 7..])); } #[test] @@ -248,10 +248,12 @@ fn show_annotates_closed_blockers() { .assert() .success() .stdout(predicate::str::contains("blockers")) - .stdout(predicate::str::contains(&open_blocker[..7])) + .stdout(predicate::str::contains( + &open_blocker[open_blocker.len() - 7..], + )) .stdout(predicate::str::contains(&format!( "{} [closed]", - &closed_blocker[..7] + &closed_blocker[closed_blocker.len() - 7..] ))); } @@ -280,7 +282,7 @@ fn show_all_closed_blockers_prefixed() { .success() .stdout(predicate::str::contains("blocker")) .stdout(predicate::str::contains("[all closed]")) - .stdout(predicate::str::contains(&blocker[..7])); + .stdout(predicate::str::contains(&blocker[blocker.len() - 7..])); } #[test] @@ -304,7 +306,7 @@ fn show_single_open_blocker_singular_label() { // Singular "blocker", no "blockers". assert!(stdout.contains("blocker")); - assert!(stdout.contains(&blocker[..7])); + assert!(stdout.contains(&blocker[blocker.len() - 7..])); // Should not contain [closed] or [all closed]. assert!(!stdout.contains("[closed]")); } diff --git a/tests/cli_log.rs b/tests/cli_log.rs index bd3e3a26e743f0c4928f1cc334ed5d7705961d00..315c81855ce49b370cbfb6cc55b6d8439deccc6b 100644 --- a/tests/cli_log.rs +++ b/tests/cli_log.rs @@ -38,7 +38,10 @@ fn log_human_reports_task_id() { .current_dir(&tmp) .assert() .success() - .stdout(predicate::str::contains(format!("logged to {}", &id[..7]))); + .stdout(predicate::str::contains(format!( + "logged to {}", + &id[id.len() - 7..] + ))); } #[test]