Files
horus-3d/tests/unit/gatewayClient.connectErrors.test.ts
Luke The Dev 4fa4f13558 First Release of Claw3D (#11)
Co-authored-by: iamlukethedev <iamlukethedev@users.noreply.github.com>
2026-03-19 23:14:04 -05:00

53 lines
1.5 KiB
TypeScript

import { describe, expect, it, vi } from "vitest";
import { GatewayResponseError } from "@/lib/gateway/errors";
import { GatewayClient } from "@/lib/gateway/GatewayClient";
let lastOpts: Record<string, unknown> | null = null;
vi.mock("@/lib/gateway/openclaw/GatewayBrowserClient", () => {
class GatewayBrowserClient {
connected = false;
constructor(opts: Record<string, unknown>) {
lastOpts = opts;
}
start() {}
stop() {}
request() {
return Promise.resolve({});
}
}
return { GatewayBrowserClient };
});
describe("GatewayClient connect failures", () => {
it("rejects connect with GatewayResponseError when close reason encodes connect failed", async () => {
const client = new GatewayClient();
const connectPromise = client.connect({ gatewayUrl: "ws://example.invalid" });
if (!lastOpts) {
throw new Error("Expected GatewayBrowserClient to be constructed");
}
const onClose = lastOpts.onClose as ((info: { code: number; reason: string }) => void) | undefined;
if (!onClose) {
throw new Error("Expected onClose callback");
}
onClose({
code: 4008,
reason:
"connect failed: studio.gateway_token_missing Upstream gateway token is not configured on the Studio host.",
});
await expect(connectPromise).rejects.toBeInstanceOf(GatewayResponseError);
await expect(connectPromise).rejects.toMatchObject({
name: "GatewayResponseError",
code: "studio.gateway_token_missing",
});
});
});