aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-05-14 08:07:33 -0500
committerCraig Jennings <c@cjennings.net>2026-05-14 08:07:33 -0500
commit07246a1dd76e136bfee057ff993e9b3e152e03e3 (patch)
tree70b1a161767fa5eedf21db98c02ac52e14da5261 /tests
parentfe01f885df36016315d87ba8064e28b14fc77d72 (diff)
downloaddotemacs-07246a1dd76e136bfee057ff993e9b3e152e03e3.tar.gz
dotemacs-07246a1dd76e136bfee057ff993e9b3e152e03e3.zip
feat(telega-config): guard launcher with a helpful message when telega is missing
Without the guard, both `C-; G' and the dashboard Telegram icon trigger telega's autoload stub directly. When the package isn't installed yet the user sees `Cannot open load file: telega' in `*Messages*' with no hint about what to do. Wrap the launcher in `cj/telega' that checks `featurep' / `locate-library' first. If telega is present, delegate to it. Otherwise signal a `user-error' pointing at `scripts/setup-telega.sh' and the manual `M-x package-install RET telega' fallback. Rebind `C-; G' and the dashboard "g" key + Telegram icon callback to the wrapper. Two new tests in `test-telega-config.el' cover the wrapper paths (absent -> user-error with the recovery hint; present -> delegates to `telega') alongside the updated binding assertion.
Diffstat (limited to 'tests')
-rw-r--r--tests/test-telega-config.el29
1 files changed, 27 insertions, 2 deletions
diff --git a/tests/test-telega-config.el b/tests/test-telega-config.el
index ace96555f..c642d1f67 100644
--- a/tests/test-telega-config.el
+++ b/tests/test-telega-config.el
@@ -18,8 +18,33 @@
(should (featurep 'telega-config)))
(ert-deftest test-telega-config-launcher-binding-is-telega ()
- "Normal: =C-; G= invokes `telega'."
- (should (eq (keymap-lookup cj/custom-keymap "G") #'telega)))
+ "Normal: =C-; G= invokes the launcher wrapper, which routes to
+`telega' when installed or signals a helpful user-error otherwise."
+ (should (eq (keymap-lookup cj/custom-keymap "G") #'cj/telega)))
+
+(ert-deftest test-telega-config-launcher-without-package-signals-user-error ()
+ "Error: with telega absent, the launcher signals a `user-error' that
+mentions the recovery path instead of falling through to the autoload
+stub's cryptic load-file failure."
+ (cl-letf (((symbol-function 'featurep)
+ (lambda (sym &optional _sub)
+ (and (not (eq sym 'telega)) t)))
+ ((symbol-function 'locate-library)
+ (lambda (lib &rest _) (unless (equal lib "telega") t))))
+ (let* ((err (should-error (cj/telega) :type 'user-error))
+ (msg (error-message-string err)))
+ (should (string-match-p "telega not installed" msg))
+ (should (string-match-p "setup-telega\\.sh\\|package-install" msg)))))
+
+(ert-deftest test-telega-config-launcher-with-package-calls-telega ()
+ "Normal: with telega loadable, the launcher delegates to `telega'."
+ (let (called)
+ (cl-letf (((symbol-function 'featurep)
+ (lambda (sym &optional _sub) (eq sym 'telega)))
+ ((symbol-function 'telega)
+ (lambda (&rest _) (setq called t))))
+ (cj/telega))
+ (should called)))
(provide 'test-telega-config)
;;; test-telega-config.el ends here