mirror of
https://github.com/moltbot/moltbot.git
synced 2026-04-20 21:23:23 +00:00
test(gateway): cover live helper env isolation
This commit is contained in:
95
src/gateway/gateway-cli-backend.live-helpers.test.ts
Normal file
95
src/gateway/gateway-cli-backend.live-helpers.test.ts
Normal file
@@ -0,0 +1,95 @@
|
||||
import { afterEach, describe, expect, it, vi } from "vitest";
|
||||
import { GATEWAY_CLIENT_MODES, GATEWAY_CLIENT_NAMES } from "../utils/message-channel.js";
|
||||
|
||||
const gatewayClientState = vi.hoisted(() => ({
|
||||
lastOptions: undefined as Record<string, unknown> | undefined,
|
||||
}));
|
||||
|
||||
vi.mock("./client.js", () => ({
|
||||
GatewayClient: class MockGatewayClient {
|
||||
constructor(options: Record<string, unknown>) {
|
||||
gatewayClientState.lastOptions = options;
|
||||
}
|
||||
|
||||
start() {
|
||||
const options = gatewayClientState.lastOptions as
|
||||
| { onHelloOk?: (hello: { type: "hello-ok" }) => void }
|
||||
| undefined;
|
||||
queueMicrotask(() => options?.onHelloOk?.({ type: "hello-ok" }));
|
||||
}
|
||||
|
||||
async stopAndWait() {}
|
||||
},
|
||||
}));
|
||||
|
||||
describe("gateway cli backend live helpers", () => {
|
||||
afterEach(() => {
|
||||
gatewayClientState.lastOptions = undefined;
|
||||
delete process.env.OPENCLAW_SKIP_CHANNELS;
|
||||
delete process.env.OPENCLAW_SKIP_GMAIL_WATCHER;
|
||||
delete process.env.OPENCLAW_SKIP_CRON;
|
||||
delete process.env.OPENCLAW_SKIP_CANVAS_HOST;
|
||||
delete process.env.OPENCLAW_SKIP_BROWSER_CONTROL_SERVER;
|
||||
delete process.env.OPENCLAW_TEST_MINIMAL_GATEWAY;
|
||||
delete process.env.ANTHROPIC_API_KEY;
|
||||
delete process.env.ANTHROPIC_API_KEY_OLD;
|
||||
});
|
||||
|
||||
it("applies and restores live env including minimal gateway mode", async () => {
|
||||
const { applyCliBackendLiveEnv, restoreCliBackendLiveEnv, snapshotCliBackendLiveEnv } =
|
||||
await import("./gateway-cli-backend.live-helpers.js");
|
||||
|
||||
process.env.OPENCLAW_SKIP_CHANNELS = "old-channels";
|
||||
process.env.OPENCLAW_SKIP_GMAIL_WATCHER = "old-gmail";
|
||||
process.env.OPENCLAW_SKIP_CRON = "old-cron";
|
||||
process.env.OPENCLAW_SKIP_CANVAS_HOST = "old-canvas";
|
||||
process.env.OPENCLAW_SKIP_BROWSER_CONTROL_SERVER = "old-browser";
|
||||
process.env.OPENCLAW_TEST_MINIMAL_GATEWAY = "old-minimal";
|
||||
process.env.ANTHROPIC_API_KEY = "old-anthropic";
|
||||
process.env.ANTHROPIC_API_KEY_OLD = "old-anthropic-old";
|
||||
|
||||
const snapshot = snapshotCliBackendLiveEnv();
|
||||
applyCliBackendLiveEnv(new Set<string>());
|
||||
|
||||
expect(process.env.OPENCLAW_SKIP_CHANNELS).toBe("1");
|
||||
expect(process.env.OPENCLAW_SKIP_GMAIL_WATCHER).toBe("1");
|
||||
expect(process.env.OPENCLAW_SKIP_CRON).toBe("1");
|
||||
expect(process.env.OPENCLAW_SKIP_CANVAS_HOST).toBe("1");
|
||||
expect(process.env.OPENCLAW_SKIP_BROWSER_CONTROL_SERVER).toBe("1");
|
||||
expect(process.env.OPENCLAW_TEST_MINIMAL_GATEWAY).toBe("1");
|
||||
expect(process.env.ANTHROPIC_API_KEY).toBeUndefined();
|
||||
expect(process.env.ANTHROPIC_API_KEY_OLD).toBeUndefined();
|
||||
|
||||
restoreCliBackendLiveEnv(snapshot);
|
||||
|
||||
expect(process.env.OPENCLAW_SKIP_CHANNELS).toBe("old-channels");
|
||||
expect(process.env.OPENCLAW_SKIP_GMAIL_WATCHER).toBe("old-gmail");
|
||||
expect(process.env.OPENCLAW_SKIP_CRON).toBe("old-cron");
|
||||
expect(process.env.OPENCLAW_SKIP_CANVAS_HOST).toBe("old-canvas");
|
||||
expect(process.env.OPENCLAW_SKIP_BROWSER_CONTROL_SERVER).toBe("old-browser");
|
||||
expect(process.env.OPENCLAW_TEST_MINIMAL_GATEWAY).toBe("old-minimal");
|
||||
expect(process.env.ANTHROPIC_API_KEY).toBe("old-anthropic");
|
||||
expect(process.env.ANTHROPIC_API_KEY_OLD).toBe("old-anthropic-old");
|
||||
});
|
||||
|
||||
it("builds the live gateway client with test identity defaults", async () => {
|
||||
const { connectTestGatewayClient } = await import("./gateway-cli-backend.live-helpers.js");
|
||||
|
||||
const client = await connectTestGatewayClient({
|
||||
url: "ws://127.0.0.1:18789",
|
||||
token: "gateway-token",
|
||||
});
|
||||
|
||||
expect(client).toBeTruthy();
|
||||
expect(gatewayClientState.lastOptions).toMatchObject({
|
||||
url: "ws://127.0.0.1:18789",
|
||||
token: "gateway-token",
|
||||
clientName: GATEWAY_CLIENT_NAMES.TEST,
|
||||
clientDisplayName: "vitest-live",
|
||||
clientVersion: "dev",
|
||||
mode: GATEWAY_CLIENT_MODES.TEST,
|
||||
connectChallengeTimeoutMs: 30_000,
|
||||
});
|
||||
expect(gatewayClientState.lastOptions).not.toHaveProperty("requestTimeoutMs");
|
||||
});
|
||||
});
|
||||
@@ -100,6 +100,7 @@ export type CliBackendLiveEnvSnapshot = {
|
||||
skipCron?: string;
|
||||
skipCanvas?: string;
|
||||
skipBrowserControl?: string;
|
||||
minimalGateway?: string;
|
||||
anthropicApiKey?: string;
|
||||
anthropicApiKeyOld?: string;
|
||||
};
|
||||
@@ -301,9 +302,9 @@ async function connectClientOnce(params: {
|
||||
url: params.url,
|
||||
token: params.token,
|
||||
clientName: GATEWAY_CLIENT_NAMES.TEST,
|
||||
clientDisplayName: "vitest-live",
|
||||
clientVersion: "dev",
|
||||
mode: "test",
|
||||
requestTimeoutMs: params.timeoutMs,
|
||||
mode: GATEWAY_CLIENT_MODES.TEST,
|
||||
connectChallengeTimeoutMs: params.timeoutMs,
|
||||
deviceIdentity: params.deviceIdentity,
|
||||
onHelloOk: () => finish({ client }),
|
||||
@@ -341,6 +342,7 @@ export function snapshotCliBackendLiveEnv(): CliBackendLiveEnvSnapshot {
|
||||
skipCron: process.env.OPENCLAW_SKIP_CRON,
|
||||
skipCanvas: process.env.OPENCLAW_SKIP_CANVAS_HOST,
|
||||
skipBrowserControl: process.env.OPENCLAW_SKIP_BROWSER_CONTROL_SERVER,
|
||||
minimalGateway: process.env.OPENCLAW_TEST_MINIMAL_GATEWAY,
|
||||
anthropicApiKey: process.env.ANTHROPIC_API_KEY,
|
||||
anthropicApiKeyOld: process.env.ANTHROPIC_API_KEY_OLD,
|
||||
};
|
||||
@@ -352,6 +354,7 @@ export function applyCliBackendLiveEnv(preservedEnv: ReadonlySet<string>): void
|
||||
process.env.OPENCLAW_SKIP_CRON = "1";
|
||||
process.env.OPENCLAW_SKIP_CANVAS_HOST = "1";
|
||||
process.env.OPENCLAW_SKIP_BROWSER_CONTROL_SERVER = "1";
|
||||
process.env.OPENCLAW_TEST_MINIMAL_GATEWAY = "1";
|
||||
if (!preservedEnv.has("ANTHROPIC_API_KEY")) {
|
||||
delete process.env.ANTHROPIC_API_KEY;
|
||||
}
|
||||
@@ -369,6 +372,7 @@ export function restoreCliBackendLiveEnv(snapshot: CliBackendLiveEnvSnapshot): v
|
||||
restoreEnvVar("OPENCLAW_SKIP_CRON", snapshot.skipCron);
|
||||
restoreEnvVar("OPENCLAW_SKIP_CANVAS_HOST", snapshot.skipCanvas);
|
||||
restoreEnvVar("OPENCLAW_SKIP_BROWSER_CONTROL_SERVER", snapshot.skipBrowserControl);
|
||||
restoreEnvVar("OPENCLAW_TEST_MINIMAL_GATEWAY", snapshot.minimalGateway);
|
||||
restoreEnvVar("ANTHROPIC_API_KEY", snapshot.anthropicApiKey);
|
||||
restoreEnvVar("ANTHROPIC_API_KEY_OLD", snapshot.anthropicApiKeyOld);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user