summaryrefslogtreecommitdiff
path: root/tests/ss-crm-tests.el
blob: bc88ee4e39d6f7b034d7113298b47e19667225c9 (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
;;; ss-crm-tests.el --- Tests for ss-crm -*- lexical-binding: t; -*-

;;; Commentary:

;; Focused ERT coverage for CRM lookup and prompt helpers.

;;; Code:

(add-to-list 'load-path (expand-file-name "../lisp" (file-name-directory load-file-name)))

(require 'ert)
(require 'cl-lib)
(require 'ss-crm)

(ert-deftest ss-crm-known-property-values-sorts-and-deduplicates ()
  (cl-letf (((symbol-function 'ss-crm-entries)
             (lambda ()
               (list (list :role "Engineer")
                     (list :role " engineer ")
                     (list :role "Architect")
                     (list :role "")
                     (list :role nil)))))
    (should (equal (ss-crm-known-property-values "ROLE")
                   '(" engineer " "Architect" "Engineer")))))

(ert-deftest ss-crm-known-person-names-returns-sorted-top-level-names ()
  (cl-letf (((symbol-function 'ss-crm-entries)
             (lambda ()
               (list (list :name "Zoe")
                     (list :name "Alice")
                     (list :name "Bob")))))
    (should (equal (ss-crm-known-person-names)
                   '("Alice" "Bob" "Zoe")))))

(ert-deftest ss-crm-lookup-values-merges-seeded-and-derived-values ()
  (cl-letf (((symbol-function 'ss-crm-known-property-values)
             (lambda (_property)
               '("Team B" "Team A"))))
    (should (equal (ss-crm-lookup-values "TEAM" '("Team A" "Team C"))
                   '("Team A" "Team B" "Team C")))))

(ert-deftest ss-crm-read-choice-returns-nil-for-none-selection ()
  (cl-letf (((symbol-function 'completing-read)
             (lambda (&rest _args)
               "[none]")))
    (should-not (ss-crm-read-choice "Role: " '("Engineer")
                                    :allow-blank t
                                    :allow-new t))))

(ert-deftest ss-crm-read-choice-warns-on-new-case-insensitive-duplicate ()
  (let (warning)
    (cl-letf (((symbol-function 'completing-read)
               (lambda (&rest _args)
                 "sydney"))
              ((symbol-function 'yes-or-no-p)
               (lambda (&rest _args)
                 t))
              ((symbol-function 'display-warning)
               (lambda (_type message &rest _args)
                 (setq warning message))))
      (should (equal (ss-crm-read-choice "Location: " '("Sydney")
                                         :allow-blank t
                                         :allow-new t)
                     "sydney"))
      (should (string-match-p "Sydney" warning)))))

(ert-deftest ss-crm-read-choice-does-not-warn-for-existing-selection ()
  (let (warning)
    (cl-letf (((symbol-function 'completing-read)
               (lambda (&rest _args)
                 "Sydney"))
              ((symbol-function 'display-warning)
               (lambda (_type message &rest _args)
                 (setq warning message))))
      (should (equal (ss-crm-read-choice "Location: " '("Sydney" "sydney")
                                         :allow-blank t
                                         :allow-new t
                                         :require-match t)
                     "Sydney"))
      (should-not warning))))

(ert-deftest ss-crm-read-manager-uses-known-person-names ()
  (cl-letf (((symbol-function 'ss-crm-known-person-names)
             (lambda ()
               '("Alice" "Bob")))
            ((symbol-function 'ss-crm-read-choice)
             (lambda (_prompt choices &rest _plist)
               choices)))
    (should (equal (ss-crm-read-manager)
                   '("Alice" "Bob")))))

;;; ss-crm-tests.el ends here