feat: add AI settings controls

This commit is contained in:
2026-04-10 15:40:29 -04:00
parent e01a7ed1ad
commit 12849b2362
16 changed files with 907 additions and 127 deletions

35
tests/ai-routes.test.ts Normal file
View File

@@ -0,0 +1,35 @@
import { describe, expect, test } from "bun:test";
import {
getAiDisabledMessage,
isAdminAiEnabled,
isAiFlagEnabled,
isClientAiEnabled,
} from "@/lib/ai-feature-flags";
describe("AI feature flags", () => {
test("AI admin flag defaults to enabled when unset", () => {
expect(isAdminAiEnabled({})).toBe(true);
});
test("AI admin flag disables routes when explicitly false", () => {
expect(isAdminAiEnabled({ AI_ENABLED: "false" })).toBe(false);
expect(isAdminAiEnabled({ AI_ENABLED: "0" })).toBe(false);
});
test("AI client flag follows NEXT_PUBLIC_AI_ENABLED before server fallback", () => {
expect(
isClientAiEnabled({ NEXT_PUBLIC_AI_ENABLED: "false", AI_ENABLED: "true" }),
).toBe(false);
});
test("truthy and falsy parsing remains explicit and predictable", () => {
expect(isAiFlagEnabled("yes")).toBe(true);
expect(isAiFlagEnabled("off")).toBe(false);
expect(isAiFlagEnabled("unexpected-value")).toBe(true);
});
test("disabled message explains the admin-controlled state", () => {
expect(getAiDisabledMessage().toLowerCase()).toContain("disabled");
expect(getAiDisabledMessage().toLowerCase()).toContain("administrator");
});
});