| import type fs from "node:fs"; |
| import type os from "node:os"; |
| import type path from "node:path"; |
| import { describe, expect, it, vi } from "vitest"; |
| import { resolveTalkApiKey } from "./talk.js"; |
|
|
| describe("talk api key fallback", () => { |
| it("reads ELEVENLABS_API_KEY from profile when env is missing", () => { |
| const existsSync = vi.fn((candidate: string) => candidate.endsWith(".profile")); |
| const readFileSync = vi.fn(() => "export ELEVENLABS_API_KEY=profile-key\n"); |
| const homedir = vi.fn(() => "/tmp/home"); |
|
|
| const value = resolveTalkApiKey( |
| {}, |
| { |
| fs: { existsSync, readFileSync } as unknown as typeof fs, |
| os: { homedir } as unknown as typeof os, |
| path: { join: (...parts: string[]) => parts.join("/") } as unknown as typeof path, |
| }, |
| ); |
|
|
| expect(value).toBe("profile-key"); |
| expect(readFileSync).toHaveBeenCalledOnce(); |
| }); |
|
|
| it("prefers ELEVENLABS_API_KEY env over profile", () => { |
| const existsSync = vi.fn(() => { |
| throw new Error("profile should not be read when env key exists"); |
| }); |
| const readFileSync = vi.fn(() => ""); |
|
|
| const value = resolveTalkApiKey( |
| { ELEVENLABS_API_KEY: "env-key" }, |
| { |
| fs: { existsSync, readFileSync } as unknown as typeof fs, |
| os: { homedir: () => "/tmp/home" } as unknown as typeof os, |
| path: { join: (...parts: string[]) => parts.join("/") } as unknown as typeof path, |
| }, |
| ); |
|
|
| expect(value).toBe("env-key"); |
| expect(existsSync).not.toHaveBeenCalled(); |
| expect(readFileSync).not.toHaveBeenCalled(); |
| }); |
| }); |
|
|