80 lines
2.1 KiB
TypeScript
80 lines
2.1 KiB
TypeScript
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
|
|
const dotenvState = vi.hoisted(() => {
|
|
const state = {
|
|
profileAtDotenvLoad: undefined as string | undefined,
|
|
};
|
|
return {
|
|
state,
|
|
loadDotEnv: vi.fn(() => {
|
|
state.profileAtDotenvLoad = process.env.OPENCLAW_PROFILE;
|
|
}),
|
|
};
|
|
});
|
|
|
|
vi.mock("../infra/dotenv.js", () => ({
|
|
loadDotEnv: dotenvState.loadDotEnv,
|
|
}));
|
|
|
|
vi.mock("../infra/env.js", () => ({
|
|
normalizeEnv: vi.fn(),
|
|
}));
|
|
|
|
vi.mock("../infra/runtime-guard.js", () => ({
|
|
assertSupportedRuntime: vi.fn(),
|
|
}));
|
|
|
|
vi.mock("../infra/path-env.js", () => ({
|
|
ensureOpenClawCliOnPath: vi.fn(),
|
|
}));
|
|
|
|
vi.mock("./route.js", () => ({
|
|
tryRouteCli: vi.fn(async () => true),
|
|
}));
|
|
|
|
vi.mock("./windows-argv.js", () => ({
|
|
normalizeWindowsArgv: (argv: string[]) => argv,
|
|
}));
|
|
|
|
import { runCli } from "./run-main.js";
|
|
|
|
describe("runCli profile env bootstrap", () => {
|
|
const originalProfile = process.env.OPENCLAW_PROFILE;
|
|
const originalStateDir = process.env.OPENCLAW_STATE_DIR;
|
|
const originalConfigPath = process.env.OPENCLAW_CONFIG_PATH;
|
|
|
|
beforeEach(() => {
|
|
delete process.env.OPENCLAW_PROFILE;
|
|
delete process.env.OPENCLAW_STATE_DIR;
|
|
delete process.env.OPENCLAW_CONFIG_PATH;
|
|
dotenvState.state.profileAtDotenvLoad = undefined;
|
|
dotenvState.loadDotEnv.mockClear();
|
|
});
|
|
|
|
afterEach(() => {
|
|
if (originalProfile === undefined) {
|
|
delete process.env.OPENCLAW_PROFILE;
|
|
} else {
|
|
process.env.OPENCLAW_PROFILE = originalProfile;
|
|
}
|
|
if (originalStateDir === undefined) {
|
|
delete process.env.OPENCLAW_STATE_DIR;
|
|
} else {
|
|
process.env.OPENCLAW_STATE_DIR = originalStateDir;
|
|
}
|
|
if (originalConfigPath === undefined) {
|
|
delete process.env.OPENCLAW_CONFIG_PATH;
|
|
} else {
|
|
process.env.OPENCLAW_CONFIG_PATH = originalConfigPath;
|
|
}
|
|
});
|
|
|
|
it("applies --profile before dotenv loading", async () => {
|
|
await runCli(["node", "openclaw", "--profile", "rawdog", "status"]);
|
|
|
|
expect(dotenvState.loadDotEnv).toHaveBeenCalledOnce();
|
|
expect(dotenvState.state.profileAtDotenvLoad).toBe("rawdog");
|
|
expect(process.env.OPENCLAW_PROFILE).toBe("rawdog");
|
|
});
|
|
});
|