mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-17 21:10:54 +00:00
64 lines
2.3 KiB
TypeScript
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);
|
|
});
|
|
});
|