Files
2026-08-01 01:09:58 +05:30

34 lines
1.0 KiB
TypeScript

import { expect, test } from "bun:test";
import { createRpcHandler } from "../src/rpc.ts";
function request(args: unknown[]): Request {
return new Request("http://localhost/__wrnexus/rpc", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({ component: "Demo", function: "save", args }),
});
}
const handler = createRpcHandler({
resolve: async () => ({
functions: { save: (value: string) => value.toUpperCase() },
manifest: [
{
function: "save",
parameters: [{ name: "value", type: "string", optional: false }],
returnType: "string",
},
],
}),
});
test("validates RPC input and output contracts", async () => {
const valid = await handler(request(["hello"]));
expect(valid.status).toBe(200);
expect(await valid.json()).toEqual(expect.objectContaining({ ok: true, value: "HELLO" }));
const invalid = await handler(request([12]));
expect(invalid.status).toBe(400);
expect(((await invalid.json()) as any).error.code).toBe("WRN-RPC-INPUT");
});