import { describe, expect, it } from "vitest";
import {
buildStoredAIConfig,
parseAIConfigFromStorage,
sanitizeAIConfigForClient,
} from "@/lib/ai-config";
describe("ai-config security", () => {
it("encrypts keys at rest and decrypts on read", () => {
process.env.AI_CONFIG_ENCRYPTION_KEY = "test-encryption-key-for-unit-tests";
const stored = buildStoredAIConfig({
provider: "openai",
model: "gpt-4-turbo",
apiKeys: {
openai: "sk-test-super-secret",
},
});
expect(stored).not.toContain("sk-test-super-secret");
const parsed = parseAIConfigFromStorage(stored);
expect(parsed.apiKeys.openai).toBe("sk-test-super-secret");
});
it("supports legacy plaintext values for backward compatibility", () => {
const legacy = JSON.stringify({
provider: "openai",
model: "gpt-4-turbo",
apiKeys: { openai: "sk-legacy-plain" },
});
const parsed = parseAIConfigFromStorage(legacy);
expect(parsed.apiKeys.openai).toBe("sk-legacy-plain");
});
it("sanitizes config for client responses", () => {
const redacted = sanitizeAIConfigForClient({
provider: "openai",
model: "gpt-4-turbo",
apiKeys: {
openai: "sk-test-super-secret",
},
});
expect(redacted.apiKeys.openai.isSet).toBe(true);
expect(redacted.apiKeys.openai.masked).toBe("••••cret");
expect(redacted.apiKeys.groq.isSet).toBe(false);
});
});