aboutsummaryrefslogtreecommitdiff
path: root/tests/test-chime-overdue-todos.el
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-06-24 16:18:27 -0400
committerCraig Jennings <c@cjennings.net>2026-06-24 16:18:27 -0400
commitd47f4f90bb1c69697a855a662bb07be1e0ccdc33 (patch)
tree777d0b786a530cb4190f8e062e0afda2506308d4 /tests/test-chime-overdue-todos.el
parentab8cc4da57fce5d0a59f4db34fb550919a06ea79 (diff)
downloadchime-d47f4f90bb1c69697a855a662bb07be1e0ccdc33.tar.gz
chime-d47f4f90bb1c69697a855a662bb07be1e0ccdc33.zip
test: add chime-deftest fixture macro and centralize test requiresHEADmain
Every test hand-wrote the same scaffolding: call a per-file setup, wrap the body in unwind-protect, call a per-file teardown. That's 419 unwind-protect blocks and 68 near-identical setup/teardown defuns, with no shared fixture because ERT has no native per-test setup. I added a chime-deftest macro in test-bootstrap that creates the test base directory before the body and deletes it afterward, even on failure. I converted the 10 files whose fixture was exactly that base-dir create/delete and whose every test followed the standard shape, dropping their setup/teardown defuns. Files with custom fixtures (modeline state restore, validation reset) keep explicit setup/teardown, since the macro would silently drop their extra logic. I left the 4 tag-bearing integration files alone. I also moved the near-universal testutil-general and testutil-time requires into test-bootstrap, so individual files no longer repeat them. Behavior is unchanged: still 800 tests, full suite green. Converted bodies are copied verbatim, so the change only removes scaffolding, never an assertion.
Diffstat (limited to 'tests/test-chime-overdue-todos.el')
-rw-r--r--tests/test-chime-overdue-todos.el377
1 files changed, 162 insertions, 215 deletions
diff --git a/tests/test-chime-overdue-todos.el b/tests/test-chime-overdue-todos.el
index 84bc091..32e50c3 100644
--- a/tests/test-chime-overdue-todos.el
+++ b/tests/test-chime-overdue-todos.el
@@ -31,10 +31,6 @@
(require 'test-bootstrap (expand-file-name "test-bootstrap.el"))
-;; Load test utilities
-(require 'testutil-general (expand-file-name "testutil-general.el"))
-(require 'testutil-time (expand-file-name "testutil-time.el"))
-
;;; Test Helper Functions
(defun test-overdue--create-event (title timestamp has-time)
@@ -47,19 +43,9 @@ HAS-TIME determines if timestamp has time component."
(times . ,times)
(intervals . (10)))))
-;;; Setup and Teardown
-
-(defun test-chime-overdue-setup ()
- "Setup function run before each test."
- (chime-create-test-base-dir))
-
-(defun test-chime-overdue-teardown ()
- "Teardown function run after each test."
- (chime-delete-test-base-dir))
-
;;; Tests for chime--event-has-any-passed-time
-(ert-deftest test-overdue-has-passed-time-yesterday-all-day ()
+(chime-deftest test-overdue-has-passed-time-yesterday-all-day ()
"Test that all-day event from yesterday is recognized as passed.
TIME RELATIONSHIPS:
@@ -70,20 +56,17 @@ EXPECTED BEHAVIOR:
Should return t (yesterday is in the past)
REFACTORED: Uses dynamic timestamps via testutil-time.el"
- (test-chime-overdue-setup)
- (unwind-protect
- (let* ((now (test-time-now))
- (yesterday (test-time-yesterday-at 0 0))
- (yesterday-timestamp (test-timestamp-string yesterday t))
- (event (test-overdue--create-event
- "Yesterday Event"
- yesterday-timestamp
- nil))) ; all-day event
- (with-test-time now
- (should (chime--event-has-any-passed-time event))))
- (test-chime-overdue-teardown)))
-
-(ert-deftest test-overdue-has-passed-time-today-all-day ()
+ (let* ((now (test-time-now))
+ (yesterday (test-time-yesterday-at 0 0))
+ (yesterday-timestamp (test-timestamp-string yesterday t))
+ (event (test-overdue--create-event
+ "Yesterday Event"
+ yesterday-timestamp
+ nil))) ; all-day event
+ (with-test-time now
+ (should (chime--event-has-any-passed-time event)))))
+
+(chime-deftest test-overdue-has-passed-time-today-all-day ()
"Test that all-day event from today is recognized as passed.
TIME RELATIONSHIPS:
@@ -111,19 +94,16 @@ REFACTORING NOTES:
Simple case - just needs TODAY timestamp and TODAY current-time.
REFACTORED: Uses dynamic timestamps via testutil-time.el"
- (test-chime-overdue-setup)
- (unwind-protect
- (let* ((now (test-time-now))
- (today-timestamp (test-timestamp-string now t))
- (event (test-overdue--create-event
- "Today Event"
- today-timestamp
- nil))) ; all-day event
- (with-test-time now
- (should (chime--event-has-any-passed-time event))))
- (test-chime-overdue-teardown)))
-
-(ert-deftest test-overdue-has-passed-time-tomorrow-all-day ()
+ (let* ((now (test-time-now))
+ (today-timestamp (test-timestamp-string now t))
+ (event (test-overdue--create-event
+ "Today Event"
+ today-timestamp
+ nil))) ; all-day event
+ (with-test-time now
+ (should (chime--event-has-any-passed-time event)))))
+
+(chime-deftest test-overdue-has-passed-time-tomorrow-all-day ()
"Test that all-day event from tomorrow is NOT recognized as passed.
TIME RELATIONSHIPS:
@@ -134,20 +114,17 @@ EXPECTED BEHAVIOR:
Should return nil (tomorrow is in the future)
REFACTORED: Uses dynamic timestamps via testutil-time.el"
- (test-chime-overdue-setup)
- (unwind-protect
- (let* ((now (test-time-now))
- (tomorrow (test-time-tomorrow-at 0 0))
- (tomorrow-timestamp (test-timestamp-string tomorrow t))
- (event (test-overdue--create-event
- "Tomorrow Event"
- tomorrow-timestamp
- nil))) ; all-day event
- (with-test-time now
- (should-not (chime--event-has-any-passed-time event))))
- (test-chime-overdue-teardown)))
-
-(ert-deftest test-overdue-has-passed-time-timed-event-past ()
+ (let* ((now (test-time-now))
+ (tomorrow (test-time-tomorrow-at 0 0))
+ (tomorrow-timestamp (test-timestamp-string tomorrow t))
+ (event (test-overdue--create-event
+ "Tomorrow Event"
+ tomorrow-timestamp
+ nil))) ; all-day event
+ (with-test-time now
+ (should-not (chime--event-has-any-passed-time event)))))
+
+(chime-deftest test-overdue-has-passed-time-timed-event-past ()
"Test that timed event in the past is recognized as passed.
TIME RELATIONSHIPS:
@@ -158,20 +135,17 @@ EXPECTED BEHAVIOR:
Should return t (event time has passed)
REFACTORED: Uses dynamic timestamps via testutil-time.el"
- (test-chime-overdue-setup)
- (unwind-protect
- (let* ((now (test-time-today-at 14 0))
- (past-event (test-time-today-at 9 0))
- (past-timestamp (test-timestamp-string past-event))
- (event (test-overdue--create-event
- "Past Meeting"
- past-timestamp
- t))) ; timed event
- (with-test-time now
- (should (chime--event-has-any-passed-time event))))
- (test-chime-overdue-teardown)))
-
-(ert-deftest test-overdue-has-passed-time-timed-event-future ()
+ (let* ((now (test-time-today-at 14 0))
+ (past-event (test-time-today-at 9 0))
+ (past-timestamp (test-timestamp-string past-event))
+ (event (test-overdue--create-event
+ "Past Meeting"
+ past-timestamp
+ t))) ; timed event
+ (with-test-time now
+ (should (chime--event-has-any-passed-time event)))))
+
+(chime-deftest test-overdue-has-passed-time-timed-event-future ()
"Test that timed event in the future is NOT recognized as passed.
TIME RELATIONSHIPS:
@@ -182,22 +156,19 @@ EXPECTED BEHAVIOR:
Should return nil (event time is in future)
REFACTORED: Uses dynamic timestamps via testutil-time.el"
- (test-chime-overdue-setup)
- (unwind-protect
- (let* ((now (test-time-today-at 14 0))
- (future-event (test-time-today-at 16 0))
- (future-timestamp (test-timestamp-string future-event))
- (event (test-overdue--create-event
- "Future Meeting"
- future-timestamp
- t))) ; timed event
- (with-test-time now
- (should-not (chime--event-has-any-passed-time event))))
- (test-chime-overdue-teardown)))
+ (let* ((now (test-time-today-at 14 0))
+ (future-event (test-time-today-at 16 0))
+ (future-timestamp (test-timestamp-string future-event))
+ (event (test-overdue--create-event
+ "Future Meeting"
+ future-timestamp
+ t))) ; timed event
+ (with-test-time now
+ (should-not (chime--event-has-any-passed-time event)))))
;;; Tests for chime--display-as-day-wide-event with overdue setting
-(ert-deftest test-overdue-display-yesterday-all-day-with-overdue-enabled ()
+(chime-deftest test-overdue-display-yesterday-all-day-with-overdue-enabled ()
"Test that yesterday's all-day event is displayed when overdue is enabled.
TIME RELATIONSHIPS:
@@ -209,133 +180,115 @@ EXPECTED BEHAVIOR:
Should display (overdue enabled shows past events)
REFACTORED: Uses dynamic timestamps via testutil-time.el"
- (test-chime-overdue-setup)
- (unwind-protect
- (let* ((now (test-time-now))
- (yesterday (test-time-yesterday-at 0 0))
- (yesterday-timestamp (test-timestamp-string yesterday t))
- (chime-show-any-overdue-with-day-wide-alerts t)
- (chime-day-wide-advance-notice nil)
- (event (test-overdue--create-event
- "Yesterday Birthday"
- yesterday-timestamp
- nil)))
- (with-test-time now
- (should (chime--display-as-day-wide-event event))))
- (test-chime-overdue-teardown)))
-
-(ert-deftest test-overdue-display-yesterday-all-day-with-overdue-disabled ()
+ (let* ((now (test-time-now))
+ (yesterday (test-time-yesterday-at 0 0))
+ (yesterday-timestamp (test-timestamp-string yesterday t))
+ (chime-show-any-overdue-with-day-wide-alerts t)
+ (chime-day-wide-advance-notice nil)
+ (event (test-overdue--create-event
+ "Yesterday Birthday"
+ yesterday-timestamp
+ nil)))
+ (with-test-time now
+ (should (chime--display-as-day-wide-event event)))))
+
+(chime-deftest test-overdue-display-yesterday-all-day-with-overdue-disabled ()
"Test that yesterday's all-day event is NOT displayed when overdue is disabled.
This prevents showing old birthdays/holidays from the past.
REFACTORED: Uses dynamic timestamps via testutil-time.el"
- (test-chime-overdue-setup)
- (unwind-protect
- (let* ((now (test-time-now))
- (yesterday (test-time-yesterday-at 0 0))
- (yesterday-timestamp (test-timestamp-string yesterday t))
- (chime-show-any-overdue-with-day-wide-alerts nil)
- (chime-day-wide-advance-notice nil)
- (event (test-overdue--create-event
- "Yesterday Birthday"
- yesterday-timestamp
- nil)))
- (with-test-time now
- (should-not (chime--display-as-day-wide-event event))))
- (test-chime-overdue-teardown)))
-
-(ert-deftest test-overdue-display-yesterday-timed-with-overdue-enabled ()
+ (let* ((now (test-time-now))
+ (yesterday (test-time-yesterday-at 0 0))
+ (yesterday-timestamp (test-timestamp-string yesterday t))
+ (chime-show-any-overdue-with-day-wide-alerts nil)
+ (chime-day-wide-advance-notice nil)
+ (event (test-overdue--create-event
+ "Yesterday Birthday"
+ yesterday-timestamp
+ nil)))
+ (with-test-time now
+ (should-not (chime--display-as-day-wide-event event)))))
+
+(chime-deftest test-overdue-display-yesterday-timed-with-overdue-enabled ()
"Test that yesterday's timed event is displayed when overdue is enabled.
TIME: TODAY 10am, Event: YESTERDAY 2pm, overdue=t
EXPECTED: Display (show past timed events when enabled)
REFACTORED: Uses dynamic timestamps via testutil-time.el"
- (test-chime-overdue-setup)
- (unwind-protect
- (let* ((now (test-time-now))
- (yesterday (test-time-yesterday-at 14 0))
- (yesterday-timestamp (test-timestamp-string yesterday))
- (chime-show-any-overdue-with-day-wide-alerts t)
- (chime-day-wide-advance-notice nil)
- (event (test-overdue--create-event
- "Yesterday Meeting"
- yesterday-timestamp
- t)))
- (with-test-time now
- (should (chime--display-as-day-wide-event event))))
- (test-chime-overdue-teardown)))
-
-(ert-deftest test-overdue-display-yesterday-timed-with-overdue-disabled ()
+ (let* ((now (test-time-now))
+ (yesterday (test-time-yesterday-at 14 0))
+ (yesterday-timestamp (test-timestamp-string yesterday))
+ (chime-show-any-overdue-with-day-wide-alerts t)
+ (chime-day-wide-advance-notice nil)
+ (event (test-overdue--create-event
+ "Yesterday Meeting"
+ yesterday-timestamp
+ t)))
+ (with-test-time now
+ (should (chime--display-as-day-wide-event event)))))
+
+(chime-deftest test-overdue-display-yesterday-timed-with-overdue-disabled ()
"Test that yesterday's timed event is NOT displayed when overdue is disabled.
TIME: TODAY 10am, Event: YESTERDAY 2pm, overdue=nil
EXPECTED: Hide (don't show past timed events when disabled)
REFACTORED: Uses dynamic timestamps via testutil-time.el"
- (test-chime-overdue-setup)
- (unwind-protect
- (let* ((now (test-time-now))
- (yesterday (test-time-yesterday-at 14 0))
- (yesterday-timestamp (test-timestamp-string yesterday))
- (chime-show-any-overdue-with-day-wide-alerts nil)
- (chime-day-wide-advance-notice nil)
- (event (test-overdue--create-event
- "Yesterday Meeting"
- yesterday-timestamp
- t)))
- (with-test-time now
- (should-not (chime--display-as-day-wide-event event))))
- (test-chime-overdue-teardown)))
-
-(ert-deftest test-overdue-display-today-all-day-always-shown ()
+ (let* ((now (test-time-now))
+ (yesterday (test-time-yesterday-at 14 0))
+ (yesterday-timestamp (test-timestamp-string yesterday))
+ (chime-show-any-overdue-with-day-wide-alerts nil)
+ (chime-day-wide-advance-notice nil)
+ (event (test-overdue--create-event
+ "Yesterday Meeting"
+ yesterday-timestamp
+ t)))
+ (with-test-time now
+ (should-not (chime--display-as-day-wide-event event)))))
+
+(chime-deftest test-overdue-display-today-all-day-always-shown ()
"Test that today's all-day event is always displayed regardless of overdue setting.
TIME: TODAY 10am, Event: TODAY (all-day), both overdue=t and =nil
EXPECTED: Always display (today's events shown regardless of setting)
REFACTORED: Uses dynamic timestamps via testutil-time.el"
- (test-chime-overdue-setup)
- (unwind-protect
- (let* ((now (test-time-now))
- (today-timestamp (test-timestamp-string now t))
- (chime-day-wide-advance-notice nil)
- (event (test-overdue--create-event
- "Today Birthday"
- today-timestamp
- nil)))
- (with-test-time now
- ;; Should show with overdue enabled
- (let ((chime-show-any-overdue-with-day-wide-alerts t))
- (should (chime--display-as-day-wide-event event)))
- ;; Should also show with overdue disabled (it's today, not overdue)
- (let ((chime-show-any-overdue-with-day-wide-alerts nil))
- (should (chime--display-as-day-wide-event event)))))
- (test-chime-overdue-teardown)))
-
-(ert-deftest test-overdue-display-week-old-all-day-with-overdue-enabled ()
+ (let* ((now (test-time-now))
+ (today-timestamp (test-timestamp-string now t))
+ (chime-day-wide-advance-notice nil)
+ (event (test-overdue--create-event
+ "Today Birthday"
+ today-timestamp
+ nil)))
+ (with-test-time now
+ ;; Should show with overdue enabled
+ (let ((chime-show-any-overdue-with-day-wide-alerts t))
+ (should (chime--display-as-day-wide-event event)))
+ ;; Should also show with overdue disabled (it's today, not overdue)
+ (let ((chime-show-any-overdue-with-day-wide-alerts nil))
+ (should (chime--display-as-day-wide-event event))))))
+
+(chime-deftest test-overdue-display-week-old-all-day-with-overdue-enabled ()
"Test that week-old all-day event is displayed when overdue is enabled.
TIME: TODAY (Oct 28), Event: 7 DAYS AGO (Oct 21), overdue=t
EXPECTED: Display (show old events when enabled)
REFACTORED: Uses dynamic timestamps via testutil-time.el"
- (test-chime-overdue-setup)
- (unwind-protect
- (let* ((now (test-time-now))
- (week-ago (test-time-days-ago 7))
- (week-ago-timestamp (test-timestamp-string week-ago t))
- (chime-show-any-overdue-with-day-wide-alerts t)
- (chime-day-wide-advance-notice nil)
- (event (test-overdue--create-event
- "Week Old Event"
- week-ago-timestamp
- nil)))
- (with-test-time now
- (should (chime--display-as-day-wide-event event))))
- (test-chime-overdue-teardown)))
-
-(ert-deftest test-overdue-display-week-old-all-day-with-overdue-disabled ()
+ (let* ((now (test-time-now))
+ (week-ago (test-time-days-ago 7))
+ (week-ago-timestamp (test-timestamp-string week-ago t))
+ (chime-show-any-overdue-with-day-wide-alerts t)
+ (chime-day-wide-advance-notice nil)
+ (event (test-overdue--create-event
+ "Week Old Event"
+ week-ago-timestamp
+ nil)))
+ (with-test-time now
+ (should (chime--display-as-day-wide-event event)))))
+
+(chime-deftest test-overdue-display-week-old-all-day-with-overdue-disabled ()
"Test that week-old all-day event is NOT displayed when overdue is disabled.
This prevents showing old birthdays/holidays from past weeks.
@@ -343,48 +296,42 @@ TIME: TODAY (Oct 28), Event: 7 DAYS AGO (Oct 21), overdue=nil
EXPECTED: Hide (prevent old birthday spam)
REFACTORED: Uses dynamic timestamps via testutil-time.el"
- (test-chime-overdue-setup)
- (unwind-protect
- (let* ((now (test-time-now))
- (week-ago (test-time-days-ago 7))
- (week-ago-timestamp (test-timestamp-string week-ago t))
- (chime-show-any-overdue-with-day-wide-alerts nil)
- (chime-day-wide-advance-notice nil)
- (event (test-overdue--create-event
- "Week Old Event"
- week-ago-timestamp
- nil)))
- (with-test-time now
- (should-not (chime--display-as-day-wide-event event))))
- (test-chime-overdue-teardown)))
+ (let* ((now (test-time-now))
+ (week-ago (test-time-days-ago 7))
+ (week-ago-timestamp (test-timestamp-string week-ago t))
+ (chime-show-any-overdue-with-day-wide-alerts nil)
+ (chime-day-wide-advance-notice nil)
+ (event (test-overdue--create-event
+ "Week Old Event"
+ week-ago-timestamp
+ nil)))
+ (with-test-time now
+ (should-not (chime--display-as-day-wide-event event)))))
;;; Tests verifying overdue doesn't affect future events
-(ert-deftest test-overdue-future-event-not-affected-by-overdue-setting ()
+(chime-deftest test-overdue-future-event-not-affected-by-overdue-setting ()
"Test that future events are not affected by overdue setting.
TIME: TODAY (Oct 28), Event: 2 DAYS FROM NOW (Oct 30), both overdue settings
EXPECTED: Never display (future events not shown without advance notice)
REFACTORED: Uses dynamic timestamps via testutil-time.el"
- (test-chime-overdue-setup)
- (unwind-protect
- (let* ((now (test-time-now))
- (future (test-time-days-from-now 2))
- (future-timestamp (test-timestamp-string future t))
- (chime-day-wide-advance-notice nil)
- (event (test-overdue--create-event
- "Future Event"
- future-timestamp
- nil)))
- (with-test-time now
- ;; Should NOT show with overdue enabled (it's future, not today)
- (let ((chime-show-any-overdue-with-day-wide-alerts t))
- (should-not (chime--display-as-day-wide-event event)))
- ;; Should NOT show with overdue disabled (it's future, not today)
- (let ((chime-show-any-overdue-with-day-wide-alerts nil))
- (should-not (chime--display-as-day-wide-event event)))))
- (test-chime-overdue-teardown)))
+ (let* ((now (test-time-now))
+ (future (test-time-days-from-now 2))
+ (future-timestamp (test-timestamp-string future t))
+ (chime-day-wide-advance-notice nil)
+ (event (test-overdue--create-event
+ "Future Event"
+ future-timestamp
+ nil)))
+ (with-test-time now
+ ;; Should NOT show with overdue enabled (it's future, not today)
+ (let ((chime-show-any-overdue-with-day-wide-alerts t))
+ (should-not (chime--display-as-day-wide-event event)))
+ ;; Should NOT show with overdue disabled (it's future, not today)
+ (let ((chime-show-any-overdue-with-day-wide-alerts nil))
+ (should-not (chime--display-as-day-wide-event event))))))
(provide 'test-chime-overdue-todos)
;;; test-chime-overdue-todos.el ends here