blob: 523f9a9f3e6756d21890fc2c265490a655d54916 (
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
|
;;; test-calendar-sync--find-user-status.el --- Tests for find-user-status -*- lexical-binding: t; -*-
;;; Commentary:
;; Unit tests for calendar-sync--find-user-status function.
;; Given attendees list and user emails, returns user's PARTSTAT as lowercase string.
;; Covers Normal, Boundary, and Error cases.
;;; Code:
(require 'ert)
(require 'testutil-calendar-sync)
(require 'calendar-sync)
;;; Test Data
(defun test-find-user-status--make-attendees ()
"Create sample attendees list for testing."
(list (list :cn "Alice" :email "alice@example.com" :partstat "ACCEPTED" :role "REQ-PARTICIPANT")
(list :cn "Craig" :email "craig@example.com" :partstat "ACCEPTED" :role "REQ-PARTICIPANT")
(list :cn "Bob" :email "bob@example.com" :partstat "DECLINED" :role "OPT-PARTICIPANT")))
;;; Normal Cases
(ert-deftest test-calendar-sync--find-user-status-normal-accepted ()
"Test finding user who accepted."
(let ((attendees (test-find-user-status--make-attendees))
(emails '("craig@example.com")))
(should (string= "accepted"
(calendar-sync--find-user-status attendees emails)))))
(ert-deftest test-calendar-sync--find-user-status-normal-declined ()
"Test finding user who declined."
(let ((attendees (test-find-user-status--make-attendees))
(emails '("bob@example.com")))
(should (string= "declined"
(calendar-sync--find-user-status attendees emails)))))
(ert-deftest test-calendar-sync--find-user-status-normal-tentative ()
"Test finding user with tentative status."
(let ((attendees (list (list :cn "Test" :email "test@example.com" :partstat "TENTATIVE")))
(emails '("test@example.com")))
(should (string= "tentative"
(calendar-sync--find-user-status attendees emails)))))
(ert-deftest test-calendar-sync--find-user-status-normal-needs-action ()
"Test finding user with needs-action status."
(let ((attendees (list (list :cn "Test" :email "test@example.com" :partstat "NEEDS-ACTION")))
(emails '("test@example.com")))
(should (string= "needs-action"
(calendar-sync--find-user-status attendees emails)))))
;;; Boundary Cases
(ert-deftest test-calendar-sync--find-user-status-boundary-not-in-list ()
"Test user not in attendee list returns nil."
(let ((attendees (test-find-user-status--make-attendees))
(emails '("stranger@example.com")))
(should (null (calendar-sync--find-user-status attendees emails)))))
(ert-deftest test-calendar-sync--find-user-status-boundary-empty-attendees ()
"Test empty attendee list returns nil."
(should (null (calendar-sync--find-user-status '() '("test@example.com")))))
(ert-deftest test-calendar-sync--find-user-status-boundary-multiple-emails ()
"Test matching on second email in user emails list."
(let ((attendees (test-find-user-status--make-attendees))
(emails '("primary@other.com" "craig@example.com")))
(should (string= "accepted"
(calendar-sync--find-user-status attendees emails)))))
(ert-deftest test-calendar-sync--find-user-status-boundary-case-insensitive ()
"Test case-insensitive email matching."
(let ((attendees (list (list :cn "Test" :email "Craig@Example.COM" :partstat "ACCEPTED")))
(emails '("craig@example.com")))
(should (string= "accepted"
(calendar-sync--find-user-status attendees emails)))))
;;; Error Cases
(ert-deftest test-calendar-sync--find-user-status-error-nil-attendees ()
"Test nil attendees returns nil."
(should (null (calendar-sync--find-user-status nil '("test@example.com")))))
(ert-deftest test-calendar-sync--find-user-status-error-nil-emails ()
"Test nil emails list returns nil."
(should (null (calendar-sync--find-user-status (test-find-user-status--make-attendees) nil))))
(provide 'test-calendar-sync--find-user-status)
;;; test-calendar-sync--find-user-status.el ends here
|