From 873269cdea6a0c93f7eb25acabce8b72f8be6126 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Fri, 6 Mar 2026 20:40:23 -0600 Subject: test(gptel): add unit tests for ai-config, remove dead cj/gptel-backends - Add testutil-ai-config.el with gptel stubs for batch testing - Add tests for cj/gptel--model-to-string (9 tests) - Add tests for cj/gptel--fresh-org-prefix (8 tests) - Add tests for cj/gptel-backend-and-model (8 tests) - Remove dead cj/gptel-backends defvar (duplicates cj/gptel--available-backends) Co-Authored-By: Claude Opus 4.6 --- tests/test-ai-config-model-to-string.el | 60 +++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 tests/test-ai-config-model-to-string.el (limited to 'tests/test-ai-config-model-to-string.el') diff --git a/tests/test-ai-config-model-to-string.el b/tests/test-ai-config-model-to-string.el new file mode 100644 index 00000000..aa114927 --- /dev/null +++ b/tests/test-ai-config-model-to-string.el @@ -0,0 +1,60 @@ +;;; test-ai-config-model-to-string.el --- Tests for cj/gptel--model-to-string -*- lexical-binding: t; -*- + +;;; Commentary: +;; Tests for cj/gptel--model-to-string from ai-config.el. +;; +;; Pure function that converts a model identifier (string, symbol, or +;; other type) to a string representation. Branches on input type: +;; string (identity), symbol (symbol-name), fallback (format). + +;;; Code: + +(require 'ert) + +(add-to-list 'load-path (expand-file-name "tests" user-emacs-directory)) +(add-to-list 'load-path (expand-file-name "modules" user-emacs-directory)) +(require 'testutil-ai-config) +(require 'ai-config) + +;;; Normal Cases + +(ert-deftest test-ai-config-model-to-string-normal-string-returns-string () + "String model name should be returned unchanged." + (should (equal (cj/gptel--model-to-string "claude-opus-4-6") "claude-opus-4-6"))) + +(ert-deftest test-ai-config-model-to-string-normal-symbol-returns-symbol-name () + "Symbol model name should return its symbol-name." + (should (equal (cj/gptel--model-to-string 'gpt-4o) "gpt-4o"))) + +(ert-deftest test-ai-config-model-to-string-normal-number-returns-formatted () + "Numeric input should be formatted as a string." + (should (equal (cj/gptel--model-to-string 42) "42"))) + +;;; Boundary Cases + +(ert-deftest test-ai-config-model-to-string-boundary-empty-string-returns-empty () + "Empty string should be returned as empty string." + (should (equal (cj/gptel--model-to-string "") ""))) + +(ert-deftest test-ai-config-model-to-string-boundary-nil-returns-nil-string () + "Nil is a symbol, so should return \"nil\"." + (should (equal (cj/gptel--model-to-string nil) "nil"))) + +(ert-deftest test-ai-config-model-to-string-boundary-keyword-symbol-includes-colon () + "Keyword symbol should return its name including the colon." + (should (equal (cj/gptel--model-to-string :some-model) ":some-model"))) + +(ert-deftest test-ai-config-model-to-string-boundary-list-uses-format-fallback () + "List input should hit the fallback format branch." + (should (equal (cj/gptel--model-to-string '(a b)) "(a b)"))) + +(ert-deftest test-ai-config-model-to-string-boundary-vector-uses-format-fallback () + "Vector input should hit the fallback format branch." + (should (equal (cj/gptel--model-to-string [1 2]) "[1 2]"))) + +(ert-deftest test-ai-config-model-to-string-boundary-string-with-spaces-unchanged () + "String with spaces should be returned unchanged." + (should (equal (cj/gptel--model-to-string "model with spaces") "model with spaces"))) + +(provide 'test-ai-config-model-to-string) +;;; test-ai-config-model-to-string.el ends here -- cgit v1.2.3