summaryrefslogtreecommitdiff
path: root/tests/ss-crm-tests.el
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ss-crm-tests.el')
-rw-r--r--tests/ss-crm-tests.el92
1 files changed, 92 insertions, 0 deletions
diff --git a/tests/ss-crm-tests.el b/tests/ss-crm-tests.el
new file mode 100644
index 0000000..bc88ee4
--- /dev/null
+++ b/tests/ss-crm-tests.el
@@ -0,0 +1,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