mirror of https://github.com/openclaw/openclaw.git
68 lines
1.5 KiB
TypeScript
68 lines
1.5 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { isAcpJsonRpcMessage, isJsonRpcId, normalizeJsonRpcId } from "./jsonrpc.js";
|
|
|
|
describe("jsonrpc helpers", () => {
|
|
it("validates json-rpc ids", () => {
|
|
expect(isJsonRpcId(null)).toBe(true);
|
|
expect(isJsonRpcId("abc")).toBe(true);
|
|
expect(isJsonRpcId(12)).toBe(true);
|
|
expect(isJsonRpcId(Number.NaN)).toBe(false);
|
|
expect(isJsonRpcId({})).toBe(false);
|
|
});
|
|
|
|
it("normalizes json-rpc ids", () => {
|
|
expect(normalizeJsonRpcId("abc")).toBe("abc");
|
|
expect(normalizeJsonRpcId(12)).toBe("12");
|
|
expect(normalizeJsonRpcId(null)).toBeNull();
|
|
expect(normalizeJsonRpcId(undefined)).toBeNull();
|
|
});
|
|
|
|
it("accepts request, response, and notification shapes", () => {
|
|
expect(
|
|
isAcpJsonRpcMessage({
|
|
jsonrpc: "2.0",
|
|
method: "session/prompt",
|
|
id: 1,
|
|
}),
|
|
).toBe(true);
|
|
|
|
expect(
|
|
isAcpJsonRpcMessage({
|
|
jsonrpc: "2.0",
|
|
id: 1,
|
|
result: {
|
|
stopReason: "end_turn",
|
|
},
|
|
}),
|
|
).toBe(true);
|
|
|
|
expect(
|
|
isAcpJsonRpcMessage({
|
|
jsonrpc: "2.0",
|
|
method: "session/update",
|
|
}),
|
|
).toBe(true);
|
|
});
|
|
|
|
it("rejects malformed result/error response shapes", () => {
|
|
expect(
|
|
isAcpJsonRpcMessage({
|
|
jsonrpc: "2.0",
|
|
id: 1,
|
|
}),
|
|
).toBe(false);
|
|
|
|
expect(
|
|
isAcpJsonRpcMessage({
|
|
jsonrpc: "2.0",
|
|
id: 1,
|
|
result: {},
|
|
error: {
|
|
code: -1,
|
|
message: "bad",
|
|
},
|
|
}),
|
|
).toBe(false);
|
|
});
|
|
});
|