fix tests
This commit is contained in:
parent
8e56378794
commit
0e27dbe52b
@ -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();
|
||||||
|
|||||||
@ -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));
|
||||||
}),
|
}),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user