Files
openclaw/src/gateway/server-methods/nodes.canvas-capability-refresh.test.ts

64 lines
2.3 KiB
TypeScript

import { describe, expect, it, vi } from "vitest";
import { ErrorCodes } from "../protocol/index.js";
import { nodeHandlers } from "./nodes.js";
describe("node.canvas.capability.refresh", () => {
it("rotates the caller canvas capability and returns a fresh scoped URL", async () => {
const respond = vi.fn();
const client = {
connect: { role: "node", client: { id: "node-1" } },
canvasHostUrl: "http://127.0.0.1:18789",
canvasCapability: "old-token",
canvasCapabilityExpiresAtMs: Date.now() - 1,
};
await nodeHandlers["node.canvas.capability.refresh"]({
req: { type: "req", id: "req-1", method: "node.canvas.capability.refresh" },
params: {},
respond,
context: {} as never,
client: client as never,
isWebchatConnect: () => false,
});
const call = respond.mock.calls[0] as
| [
boolean,
{
canvasCapability?: string;
canvasHostUrl?: string;
canvasCapabilityExpiresAtMs?: number;
},
]
| undefined;
expect(call?.[0]).toBe(true);
const payload = call?.[1] ?? {};
expect(typeof payload.canvasCapability).toBe("string");
expect(payload.canvasCapability).not.toBe("old-token");
expect(payload.canvasHostUrl).toContain("/__openclaw__/cap/");
expect(typeof payload.canvasCapabilityExpiresAtMs).toBe("number");
expect(payload.canvasCapabilityExpiresAtMs).toBeGreaterThan(Date.now());
expect(client.canvasCapability).toBe(payload.canvasCapability);
expect(client.canvasCapabilityExpiresAtMs).toBe(payload.canvasCapabilityExpiresAtMs);
});
it("returns unavailable when the caller session has no base canvas URL", async () => {
const respond = vi.fn();
await nodeHandlers["node.canvas.capability.refresh"]({
req: { type: "req", id: "req-2", method: "node.canvas.capability.refresh" },
params: {},
respond,
context: {} as never,
client: { connect: { role: "node", client: { id: "node-1" } } } as never,
isWebchatConnect: () => false,
});
const call = respond.mock.calls[0] as
| [boolean, unknown, { code?: number; message?: string }]
| undefined;
expect(call?.[0]).toBe(false);
expect(call?.[2]?.code).toBe(ErrorCodes.UNAVAILABLE);
});
});