aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/test-chime--deduplicate-events-by-title.el53
1 files changed, 53 insertions, 0 deletions
diff --git a/tests/test-chime--deduplicate-events-by-title.el b/tests/test-chime--deduplicate-events-by-title.el
index 69bb632..66ec37a 100644
--- a/tests/test-chime--deduplicate-events-by-title.el
+++ b/tests/test-chime--deduplicate-events-by-title.el
@@ -47,6 +47,15 @@ Returns format: (EVENT TIME-INFO MINUTES)"
'("dummy-time-string" . nil) ; TIME-INFO (not used in deduplication)
minutes))
+(defun test-make-upcoming-item-with-source (title minutes file pos)
+ "Build an upcoming-events item carrying source-heading identity.
+TITLE / MINUTES match `test-make-upcoming-item'; FILE and POS attach
+`marker-file' and `marker-pos' to the event alist so the dedup key
+can use heading identity instead of title."
+ (list `((title . ,title) (marker-file . ,file) (marker-pos . ,pos))
+ '("dummy-time-string" . nil)
+ minutes))
+
;;; Normal Cases
(ert-deftest test-chime--deduplicate-events-by-title-normal-recurring-daily-keeps-soonest ()
@@ -183,5 +192,49 @@ One instance should be kept."
(let ((result (chime--deduplicate-events-by-title nil)))
(should (null result))))
+;;; Source-heading Cases (distinct headings with shared title)
+
+(ert-deftest test-chime--deduplicate-events-by-title-distinct-headings-same-title-both-kept ()
+ "Two events that share a title but live at different markers must both
+survive the dedup pass. Recurring-event collapse keys off the source
+heading (file + position), not the user-facing title."
+ (let* ((events (list
+ (test-make-upcoming-item-with-source
+ "1:1" 30 "/work.org" 100)
+ (test-make-upcoming-item-with-source
+ "1:1" 60 "/work.org" 500)))
+ (result (chime--deduplicate-events-by-title events)))
+ (should (= 2 (length result)))))
+
+(ert-deftest test-chime--deduplicate-events-by-title-recurring-same-marker-collapsed ()
+ "Multiple expansions of one recurring entry share the same marker
+and should still collapse to the soonest occurrence."
+ (let* ((events (list
+ (test-make-upcoming-item-with-source
+ "Standup" 60 "/work.org" 100)
+ (test-make-upcoming-item-with-source
+ "Standup" 1500 "/work.org" 100)
+ (test-make-upcoming-item-with-source
+ "Standup" 2940 "/work.org" 100)))
+ (result (chime--deduplicate-events-by-title events)))
+ (should (= 1 (length result)))
+ (should (= 60 (caddr (car result))))))
+
+(ert-deftest test-chime--deduplicate-events-by-title-mixed-source-and-title-fallback ()
+ "Sourced and unsourced events coexist: sourced ones key off the marker,
+unsourced ones still collapse by title."
+ (let* ((events (list
+ ;; Two distinct headings sharing a title
+ (test-make-upcoming-item-with-source
+ "Sync" 30 "/a.org" 100)
+ (test-make-upcoming-item-with-source
+ "Sync" 90 "/b.org" 200)
+ ;; Test event without marker info — fallback to title
+ (test-make-upcoming-item "Standalone" 45)
+ (test-make-upcoming-item "Standalone" 600)))
+ (result (chime--deduplicate-events-by-title events)))
+ ;; Two Syncs (distinct headings) plus one Standalone (title-collapsed)
+ (should (= 3 (length result)))))
+
(provide 'test-chime--deduplicate-events-by-title)
;;; test-chime--deduplicate-events-by-title.el ends here