aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/test-pearl-saved.el46
1 files changed, 46 insertions, 0 deletions
diff --git a/tests/test-pearl-saved.el b/tests/test-pearl-saved.el
index 63a3f8c..88bf468 100644
--- a/tests/test-pearl-saved.el
+++ b/tests/test-pearl-saved.el
@@ -108,5 +108,51 @@
(should (equal '("apple" "banana")
(mapcar (lambda (i) (plist-get i :title)) written))))))
+;;; sort boundary cases
+
+(ert-deftest test-pearl-sort-issues-title-nil-and-empty ()
+ "Title sort treats nil and empty titles as empty strings, ordered first ascending."
+ (let ((out (pearl--sort-issues
+ '((:title "banana") (:title nil) (:title "apple") (:title ""))
+ 'title 'asc)))
+ ;; both empties sort before the named titles; their relative order is the
+ ;; stable input order (nil came before the empty string)
+ (should (equal '(nil "" "apple" "banana")
+ (mapcar (lambda (i) (plist-get i :title)) out)))))
+
+(ert-deftest test-pearl-sort-issues-priority-nil-is-last-asc ()
+ "A nil (none) priority sorts last ascending and first descending."
+ (let ((issues '((:title "p2" :priority 2) (:title "none" :priority nil) (:title "p1" :priority 1))))
+ (should (equal '("p1" "p2" "none")
+ (mapcar (lambda (i) (plist-get i :title))
+ (pearl--sort-issues issues 'priority 'asc))))
+ (should (equal '("none" "p2" "p1")
+ (mapcar (lambda (i) (plist-get i :title))
+ (pearl--sort-issues issues 'priority 'desc))))))
+
+(ert-deftest test-pearl-sort-issues-equal-keys-deterministic ()
+ "Equal keys keep input order ascending and reverse it descending (stable sort + nreverse)."
+ (let ((issues '((:title "a" :priority 2) (:title "b" :priority 2) (:title "c" :priority 2))))
+ (should (equal '("a" "b" "c")
+ (mapcar (lambda (i) (plist-get i :title))
+ (pearl--sort-issues issues 'priority 'asc))))
+ (should (equal '("c" "b" "a")
+ (mapcar (lambda (i) (plist-get i :title))
+ (pearl--sort-issues issues 'priority 'desc))))))
+
+(ert-deftest test-pearl-render-query-result-sorts-with-missing-priority ()
+ "Render sorts by priority after normalization even when a node lacks the field."
+ (let ((written nil)
+ (source '(:type filter :name "By priority" :filter nil :sort priority :order asc)))
+ (cl-letf (((symbol-function 'pearl--normalize-issue) #'identity)
+ ((symbol-function 'pearl--update-org-from-issues)
+ (lambda (issues &optional _s _t) (setq written issues))))
+ (pearl--render-query-result
+ (pearl--make-query-result
+ 'ok :issues '((:title "hi" :priority 1) (:title "none") (:title "lo" :priority 3)))
+ source)
+ (should (equal '("hi" "lo" "none")
+ (mapcar (lambda (i) (plist-get i :title)) written))))))
+
(provide 'test-pearl-saved)
;;; test-pearl-saved.el ends here