diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/test-integration-acceptance.el | 4 | ||||
| -rw-r--r-- | tests/test-pearl-todo-keywords.el | 38 |
2 files changed, 42 insertions, 0 deletions
diff --git a/tests/test-integration-acceptance.el b/tests/test-integration-acceptance.el index de5f0e7..11b88b2 100644 --- a/tests/test-integration-acceptance.el +++ b/tests/test-integration-acceptance.el @@ -109,6 +109,10 @@ because the description-update mutation contains both `IssueDescription' and (when (find-buffer-visiting tmp) (kill-buffer (find-buffer-visiting tmp))) (cl-letf (((symbol-function 'pearl--graphql-request-async) #'test-integration--dispatch) + ;; the header-state gather fetches team states synchronously; + ;; stub it so the render stays network-free (the derived #+TODO + ;; then comes from the displayed issues' own states) + ((symbol-function 'pearl--team-states) (lambda (_team-id) nil)) ;; no windows in batch; keep the surface step a no-op ((symbol-function 'pearl--surface-buffer) (lambda (b) b))) (unwind-protect 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 |
