Files
CapaKraken/packages/api/src/__tests__/settings-support.test.ts
T

123 lines
3.5 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
buildSettingsUpdatePayload,
buildSystemSettingsViewModel,
getDefaultScoreWeights,
sanitizeSettingsAuditSnapshot,
} from "../router/settings-support.js";
describe("settings support", () => {
it("builds the admin-facing system settings view model with defaults", () => {
const runtimeSecrets = {
azureOpenAiApiKey: {
configured: true,
activeSource: "environment" as const,
hasStoredValue: true,
envVarNames: ["OPENAI_API_KEY"],
},
azureDalleApiKey: {
configured: false,
activeSource: "none" as const,
hasStoredValue: false,
envVarNames: ["AZURE_DALLE_API_KEY"],
},
geminiApiKey: {
configured: true,
activeSource: "database" as const,
hasStoredValue: true,
envVarNames: ["GEMINI_API_KEY"],
},
smtpPassword: {
configured: false,
activeSource: "none" as const,
hasStoredValue: false,
envVarNames: ["SMTP_PASSWORD"],
},
anonymizationSeed: {
configured: false,
activeSource: "none" as const,
hasStoredValue: false,
envVarNames: ["ANONYMIZATION_SEED"],
},
};
expect(buildSystemSettingsViewModel({
settings: {
aiProvider: "azure",
azureOpenAiEndpoint: "https://example.openai.azure.com",
scoreVisibleRoles: ["ADMIN"],
smtpTls: false,
vacationDefaultDays: 30,
},
runtimeSettings: {
azureOpenAiApiKey: "secret",
smtpPassword: null,
azureDalleApiKey: null,
geminiApiKey: "gemini-secret",
},
runtimeSecrets,
defaultSummaryPrompt: "Summarize this resource.",
})).toEqual({
aiProvider: "azure",
azureOpenAiEndpoint: "https://example.openai.azure.com",
azureOpenAiDeployment: null,
azureApiVersion: "2025-01-01-preview",
aiMaxCompletionTokens: 300,
aiTemperature: 1,
aiSummaryPrompt: null,
defaultSummaryPrompt: "Summarize this resource.",
hasApiKey: true,
runtimeSecrets,
legacyStoredSecretFields: ["azureOpenAiApiKey", "geminiApiKey"],
scoreWeights: getDefaultScoreWeights(),
scoreVisibleRoles: ["ADMIN"],
smtpHost: null,
smtpPort: 587,
smtpUser: null,
smtpFrom: null,
smtpTls: false,
hasSmtpPassword: false,
anonymizationEnabled: false,
anonymizationDomain: "superhartmut.de",
anonymizationMode: "global",
azureDalleDeployment: null,
azureDalleEndpoint: null,
hasDalleApiKey: false,
geminiModel: "gemini-2.5-flash-image",
hasGeminiApiKey: true,
imageProvider: "dalle",
vacationDefaultDays: 30,
timelineUndoMaxSteps: 50,
});
});
it("builds sparse updates and strips secret persistence", () => {
expect(buildSettingsUpdatePayload({
aiProvider: "openai",
azureOpenAiApiKey: "secret",
smtpPassword: "smtp-secret",
aiSummaryPrompt: "",
imageProvider: "gemini",
})).toEqual({
data: {
aiProvider: "openai",
aiSummaryPrompt: null,
imageProvider: "gemini",
},
ignoredSecretFields: ["azureOpenAiApiKey", "smtpPassword"],
});
});
it("sanitizes sensitive fields in audit snapshots", () => {
expect(sanitizeSettingsAuditSnapshot({
azureOpenAiApiKey: "secret",
smtpPassword: null,
aiProvider: "azure",
})).toEqual({
azureOpenAiApiKey: "***",
smtpPassword: null,
aiProvider: "azure",
});
});
});