Files
openclaw/src/gateway/client-bootstrap.test.ts
2026-04-06 07:41:08 +01:00

88 lines
2.6 KiB
TypeScript

import { beforeEach, describe, expect, it, vi } from "vitest";
const mockState = vi.hoisted(() => ({
buildGatewayConnectionDetails: vi.fn(),
resolveGatewayConnectionAuth: vi.fn(),
}));
vi.mock("./call.js", () => ({
buildGatewayConnectionDetails: (...args: unknown[]) =>
mockState.buildGatewayConnectionDetails(...args),
}));
vi.mock("./connection-auth.js", () => ({
resolveGatewayConnectionAuth: (...args: unknown[]) =>
mockState.resolveGatewayConnectionAuth(...args),
}));
const { resolveGatewayClientBootstrap, resolveGatewayUrlOverrideSource } =
await import("./client-bootstrap.js");
describe("resolveGatewayUrlOverrideSource", () => {
it("maps override url sources only", () => {
expect(resolveGatewayUrlOverrideSource("cli --url")).toBe("cli");
expect(resolveGatewayUrlOverrideSource("env OPENCLAW_GATEWAY_URL")).toBe("env");
expect(resolveGatewayUrlOverrideSource("config gateway.remote.url")).toBeUndefined();
});
});
describe("resolveGatewayClientBootstrap", () => {
beforeEach(() => {
mockState.buildGatewayConnectionDetails.mockReset();
mockState.resolveGatewayConnectionAuth.mockReset();
mockState.resolveGatewayConnectionAuth.mockResolvedValue({
token: undefined,
password: undefined,
});
});
it("passes cli override context into shared auth resolution", async () => {
mockState.buildGatewayConnectionDetails.mockReturnValue({
url: "wss://override.example/ws",
urlSource: "cli --url",
});
const result = await resolveGatewayClientBootstrap({
config: {} as never,
gatewayUrl: "wss://override.example/ws",
env: process.env,
});
expect(result).toEqual({
url: "wss://override.example/ws",
urlSource: "cli --url",
auth: {
token: undefined,
password: undefined,
},
});
expect(mockState.resolveGatewayConnectionAuth).toHaveBeenCalledWith(
expect.objectContaining({
env: process.env,
urlOverride: "wss://override.example/ws",
urlOverrideSource: "cli",
}),
);
});
it("does not mark config-derived urls as overrides", async () => {
mockState.buildGatewayConnectionDetails.mockReturnValue({
url: "wss://gateway.example/ws",
urlSource: "config gateway.remote.url",
});
await resolveGatewayClientBootstrap({
config: {} as never,
env: process.env,
});
expect(mockState.resolveGatewayConnectionAuth).toHaveBeenCalledWith(
expect.objectContaining({
env: process.env,
urlOverride: undefined,
urlOverrideSource: undefined,
}),
);
});
});