aboutsummaryrefslogtreecommitdiff
path: root/tests/test-transcription-api-key.el
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-transcription-api-key.el')
-rw-r--r--tests/test-transcription-api-key.el90
1 files changed, 90 insertions, 0 deletions
diff --git a/tests/test-transcription-api-key.el b/tests/test-transcription-api-key.el
new file mode 100644
index 00000000..01a7a0ea
--- /dev/null
+++ b/tests/test-transcription-api-key.el
@@ -0,0 +1,90 @@
+;;; test-transcription-api-key.el --- Tests for API-key retrieval -*- lexical-binding: t; -*-
+
+;;; Commentary:
+;; Characterization tests for `cj/--get-openai-api-key' and
+;; `cj/--get-assemblyai-api-key'. Pin down current auth-source-search
+;; behavior so the upcoming consolidation into a single parameterized
+;; helper can be verified as a pure refactor.
+
+;;; Code:
+
+(require 'ert)
+(require 'cl-lib)
+
+(defvar cj/custom-keymap (make-sparse-keymap))
+
+(unless (fboundp 'notifications-notify)
+ (defun notifications-notify (&rest _args) nil))
+
+(require 'transcription-config)
+
+;; Captures the most recent :host passed to auth-source-search so each
+;; test can assert that the right host was queried.
+(defvar test-api-key-requested-host nil)
+
+(defmacro test-api-key-with-auth-source (secret-value &rest body)
+ "Run BODY with `auth-source-search' stubbed to return SECRET-VALUE.
+SECRET-VALUE is either a string, a function returning a string, or nil
+\(to simulate no matching entry). The host passed to `auth-source-search'
+is captured in `test-api-key-requested-host'."
+ (declare (indent 1))
+ `(let ((test-api-key-requested-host nil))
+ (cl-letf (((symbol-function 'auth-source-search)
+ (lambda (&rest args)
+ (setq test-api-key-requested-host (plist-get args :host))
+ (when ,secret-value
+ (list (list :secret ,secret-value))))))
+ ,@body)))
+
+;;; Normal Cases — OpenAI
+
+(ert-deftest test-api-key-openai-normal-returns-string-secret ()
+ "OpenAI key retrieval returns the string stored under :secret."
+ (test-api-key-with-auth-source "sk-abc123"
+ (should (equal "sk-abc123" (cj/--get-openai-api-key)))
+ (should (equal "api.openai.com" test-api-key-requested-host))))
+
+(ert-deftest test-api-key-openai-normal-calls-function-secret ()
+ "OpenAI key retrieval invokes :secret when it's a function."
+ (test-api-key-with-auth-source (lambda () "sk-from-fn")
+ (should (equal "sk-from-fn" (cj/--get-openai-api-key)))))
+
+;;; Normal Cases — AssemblyAI
+
+(ert-deftest test-api-key-assemblyai-normal-returns-string-secret ()
+ "AssemblyAI key retrieval returns the string stored under :secret."
+ (test-api-key-with-auth-source "aai-xyz789"
+ (should (equal "aai-xyz789" (cj/--get-assemblyai-api-key)))
+ (should (equal "api.assemblyai.com" test-api-key-requested-host))))
+
+(ert-deftest test-api-key-assemblyai-normal-calls-function-secret ()
+ "AssemblyAI key retrieval invokes :secret when it's a function."
+ (test-api-key-with-auth-source (lambda () "aai-from-fn")
+ (should (equal "aai-from-fn" (cj/--get-assemblyai-api-key)))))
+
+;;; Boundary Cases
+
+(ert-deftest test-api-key-openai-boundary-returns-nil-when-entry-missing ()
+ "OpenAI key retrieval returns nil when auth-source has no matching entry."
+ (test-api-key-with-auth-source nil
+ (should (null (cj/--get-openai-api-key)))))
+
+(ert-deftest test-api-key-assemblyai-boundary-returns-nil-when-entry-missing ()
+ "AssemblyAI key retrieval returns nil when auth-source has no matching entry."
+ (test-api-key-with-auth-source nil
+ (should (null (cj/--get-assemblyai-api-key)))))
+
+(ert-deftest test-api-key-openai-boundary-queries-correct-host ()
+ "OpenAI key retrieval always queries `api.openai.com', never another host."
+ (test-api-key-with-auth-source "sk-x"
+ (cj/--get-openai-api-key)
+ (should (equal "api.openai.com" test-api-key-requested-host))))
+
+(ert-deftest test-api-key-assemblyai-boundary-queries-correct-host ()
+ "AssemblyAI key retrieval always queries `api.assemblyai.com'."
+ (test-api-key-with-auth-source "aai-x"
+ (cj/--get-assemblyai-api-key)
+ (should (equal "api.assemblyai.com" test-api-key-requested-host))))
+
+(provide 'test-transcription-api-key)
+;;; test-transcription-api-key.el ends here