aboutsummaryrefslogtreecommitdiff
path: root/tests/test-pearl-todo-keywords.el
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-pearl-todo-keywords.el')
-rw-r--r--tests/test-pearl-todo-keywords.el22
1 files changed, 22 insertions, 0 deletions
diff --git a/tests/test-pearl-todo-keywords.el b/tests/test-pearl-todo-keywords.el
index 281beea..0555a4e 100644
--- a/tests/test-pearl-todo-keywords.el
+++ b/tests/test-pearl-todo-keywords.el
@@ -150,5 +150,27 @@
;; SHIPPED is an org done-keyword, so it lands on the done side
(should (re-search-forward "^#\\+TODO: *\\| SHIPPED$" nil t)))))
+;;; --resolve-keyword-to-state (keyword -> team state id, save-time)
+
+(ert-deftest test-pearl-resolve-keyword-to-state-collision-first-by-position ()
+ "When two state names slugify to the same keyword, the lower position wins."
+ (cl-letf (((symbol-function 'pearl--team-states)
+ (lambda (_tid)
+ '(((id . "s-hi") (name . "Dev Review") (type . "started") (position . 5.0))
+ ((id . "s-lo") (name . "Dev-Review") (type . "started") (position . 2.0))))))
+ (let ((r (pearl--resolve-keyword-to-state "DEV-REVIEW" "t1")))
+ (should (string= "s-lo" (plist-get r :id)))
+ (should (string= "Dev-Review" (plist-get r :name)))
+ (should (string= "started" (plist-get r :type))))))
+
+(ert-deftest test-pearl-resolve-keyword-to-state-no-match-or-empty-returns-nil ()
+ "A keyword no state slugifies to yields nil, as does an empty/failed fetch."
+ (cl-letf (((symbol-function 'pearl--team-states)
+ (lambda (_tid)
+ '(((id . "s1") (name . "Todo") (type . "unstarted") (position . 1.0))))))
+ (should-not (pearl--resolve-keyword-to-state "BLOCKED" "t1")))
+ (cl-letf (((symbol-function 'pearl--team-states) (lambda (_tid) nil)))
+ (should-not (pearl--resolve-keyword-to-state "TODO" "t1"))))
+
(provide 'test-pearl-todo-keywords)
;;; test-pearl-todo-keywords.el ends here