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.el38
1 files changed, 38 insertions, 0 deletions
diff --git a/tests/test-pearl-todo-keywords.el b/tests/test-pearl-todo-keywords.el
index a167157..b941b26 100644
--- a/tests/test-pearl-todo-keywords.el
+++ b/tests/test-pearl-todo-keywords.el
@@ -83,5 +83,43 @@
(should (string= "TODO IN-PROGRESS IN-REVIEW BACKLOG BLOCKED | DONE"
(pearl--derive-todo-line '()))))
+;;; --gather-header-states (teams first-seen, states by position)
+
+(ert-deftest test-pearl-gather-header-states-orders-by-team-then-position ()
+ "Teams come in first-seen order; within a team, states sort by position."
+ (cl-letf (((symbol-function 'pearl--team-states)
+ (lambda (tid)
+ (pcase tid
+ ("t1" '(((id . "s2") (name . "In Progress") (type . "started") (position . 2.0))
+ ((id . "s1") (name . "Todo") (type . "unstarted") (position . 1.0))))
+ ("t2" '(((id . "s3") (name . "Done") (type . "completed") (position . 9.0))))))))
+ (let* ((issues (list (list :team '(:id "t1") :state '(:name "Todo" :type "unstarted"))
+ (list :team '(:id "t2") :state '(:name "Done" :type "completed"))))
+ (line (pearl--derive-todo-line (pearl--gather-header-states issues))))
+ (should (string= "TODO IN-PROGRESS | DONE" line)))))
+
+(ert-deftest test-pearl-gather-header-states-covers-failed-team ()
+ "A team whose fetch returns nil is skipped, but its issues' own states still appear."
+ (cl-letf (((symbol-function 'pearl--team-states) (lambda (_tid) nil)))
+ (let* ((issues (list (list :team '(:id "t9") :state '(:name "Grooming" :type "backlog"))))
+ (line (pearl--derive-todo-line (pearl--gather-header-states issues))))
+ (should (string-match-p "GROOMING" line)))))
+
+;;; --build-org-content with a derived #+TODO
+
+(ert-deftest test-pearl-build-org-content-derives-todo-from-states ()
+ "With a states list, the #+TODO line is derived (not the hardcoded default)."
+ (let ((out (pearl--build-org-content
+ '() '(:type filter :name "X" :filter nil) nil
+ '((:name "Todo" :type "unstarted")
+ (:name "Dev Review" :type "started")
+ (:name "Done" :type "completed")))))
+ (should (string-match-p "^#\\+TODO: TODO DEV-REVIEW \\| DONE$" out))))
+
+(ert-deftest test-pearl-build-org-content-no-states-keeps-fallback ()
+ "With no states (nil), the #+TODO line stays the hardcoded default."
+ (let ((out (pearl--build-org-content '() '(:type filter :name "X" :filter nil) nil nil)))
+ (should (string-match-p "^#\\+TODO: TODO IN-PROGRESS IN-REVIEW BACKLOG BLOCKED \\| DONE$" out))))
+
(provide 'test-pearl-todo-keywords)
;;; test-pearl-todo-keywords.el ends here