34 lines
1.0 KiB
TypeScript
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");
|
|
});
|