blob: 2fcf7c7184eaf08c5416953c15a4ff37f4da454d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
;;; test-calendar-sync--apply-single-exception.el --- Tests for exception application -*- lexical-binding: t; -*-
;;; Commentary:
;; Tests for calendar-sync--apply-single-exception.
;; Applies exception overrides to an occurrence plist, returning a modified copy.
;;; Code:
(require 'ert)
(require 'testutil-calendar-sync)
(require 'calendar-sync)
;;; Normal Cases
(ert-deftest test-calendar-sync--apply-single-exception-normal-updates-time ()
"Exception start/end override the occurrence times."
(let ((occ (list :start '(2026 3 15 14 0) :end '(2026 3 15 15 0)
:summary "Standup" :uid "abc"))
(exc (list :start '(2026 3 15 16 0) :end '(2026 3 15 17 0))))
(let ((result (calendar-sync--apply-single-exception occ exc)))
(should (equal '(2026 3 15 16 0) (plist-get result :start)))
(should (equal '(2026 3 15 17 0) (plist-get result :end))))))
(ert-deftest test-calendar-sync--apply-single-exception-normal-updates-summary ()
"Exception with summary overrides the occurrence summary."
(let ((occ (list :start '(2026 3 15 14 0) :summary "Original"))
(exc (list :start '(2026 3 15 14 0) :summary "Modified")))
(let ((result (calendar-sync--apply-single-exception occ exc)))
(should (equal "Modified" (plist-get result :summary))))))
(ert-deftest test-calendar-sync--apply-single-exception-normal-preserves-unset-fields ()
"Fields not present in exception are preserved from occurrence."
(let ((occ (list :start '(2026 3 15 14 0) :summary "Keep" :uid "abc"
:location "Room 1"))
(exc (list :start '(2026 3 15 16 0))))
(let ((result (calendar-sync--apply-single-exception occ exc)))
(should (equal "Keep" (plist-get result :summary)))
(should (equal "abc" (plist-get result :uid)))
(should (equal "Room 1" (plist-get result :location))))))
;;; Boundary Cases
(ert-deftest test-calendar-sync--apply-single-exception-boundary-nil-end ()
"Exception without :end preserves occurrence :end."
(let ((occ (list :start '(2026 3 15 14 0) :end '(2026 3 15 15 0)))
(exc (list :start '(2026 3 15 16 0))))
(let ((result (calendar-sync--apply-single-exception occ exc)))
(should (equal '(2026 3 15 15 0) (plist-get result :end))))))
(ert-deftest test-calendar-sync--apply-single-exception-boundary-does-not-mutate ()
"Original occurrence plist is not mutated."
(let ((occ (list :start '(2026 3 15 14 0) :summary "Original"))
(exc (list :start '(2026 3 15 16 0) :summary "Changed")))
(calendar-sync--apply-single-exception occ exc)
(should (equal "Original" (plist-get occ :summary)))))
;;; Error Cases
(ert-deftest test-calendar-sync--apply-single-exception-error-empty-exception ()
"Exception with no fields still returns a valid plist with occurrence data."
(let ((occ (list :start '(2026 3 15 14 0) :summary "Keep"))
(exc (list :start nil)))
(let ((result (calendar-sync--apply-single-exception occ exc)))
(should (equal "Keep" (plist-get result :summary))))))
(provide 'test-calendar-sync--apply-single-exception)
;;; test-calendar-sync--apply-single-exception.el ends here
|