fix tests

This commit is contained in:
DaKheera47 2026-01-30 09:37:58 +00:00
parent 8e56378794
commit 0e27dbe52b
2 changed files with 41 additions and 13 deletions

View File

@ -129,8 +129,13 @@ export async function stopServer(args: {
closeDb: () => void; closeDb: () => void;
tempDir: string; tempDir: string;
}) { }) {
await new Promise<void>((resolve) => args.server.close(() => resolve())); // Defensive: if startServer throws, callers may still run cleanup.
args.closeDb(); if (args.server) {
await new Promise<void>((resolve) => args.server.close(() => resolve()));
}
if (args.closeDb) {
args.closeDb();
}
await rm(args.tempDir, { recursive: true, force: true }); await rm(args.tempDir, { recursive: true, force: true });
process.env = { ...originalEnv }; process.env = { ...originalEnv };
vi.clearAllMocks(); vi.clearAllMocks();

View File

@ -90,17 +90,42 @@ export function serializeEnvBoolean(value: boolean | null): string | null {
} }
export async function applyStoredEnvOverrides(): Promise<void> { export async function applyStoredEnvOverrides(): Promise<void> {
const overrides = await settingsRepo.getAllSettings(); const safeGetSetting = async (key: SettingKey): Promise<string | null> => {
try {
return await settingsRepo.getSetting(key);
} catch (error) {
// In some test harnesses or first-boot scenarios, the DB may exist but not yet
// have the settings table. Treat this as "no overrides".
const msg = String((error as any)?.message ?? error);
if (msg.includes("no such table") && msg.includes("settings"))
return null;
throw error;
}
};
const safeSetSetting = async (key: SettingKey, value: string | null) => {
try {
await settingsRepo.setSetting(key, value);
} catch (error) {
const msg = String((error as any)?.message ?? error);
if (msg.includes("no such table") && msg.includes("settings")) return;
throw error;
}
};
// Migration: move legacy OpenRouter key to the unified LLM key. // Migration: move legacy OpenRouter key to the unified LLM key.
// //
// Users only see their API keys once. If we simply switch to LLM_API_KEY without // Users only see their API keys once. If we simply switch to LLM_API_KEY without
// copying, they may be unable to recover their existing key. // copying, they may be unable to recover their existing key.
const effectiveProvider = (overrides.llmProvider ?? process.env.LLM_PROVIDER) const providerOverride = await safeGetSetting("llmProvider");
const legacyOpenrouterKey = normalizeEnvInput(
await safeGetSetting("openrouterApiKey"),
);
const unifiedKey = normalizeEnvInput(await safeGetSetting("llmApiKey"));
const effectiveProvider = (providerOverride ?? process.env.LLM_PROVIDER)
?.trim() ?.trim()
.toLowerCase(); .toLowerCase();
const legacyOpenrouterKey = normalizeEnvInput(overrides.openrouterApiKey);
const unifiedKey = normalizeEnvInput(overrides.llmApiKey);
if ( if (
(effectiveProvider ?? "openrouter") === "openrouter" && (effectiveProvider ?? "openrouter") === "openrouter" &&
@ -110,10 +135,8 @@ export async function applyStoredEnvOverrides(): Promise<void> {
console.warn( console.warn(
"[DEPRECATED] Detected stored OpenRouter API key. Migrating to LLM_API_KEY and clearing legacy storage.", "[DEPRECATED] Detected stored OpenRouter API key. Migrating to LLM_API_KEY and clearing legacy storage.",
); );
await settingsRepo.setSetting("llmApiKey", legacyOpenrouterKey); await safeSetSetting("llmApiKey", legacyOpenrouterKey);
await settingsRepo.setSetting("openrouterApiKey", null); await safeSetSetting("openrouterApiKey", null);
overrides.llmApiKey = legacyOpenrouterKey;
delete overrides.openrouterApiKey;
} }
// Migration helper for env-based users: copy OPENROUTER_API_KEY -> LLM_API_KEY // Migration helper for env-based users: copy OPENROUTER_API_KEY -> LLM_API_KEY
@ -133,20 +156,20 @@ export async function applyStoredEnvOverrides(): Promise<void> {
await Promise.all([ await Promise.all([
...readableStringConfig.map(async ({ settingKey, envKey }) => { ...readableStringConfig.map(async ({ settingKey, envKey }) => {
const override = overrides[settingKey] ?? null; const override = await safeGetSetting(settingKey);
if (override === null) return; if (override === null) return;
applyEnvValue(envKey, normalizeEnvInput(override)); applyEnvValue(envKey, normalizeEnvInput(override));
}), }),
...readableBooleanConfig.map( ...readableBooleanConfig.map(
async ({ settingKey, envKey, defaultValue }) => { async ({ settingKey, envKey, defaultValue }) => {
const override = overrides[settingKey] ?? null; const override = await safeGetSetting(settingKey);
if (override === null) return; if (override === null) return;
const parsed = parseEnvBoolean(override, defaultValue); const parsed = parseEnvBoolean(override, defaultValue);
applyEnvValue(envKey, serializeEnvBoolean(parsed)); applyEnvValue(envKey, serializeEnvBoolean(parsed));
}, },
), ),
...privateStringConfig.map(async ({ settingKey, envKey }) => { ...privateStringConfig.map(async ({ settingKey, envKey }) => {
const override = overrides[settingKey] ?? null; const override = await safeGetSetting(settingKey);
if (override === null) return; if (override === null) return;
applyEnvValue(envKey, normalizeEnvInput(override)); applyEnvValue(envKey, normalizeEnvInput(override));
}), }),