;;; 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