import { expect, test } from "bun:test"; import { createProductionHandlers } from "../src/prod.ts"; test("component resolution preserves JSON user/permission props and drops unresolved bindings", async () => { let received: Record = {}; const handlers = createProductionHandlers( { pages: [ { raw: "/", mod: { default: () => '

Account content

', }, }, ], api: [], realtime: [], middleware: [], layouts: [], components: [ { name: "AccountShell", mod: { render: (props: Record) => { received = props; const identity = JSON.parse(props.identity ?? "{}"); const permissions = JSON.parse(props.permissions ?? "{}"); return permissions.read ? "
" + identity.displayName + "
" : "
Denied
"; }, }, }, ], }, {}, ); const response = await handlers.fetch(new Request("http://localhost/"), { upgrade: () => false }); expect(response?.status).toBe(200); const html = await response!.text(); expect(html).toContain("Alice"); expect(html).toContain("Account content"); expect(JSON.parse(received.permissions!)).toEqual({ read: true, update: false }); expect(JSON.parse(received.preferences!)).toEqual({ theme: "dark" }); expect(received.pending).toBeUndefined(); });