import fs from "node:fs/promises"; import path from "node:path"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { withTempHome } from "./test-helpers.js"; describe("talk api key fallback", () => { let previousEnv: string | undefined; beforeEach(() => { previousEnv = process.env.ELEVENLABS_API_KEY; delete process.env.ELEVENLABS_API_KEY; }); afterEach(() => { process.env.ELEVENLABS_API_KEY = previousEnv; }); it("injects talk.apiKey from profile when config is missing", async () => { await withTempHome(async (home) => { await fs.writeFile( path.join(home, ".profile"), "export ELEVENLABS_API_KEY=profile-key\n", "utf-8", ); vi.resetModules(); const { readConfigFileSnapshot } = await import("./config.js"); const snap = await readConfigFileSnapshot(); expect(snap.config?.talk?.apiKey).toBe("profile-key"); expect(snap.exists).toBe(false); }); }); it("prefers ELEVENLABS_API_KEY env over profile", async () => { await withTempHome(async (home) => { await fs.writeFile( path.join(home, ".profile"), "export ELEVENLABS_API_KEY=profile-key\n", "utf-8", ); process.env.ELEVENLABS_API_KEY = "env-key"; vi.resetModules(); const { readConfigFileSnapshot } = await import("./config.js"); const snap = await readConfigFileSnapshot(); expect(snap.config?.talk?.apiKey).toBe("env-key"); }); }); });