From 0e27dbe52b04c99fe5f845f80db4ad42ec2d4da3 Mon Sep 17 00:00:00 2001 From: DaKheera47 Date: Fri, 30 Jan 2026 09:37:58 +0000 Subject: [PATCH] fix tests --- .../src/server/api/routes/test-utils.ts | 9 +++- .../src/server/services/envSettings.ts | 45 ++++++++++++++----- 2 files changed, 41 insertions(+), 13 deletions(-) diff --git a/orchestrator/src/server/api/routes/test-utils.ts b/orchestrator/src/server/api/routes/test-utils.ts index d5110a7..952e781 100644 --- a/orchestrator/src/server/api/routes/test-utils.ts +++ b/orchestrator/src/server/api/routes/test-utils.ts @@ -129,8 +129,13 @@ export async function stopServer(args: { closeDb: () => void; tempDir: string; }) { - await new Promise((resolve) => args.server.close(() => resolve())); - args.closeDb(); + // Defensive: if startServer throws, callers may still run cleanup. + if (args.server) { + await new Promise((resolve) => args.server.close(() => resolve())); + } + if (args.closeDb) { + args.closeDb(); + } await rm(args.tempDir, { recursive: true, force: true }); process.env = { ...originalEnv }; vi.clearAllMocks(); diff --git a/orchestrator/src/server/services/envSettings.ts b/orchestrator/src/server/services/envSettings.ts index 611cb19..94375e6 100644 --- a/orchestrator/src/server/services/envSettings.ts +++ b/orchestrator/src/server/services/envSettings.ts @@ -90,17 +90,42 @@ export function serializeEnvBoolean(value: boolean | null): string | null { } export async function applyStoredEnvOverrides(): Promise { - const overrides = await settingsRepo.getAllSettings(); + const safeGetSetting = async (key: SettingKey): Promise => { + 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. // // 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. - 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() .toLowerCase(); - const legacyOpenrouterKey = normalizeEnvInput(overrides.openrouterApiKey); - const unifiedKey = normalizeEnvInput(overrides.llmApiKey); if ( (effectiveProvider ?? "openrouter") === "openrouter" && @@ -110,10 +135,8 @@ export async function applyStoredEnvOverrides(): Promise { console.warn( "[DEPRECATED] Detected stored OpenRouter API key. Migrating to LLM_API_KEY and clearing legacy storage.", ); - await settingsRepo.setSetting("llmApiKey", legacyOpenrouterKey); - await settingsRepo.setSetting("openrouterApiKey", null); - overrides.llmApiKey = legacyOpenrouterKey; - delete overrides.openrouterApiKey; + await safeSetSetting("llmApiKey", legacyOpenrouterKey); + await safeSetSetting("openrouterApiKey", null); } // Migration helper for env-based users: copy OPENROUTER_API_KEY -> LLM_API_KEY @@ -133,20 +156,20 @@ export async function applyStoredEnvOverrides(): Promise { await Promise.all([ ...readableStringConfig.map(async ({ settingKey, envKey }) => { - const override = overrides[settingKey] ?? null; + const override = await safeGetSetting(settingKey); if (override === null) return; applyEnvValue(envKey, normalizeEnvInput(override)); }), ...readableBooleanConfig.map( async ({ settingKey, envKey, defaultValue }) => { - const override = overrides[settingKey] ?? null; + const override = await safeGetSetting(settingKey); if (override === null) return; const parsed = parseEnvBoolean(override, defaultValue); applyEnvValue(envKey, serializeEnvBoolean(parsed)); }, ), ...privateStringConfig.map(async ({ settingKey, envKey }) => { - const override = overrides[settingKey] ?? null; + const override = await safeGetSetting(settingKey); if (override === null) return; applyEnvValue(envKey, normalizeEnvInput(override)); }),