mirror of
https://git.zavage.net/Zavage-Software/search-with-chatgpt-powered-by-openai-extension.git
synced 2026-08-31 22:20:47 -06:00
feat: add settings defaults and validation with unit tests
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
import test from "node:test";
|
||||
import assert from "node:assert/strict";
|
||||
|
||||
import { DEFAULT_SETTINGS } from "../lib/defaults.js";
|
||||
import { mergeSettings } from "../lib/settings.js";
|
||||
|
||||
test("empty object yields the defaults", () => {
|
||||
assert.deepEqual(mergeSettings({}), DEFAULT_SETTINGS);
|
||||
});
|
||||
|
||||
test("null and undefined yield the defaults", () => {
|
||||
assert.deepEqual(mergeSettings(null), DEFAULT_SETTINGS);
|
||||
assert.deepEqual(mergeSettings(undefined), DEFAULT_SETTINGS);
|
||||
});
|
||||
|
||||
test("a non-object yields the defaults", () => {
|
||||
assert.deepEqual(mergeSettings("nonsense"), DEFAULT_SETTINGS);
|
||||
assert.deepEqual(mergeSettings(42), DEFAULT_SETTINGS);
|
||||
});
|
||||
|
||||
test("valid stored values are preserved", () => {
|
||||
assert.deepEqual(
|
||||
mergeSettings({
|
||||
model: "auto",
|
||||
temporaryChat: true,
|
||||
webSearch: true,
|
||||
openIn: "new-window",
|
||||
promptTemplate: "Explain: {query}",
|
||||
}),
|
||||
{
|
||||
model: "auto",
|
||||
temporaryChat: true,
|
||||
webSearch: true,
|
||||
openIn: "new-window",
|
||||
promptTemplate: "Explain: {query}",
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
test("missing keys fall back individually", () => {
|
||||
const merged = mergeSettings({ model: "auto" });
|
||||
assert.equal(merged.model, "auto");
|
||||
assert.equal(merged.temporaryChat, DEFAULT_SETTINGS.temporaryChat);
|
||||
assert.equal(merged.promptTemplate, DEFAULT_SETTINGS.promptTemplate);
|
||||
});
|
||||
|
||||
test("unknown keys are dropped", () => {
|
||||
const merged = mergeSettings({ model: "auto", nope: "gone", openInn: "typo" });
|
||||
assert.deepEqual(Object.keys(merged).sort(), Object.keys(DEFAULT_SETTINGS).sort());
|
||||
assert.equal("nope" in merged, false);
|
||||
});
|
||||
|
||||
test("wrong types fall back to the default", () => {
|
||||
const merged = mergeSettings({
|
||||
model: 123,
|
||||
temporaryChat: "yes",
|
||||
webSearch: 1,
|
||||
promptTemplate: [],
|
||||
});
|
||||
assert.equal(merged.model, DEFAULT_SETTINGS.model);
|
||||
assert.equal(merged.temporaryChat, DEFAULT_SETTINGS.temporaryChat);
|
||||
assert.equal(merged.webSearch, DEFAULT_SETTINGS.webSearch);
|
||||
assert.equal(merged.promptTemplate, DEFAULT_SETTINGS.promptTemplate);
|
||||
});
|
||||
|
||||
test("an out-of-range openIn falls back to the default", () => {
|
||||
assert.equal(mergeSettings({ openIn: "teleport" }).openIn, DEFAULT_SETTINGS.openIn);
|
||||
assert.equal(mergeSettings({ openIn: "" }).openIn, DEFAULT_SETTINGS.openIn);
|
||||
});
|
||||
|
||||
test("each documented openIn value is accepted", () => {
|
||||
for (const value of ["new-tab", "background-tab", "new-window"]) {
|
||||
assert.equal(mergeSettings({ openIn: value }).openIn, value);
|
||||
}
|
||||
});
|
||||
|
||||
test("mergeSettings does not mutate DEFAULT_SETTINGS", () => {
|
||||
mergeSettings({ model: "mutated" });
|
||||
assert.equal(DEFAULT_SETTINGS.model, "");
|
||||
});
|
||||
Reference in New Issue
Block a user