blob: 3d23427086813d1484111df37a5ed0ecc2dd0ec8 (
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
;;; 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))))))
;;; Normal Cases — remaining overridable fields
(ert-deftest test-calendar-sync--apply-single-exception-overrides-description ()
"Normal: an exception :description overrides the occurrence's."
(let ((occ (list :start '(2026 3 15 14 0) :description "old"))
(exc (list :start '(2026 3 15 14 0) :description "new")))
(should (equal "new"
(plist-get (calendar-sync--apply-single-exception occ exc)
:description)))))
(ert-deftest test-calendar-sync--apply-single-exception-overrides-location ()
"Normal: an exception :location overrides the occurrence's."
(let ((occ (list :start '(2026 3 15 14 0) :location "Room A"))
(exc (list :start '(2026 3 15 14 0) :location "Room B")))
(should (equal "Room B"
(plist-get (calendar-sync--apply-single-exception occ exc)
:location)))))
(ert-deftest test-calendar-sync--apply-single-exception-overrides-attendees ()
"Normal: an exception :attendees overrides the occurrence's."
(let ((occ (list :start '(2026 3 15 14 0) :attendees '("a")))
(exc (list :start '(2026 3 15 14 0) :attendees '("b" "c"))))
(should (equal '("b" "c")
(plist-get (calendar-sync--apply-single-exception occ exc)
:attendees)))))
(ert-deftest test-calendar-sync--apply-single-exception-overrides-organizer ()
"Normal: an exception :organizer overrides the occurrence's."
(let ((occ (list :start '(2026 3 15 14 0) :organizer "old@x"))
(exc (list :start '(2026 3 15 14 0) :organizer "new@x")))
(should (equal "new@x"
(plist-get (calendar-sync--apply-single-exception occ exc)
:organizer)))))
(ert-deftest test-calendar-sync--apply-single-exception-overrides-url ()
"Normal: an exception :url overrides the occurrence's."
(let ((occ (list :start '(2026 3 15 14 0) :url "http://old"))
(exc (list :start '(2026 3 15 14 0) :url "http://new")))
(should (equal "http://new"
(plist-get (calendar-sync--apply-single-exception occ exc)
:url)))))
(provide 'test-calendar-sync--apply-single-exception)
;;; test-calendar-sync--apply-single-exception.el ends here
|