aboutsummaryrefslogtreecommitdiff
path: root/tests/test-pearl-views.el
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-pearl-views.el')
-rw-r--r--tests/test-pearl-views.el70
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 ()