63 lines
1.6 KiB
TypeScript
63 lines
1.6 KiB
TypeScript
|
|
import { describe, it, expect, beforeEach, afterEach } from "vitest";
|
|||
|
|
import { mkdtempSync, writeFileSync, rmSync } from "fs";
|
|||
|
|
import { tmpdir } from "os";
|
|||
|
|
import { join } from "path";
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Verifies that ~/.codex.env is parsed (lowest‑priority) when present.
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
describe("user‑wide ~/.codex.env support", () => {
|
|||
|
|
const ORIGINAL_HOME = process.env["HOME"];
|
|||
|
|
const ORIGINAL_API_KEY = process.env["OPENAI_API_KEY"];
|
|||
|
|
|
|||
|
|
let tempHome: string;
|
|||
|
|
|
|||
|
|
beforeEach(() => {
|
|||
|
|
// Create an isolated fake $HOME directory.
|
|||
|
|
tempHome = mkdtempSync(join(tmpdir(), "codex-home-"));
|
|||
|
|
process.env["HOME"] = tempHome;
|
|||
|
|
|
|||
|
|
// Ensure the env var is unset so that the file value is picked up.
|
|||
|
|
delete process.env["OPENAI_API_KEY"];
|
|||
|
|
|
|||
|
|
// Write ~/.codex.env with a dummy key.
|
|||
|
|
writeFileSync(
|
|||
|
|
join(tempHome, ".codex.env"),
|
|||
|
|
"OPENAI_API_KEY=my-home-key\n",
|
|||
|
|
{
|
|||
|
|
encoding: "utf8",
|
|||
|
|
},
|
|||
|
|
);
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
afterEach(() => {
|
|||
|
|
// Cleanup temp directory.
|
|||
|
|
try {
|
|||
|
|
rmSync(tempHome, { recursive: true, force: true });
|
|||
|
|
} catch {
|
|||
|
|
// ignore
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Restore original env.
|
|||
|
|
if (ORIGINAL_HOME !== undefined) {
|
|||
|
|
process.env["HOME"] = ORIGINAL_HOME;
|
|||
|
|
} else {
|
|||
|
|
delete process.env["HOME"];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (ORIGINAL_API_KEY !== undefined) {
|
|||
|
|
process.env["OPENAI_API_KEY"] = ORIGINAL_API_KEY;
|
|||
|
|
} else {
|
|||
|
|
delete process.env["OPENAI_API_KEY"];
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
it("loads the API key from ~/.codex.env when not set elsewhere", async () => {
|
|||
|
|
// Import the config module AFTER setting up the fake env.
|
|||
|
|
const { getApiKey } = await import("../src/utils/config.js");
|
|||
|
|
|
|||
|
|
expect(getApiKey("openai")).toBe("my-home-key");
|
|||
|
|
});
|
|||
|
|
});
|