diff options
Diffstat (limited to 'tests/test-pearl-views.el')
| -rw-r--r-- | tests/test-pearl-views.el | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/tests/test-pearl-views.el b/tests/test-pearl-views.el index 3675200..7c8ec80 100644 --- a/tests/test-pearl-views.el +++ b/tests/test-pearl-views.el @@ -325,6 +325,76 @@ the pick-source path showed a view's completed/canceled issues and ignored sort. ;; The favorite's own keys survive the enrichment. (should (string= "https://x" (plist-get rendered-source :url)))))) +;;; --view-grouping-active-p / --view-group-label / --group-issues + +(ert-deftest test-pearl-view-grouping-active-p-supported-types () + "The single-valued grouping dimensions are active in v1." + (dolist (g '("workflowState" "project" "assignee" "priority" "cycle")) + (should (pearl--view-grouping-active-p g)))) + +(ert-deftest test-pearl-view-grouping-active-p-deferred-and-none () + "Label-grouping (multi-valued, deferred), none, nil, and unknown values are +inactive, so the view renders flat." + (dolist (g '("label" "none" nil "someFutureGrouping")) + (should-not (pearl--view-grouping-active-p g)))) + +(ert-deftest test-pearl-view-group-label-by-dimension () + "Each supported grouping resolves an issue to its group label." + (let ((issue '(:state (:name "In Progress" :type "started") + :project (:name "Orchestration") + :assignee (:name "Eric") + :priority 1 + :cycle (:number 4 :name "Sprint 4")))) + (should (string= "In Progress" (pearl--view-group-label issue "workflowState"))) + (should (string= "Orchestration" (pearl--view-group-label issue "project"))) + (should (string= "Eric" (pearl--view-group-label issue "assignee"))) + (should (string= "Urgent" (pearl--view-group-label issue "priority"))) + (should (string= "Sprint 4" (pearl--view-group-label issue "cycle"))))) + +(ert-deftest test-pearl-view-group-label-missing-values () + "A missing dimension value gets a stable \"No X\" bucket label, matching how +Linear shows unset issues in a grouped view." + (let ((issue '(:priority 0))) + (should (string= "No status" (pearl--view-group-label issue "workflowState"))) + (should (string= "No project" (pearl--view-group-label issue "project"))) + (should (string= "No assignee" (pearl--view-group-label issue "assignee"))) + (should (string= "No cycle" (pearl--view-group-label issue "cycle"))) + (should (string= "None" (pearl--view-group-label issue "priority"))))) + +(ert-deftest test-pearl-view-group-label-cycle-number-fallback () + "A cycle with no name falls back to its number." + (should (string= "Cycle 7" + (pearl--view-group-label '(:cycle (:number 7)) "cycle")))) + +(ert-deftest test-pearl-group-issues-inactive-is-nil () + "An inactive grouping returns nil, signaling the caller to render flat." + (should-not (pearl--group-issues '((:id "a" :state (:name "Todo"))) "none")) + (should-not (pearl--group-issues '((:id "a" :state (:name "Todo"))) nil))) + +(ert-deftest test-pearl-group-issues-orders-by-first-appearance () + "Groups appear in the order their first issue does; issues keep their input +order within a group (the layer-1 sort is preserved inside each section)." + (let* ((issues '((:id "1" :state (:name "Started")) + (:id "2" :state (:name "Backlog")) + (:id "3" :state (:name "Started")) + (:id "4" :state (:name "Backlog")))) + (groups (pearl--group-issues issues "workflowState"))) + (should (equal '("Started" "Backlog") (mapcar #'car groups))) + (should (equal '("1" "3") (mapcar (lambda (i) (plist-get i :id)) + (cdr (assoc "Started" groups))))) + (should (equal '("2" "4") (mapcar (lambda (i) (plist-get i :id)) + (cdr (assoc "Backlog" groups))))))) + +;;; --view-node-prefs carries grouping + +(ert-deftest test-pearl-view-node-prefs-extracts-grouping () + "The view node's issueGrouping is read into :group alongside sort and +show-completed, so run/refresh can section the issues." + (let ((prefs (pearl--view-node-prefs + '((id . "v1") + (viewPreferencesValues (issueGrouping . "workflowState")))))) + (should (string= "workflowState" (plist-get prefs :group))))) + ;;; refresh-current-view, view branch (ert-deftest test-pearl-refresh-current-view-runs-view-source () |
