diff options
Diffstat (limited to 'tests/ss-crm-tests.el')
| -rw-r--r-- | tests/ss-crm-tests.el | 92 |
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 |
