aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/test-pearl-format.el4
-rw-r--r--tests/test-pearl-mapping.el16
-rw-r--r--tests/test-pearl-save.el62
3 files changed, 72 insertions, 10 deletions
diff --git a/tests/test-pearl-format.el b/tests/test-pearl-format.el
index a642b53..ece64d3 100644
--- a/tests/test-pearl-format.el
+++ b/tests/test-pearl-format.el
@@ -105,7 +105,7 @@
"Null/missing optional fields render as empty values, and the body is empty."
(test-pearl--with-default-mapping
(let ((out (pearl--format-issue-as-org-entry (test-pearl--norm-bare))))
- (should (string-match-p "^\\*\\* TODO \\[#C\\] ENG-7: Bare Issue$" out))
+ (should (string-match-p "^\\*\\* TODO ENG-7: Bare Issue$" out))
(should (string-match-p "^:LINEAR-PROJECT-NAME: +$" out))
(should (string-match-p "^:LINEAR-ASSIGNEE-NAME: +$" out))
(should (string-match-p "^:LINEAR-LABELS: +\\[\\]$" out))
@@ -174,7 +174,7 @@ sort together (org-sort on the parent) instead of being orphan headings."
(let ((out (pearl--build-org-content
(list (test-pearl--norm-full) (test-pearl--norm-bare)))))
(should (string-match-p "^\\*\\* IN-PROGRESS \\[#B\\] ENG-42: Fix the Thing$" out))
- (should (string-match-p "^\\*\\* TODO \\[#C\\] ENG-7: Bare Issue$" out)))))
+ (should (string-match-p "^\\*\\* TODO ENG-7: Bare Issue$" out)))))
;;; --restore-page-visibility
diff --git a/tests/test-pearl-mapping.el b/tests/test-pearl-mapping.el
index a4e02e7..d9854cb 100644
--- a/tests/test-pearl-mapping.el
+++ b/tests/test-pearl-mapping.el
@@ -106,14 +106,14 @@ outlive a change to `pearl-state-to-todo-mapping'."
(should (string-equal "[#C]" (pearl--map-linear-priority-to-org 3)))
(should (string-equal "[#D]" (pearl--map-linear-priority-to-org 4))))
-(ert-deftest test-pearl-map-linear-priority-to-org-zero-defaults-c ()
- "Priority 0 (No priority) falls back to [#C]."
- (should (string-equal "[#C]" (pearl--map-linear-priority-to-org 0))))
-
-(ert-deftest test-pearl-map-linear-priority-to-org-nil-and-unknown-default-c ()
- "A nil or out-of-range priority falls back to [#C]."
- (should (string-equal "[#C]" (pearl--map-linear-priority-to-org nil)))
- (should (string-equal "[#C]" (pearl--map-linear-priority-to-org 99))))
+(ert-deftest test-pearl-map-linear-priority-to-org-none-no-cookie ()
+ "Priority 0 (No priority) maps to no cookie, distinct from Medium's [#C]."
+ (should (string-equal "" (pearl--map-linear-priority-to-org 0))))
+
+(ert-deftest test-pearl-map-linear-priority-to-org-nil-and-unknown-no-cookie ()
+ "A nil or out-of-range priority maps to no cookie."
+ (should (string-equal "" (pearl--map-linear-priority-to-org nil)))
+ (should (string-equal "" (pearl--map-linear-priority-to-org 99))))
;;; pearl--get-linear-priority-name
diff --git a/tests/test-pearl-save.el b/tests/test-pearl-save.el
index a8ae6af..36358ad 100644
--- a/tests/test-pearl-save.el
+++ b/tests/test-pearl-save.el
@@ -112,6 +112,68 @@
(re-search-forward "Original description")
(should-not (plist-get (pearl--issue-dirty-fields) :comment-candidates))))
+;;; --issue-dirty-fields: structured fields (save-model v2)
+
+(defun test-pearl-save--structured-issue ()
+ "A normalized issue with state id, assignee, and labels (for structured dirty)."
+ '(:id "u" :identifier "ENG-1" :title "t" :priority 2
+ :state (:id "s1" :name "Todo")
+ :assignee (:id "a1" :name "Craig")
+ :labels ((:id "l1" :name "bug") (:id "l2" :name "backend"))
+ :description "body"))
+
+(ert-deftest test-pearl-dirty-fields-structured-clean ()
+ "A freshly rendered issue has no dirty structured fields."
+ (test-pearl-save--in-rendered (test-pearl-save--structured-issue)
+ (let ((d (pearl--issue-dirty-fields)))
+ (should-not (plist-get d :priority))
+ (should-not (plist-get d :state))
+ (should-not (plist-get d :assignee))
+ (should-not (plist-get d :labels)))))
+
+(ert-deftest test-pearl-dirty-fields-priority-cookie-change ()
+ "Changing the priority cookie marks priority dirty vs LINEAR-PRIORITY."
+ (test-pearl-save--in-rendered (test-pearl-save--structured-issue)
+ (org-back-to-heading t)
+ (let ((org-priority-highest ?A) (org-priority-lowest ?D))
+ (org-priority ?C)) ; was [#B] (2); now [#C] (3)
+ (should (plist-get (pearl--issue-dirty-fields) :priority))))
+
+(ert-deftest test-pearl-dirty-fields-priority-none-not-dirty ()
+ "A None-priority issue renders no cookie and is not falsely dirty."
+ (test-pearl-save--in-rendered
+ '(:id "u" :identifier "ENG-2" :title "t" :priority 0
+ :state (:id "s1" :name "Todo") :description "body")
+ (should-not (plist-get (pearl--issue-dirty-fields) :priority))))
+
+(ert-deftest test-pearl-dirty-fields-state-picker-change ()
+ "An explicit state id different from the synced baseline marks state dirty."
+ (test-pearl-save--in-rendered (test-pearl-save--structured-issue)
+ (org-back-to-heading t)
+ (org-entry-put nil "LINEAR-STATE-ID" "s2")
+ (should (plist-get (pearl--issue-dirty-fields) :state))))
+
+(ert-deftest test-pearl-dirty-fields-assignee-change ()
+ "An assignee id different from the synced baseline marks assignee dirty."
+ (test-pearl-save--in-rendered (test-pearl-save--structured-issue)
+ (org-back-to-heading t)
+ (org-entry-put nil "LINEAR-ASSIGNEE-ID" "a2")
+ (should (plist-get (pearl--issue-dirty-fields) :assignee))))
+
+(ert-deftest test-pearl-dirty-fields-labels-change ()
+ "A label id set different from the synced baseline marks labels dirty."
+ (test-pearl-save--in-rendered (test-pearl-save--structured-issue)
+ (org-back-to-heading t)
+ (org-entry-put nil "LINEAR-LABEL-IDS" "l2 l3")
+ (should (plist-get (pearl--issue-dirty-fields) :labels))))
+
+(ert-deftest test-pearl-dirty-fields-labels-reorder-not-dirty ()
+ "Reordering the same label ids is not dirty (order-insensitive set compare)."
+ (test-pearl-save--in-rendered (test-pearl-save--structured-issue)
+ (org-back-to-heading t)
+ (org-entry-put nil "LINEAR-LABEL-IDS" "l2 l1")
+ (should-not (plist-get (pearl--issue-dirty-fields) :labels))))
+
;;; --classify-comment-candidates (Phase B, by viewer id)
(ert-deftest test-pearl-classify-comment-candidates ()