diff options
Diffstat (limited to 'tests/test-video-audio-recording-get-devices.el')
| -rw-r--r-- | tests/test-video-audio-recording-get-devices.el | 190 |
1 files changed, 190 insertions, 0 deletions
diff --git a/tests/test-video-audio-recording-get-devices.el b/tests/test-video-audio-recording-get-devices.el new file mode 100644 index 00000000..ba7d95b9 --- /dev/null +++ b/tests/test-video-audio-recording-get-devices.el @@ -0,0 +1,190 @@ +;;; test-video-audio-recording-get-devices.el --- Tests for cj/recording-get-devices -*- lexical-binding: t; -*- + +;;; Commentary: +;; Unit tests for cj/recording-get-devices function. +;; Tests device prompting and validation workflow. +;; +;; NOTE: This function was refactored to use interactive prompts instead of +;; auto-detection. It now prompts the user with y-or-n-p and calls either +;; cj/recording-quick-setup-for-calls or cj/recording-select-devices. + +;;; Code: + +(require 'ert) + +;; Stub dependencies before loading the module +(defvar cj/custom-keymap (make-sparse-keymap) + "Stub keymap for testing.") + +;; Now load the actual production module +(require 'video-audio-recording) + +;;; Setup and Teardown + +(defun test-get-devices-setup () + "Reset device variables before each test." + (setq cj/recording-mic-device nil) + (setq cj/recording-system-device nil)) + +(defun test-get-devices-teardown () + "Clean up device variables after each test." + (setq cj/recording-mic-device nil) + (setq cj/recording-system-device nil)) + +;;; Normal Cases + +(ert-deftest test-video-audio-recording-get-devices-normal-returns-preset-devices () + "Test that already-configured devices are returned without prompting." + (test-get-devices-setup) + (unwind-protect + (progn + (setq cj/recording-mic-device "preset-mic") + (setq cj/recording-system-device "preset-monitor") + (let ((result (cj/recording-get-devices))) + (should (consp result)) + (should (equal "preset-mic" (car result))) + (should (equal "preset-monitor" (cdr result))))) + (test-get-devices-teardown))) + +(ert-deftest test-video-audio-recording-get-devices-normal-prompts-when-not-configured () + "Test that function prompts user when devices not configured." + (test-get-devices-setup) + (unwind-protect + (let ((prompt-called nil)) + (cl-letf (((symbol-function 'y-or-n-p) + (lambda (_prompt) (setq prompt-called t) t)) + ((symbol-function 'cj/recording-quick-setup-for-calls) + (lambda () + (setq cj/recording-mic-device "quick-mic") + (setq cj/recording-system-device "quick-monitor")))) + (cj/recording-get-devices) + (should prompt-called))) + (test-get-devices-teardown))) + +(ert-deftest test-video-audio-recording-get-devices-normal-calls-quick-setup-on-yes () + "Test that function calls quick setup when user answers yes." + (test-get-devices-setup) + (unwind-protect + (let ((quick-setup-called nil)) + (cl-letf (((symbol-function 'y-or-n-p) + (lambda (_prompt) t)) + ((symbol-function 'cj/recording-quick-setup-for-calls) + (lambda () + (setq quick-setup-called t) + (setq cj/recording-mic-device "quick-mic") + (setq cj/recording-system-device "quick-monitor")))) + (cj/recording-get-devices) + (should quick-setup-called))) + (test-get-devices-teardown))) + +(ert-deftest test-video-audio-recording-get-devices-normal-calls-select-devices-on-no () + "Test that function calls manual selection when user answers no." + (test-get-devices-setup) + (unwind-protect + (let ((select-called nil)) + (cl-letf (((symbol-function 'y-or-n-p) + (lambda (_prompt) nil)) + ((symbol-function 'cj/recording-select-devices) + (lambda () + (setq select-called t) + (setq cj/recording-mic-device "manual-mic") + (setq cj/recording-system-device "manual-monitor")))) + (cj/recording-get-devices) + (should select-called))) + (test-get-devices-teardown))) + +(ert-deftest test-video-audio-recording-get-devices-normal-returns-cons-cell () + "Test that function returns (mic . monitor) cons cell." + (test-get-devices-setup) + (unwind-protect + (cl-letf (((symbol-function 'y-or-n-p) + (lambda (_prompt) t)) + ((symbol-function 'cj/recording-quick-setup-for-calls) + (lambda () + (setq cj/recording-mic-device "test-mic") + (setq cj/recording-system-device "test-monitor")))) + (let ((result (cj/recording-get-devices))) + (should (consp result)) + (should (equal "test-mic" (car result))) + (should (equal "test-monitor" (cdr result))))) + (test-get-devices-teardown))) + +;;; Boundary Cases + +(ert-deftest test-video-audio-recording-get-devices-boundary-only-mic-set-prompts () + "Test that function prompts even when only mic is set." + (test-get-devices-setup) + (unwind-protect + (progn + (setq cj/recording-mic-device "preset-mic") + (setq cj/recording-system-device nil) + (let ((prompt-called nil)) + (cl-letf (((symbol-function 'y-or-n-p) + (lambda (_prompt) (setq prompt-called t) t)) + ((symbol-function 'cj/recording-quick-setup-for-calls) + (lambda () + (setq cj/recording-mic-device "new-mic") + (setq cj/recording-system-device "new-monitor")))) + (cj/recording-get-devices) + (should prompt-called)))) + (test-get-devices-teardown))) + +(ert-deftest test-video-audio-recording-get-devices-boundary-only-monitor-set-prompts () + "Test that function prompts even when only monitor is set." + (test-get-devices-setup) + (unwind-protect + (progn + (setq cj/recording-mic-device nil) + (setq cj/recording-system-device "preset-monitor") + (let ((prompt-called nil)) + (cl-letf (((symbol-function 'y-or-n-p) + (lambda (_prompt) (setq prompt-called t) t)) + ((symbol-function 'cj/recording-quick-setup-for-calls) + (lambda () + (setq cj/recording-mic-device "new-mic") + (setq cj/recording-system-device "new-monitor")))) + (cj/recording-get-devices) + (should prompt-called)))) + (test-get-devices-teardown))) + +;;; Error Cases + +(ert-deftest test-video-audio-recording-get-devices-error-setup-fails-signals-error () + "Test that function signals error when setup fails to set devices." + (test-get-devices-setup) + (unwind-protect + (cl-letf (((symbol-function 'y-or-n-p) + (lambda (_prompt) t)) + ((symbol-function 'cj/recording-quick-setup-for-calls) + (lambda () nil))) ;; Setup fails - doesn't set devices + (should-error (cj/recording-get-devices) :type 'user-error)) + (test-get-devices-teardown))) + +(ert-deftest test-video-audio-recording-get-devices-error-message-mentions-setup-commands () + "Test that error message guides user to setup commands." + (test-get-devices-setup) + (unwind-protect + (cl-letf (((symbol-function 'y-or-n-p) + (lambda (_prompt) t)) + ((symbol-function 'cj/recording-quick-setup-for-calls) + (lambda () nil))) + (condition-case err + (cj/recording-get-devices) + (user-error + (should (string-match-p "C-; r c" (error-message-string err))) + (should (string-match-p "C-; r s" (error-message-string err)))))) + (test-get-devices-teardown))) + +(ert-deftest test-video-audio-recording-get-devices-error-select-devices-fails () + "Test that function signals error when manual selection fails." + (test-get-devices-setup) + (unwind-protect + (cl-letf (((symbol-function 'y-or-n-p) + (lambda (_prompt) nil)) + ((symbol-function 'cj/recording-select-devices) + (lambda () nil))) ;; Manual selection fails + (should-error (cj/recording-get-devices) :type 'user-error)) + (test-get-devices-teardown))) + +(provide 'test-video-audio-recording-get-devices) +;;; test-video-audio-recording-get-devices.el ends here |
