/** * Snapshot test: the frontend `CONTRACT_FIXTURES` table must match the * Rust-side snapshot. When the Rust contract changes, the snapshot file * regenerates (via `UPDATE_RPC_CONTRACT_SNAPSHOT=1 cargo test`) and this * test catches any TS shapes that have drifted. */ import { describe, expect, it } from "vitest"; import { CONTRACT_FIXTURES } from "./rpcContract"; import snapshot from "./rpcContract.snapshot.json"; describe("rpcContract", () => { it("CONTRACT_FIXTURES matches the Rust-generated snapshot", () => { // Convert TS fixtures into the same shape the Rust snapshot serialises // to: a method-keyed object of `{ params, result }`. const fromTs = Object.fromEntries( Object.entries(CONTRACT_FIXTURES).map(([method, payloads]) => [ method, { params: payloads.params, result: payloads.result }, ]), ); expect(fromTs).toEqual(snapshot); }); it("declares the same method names as the snapshot", () => { const tsMethods = Object.keys(CONTRACT_FIXTURES).sort(); const rustMethods = Object.keys(snapshot).sort(); expect(tsMethods).toEqual(rustMethods); }); });