import { describe, expect, it } from "vitest"; import { generateEntry, generateMetadataEntry } from "./codegen.js"; describe("generateEntry", () => { it("statically imports and registers workflows by key", () => { const entry = generateEntry([ { type: "workflow", tag: "workflow", runtime: "worker", key: "onPageCreated", sourcePath: "src/workflows/onPageCreated.ts", }, ]); expect(entry).toContain(`import capability_0 from "../src/workflows/onPageCreated.ts";`); expect(entry).toContain(`"workflow": {`); expect(entry).toContain(`"onPageCreated": capability_0,`); expect(entry).toContain("export async function run("); }); it("records each workflow's key for workflow invocation", () => { const entry = generateEntry([ { type: "workflow", tag: "workflow", runtime: "worker", key: "prepareReleases", sourcePath: "src/workflows/prepareReleases.ts", }, ]); expect(entry).toContain(`import { bindWorkflowKey } from "@notionhq/apps/workflow";`); expect(entry).toContain(`bindWorkflowKey(capability_0, "prepareReleases");`); }); it("resolves the webhook verify invocation type to the workflow registry", () => { const entry = generateEntry([ { type: "workflow", tag: "workflow", key: "onIncoming", sourcePath: "src/workflows/onIncoming.ts", runtime: "worker", }, ]); expect(entry).toContain(`workflowWebhookVerify: "workflow",`); }); it("registers syncs in their own capability group", () => { const entry = generateEntry([ { type: "sync", tag: "sync", runtime: "worker", key: "issues", sourcePath: "src/syncs/issues.ts", }, ]); expect(entry).toContain(`import capability_0 from "../src/syncs/issues.ts";`); expect(entry).toContain(`"sync": {`); expect(entry).toContain(`"issues": capability_0,`); expect(entry).toContain(`bindSyncCapabilityKey(capability_0, "issues");`); }); }); describe("generateMetadataEntry", () => { it("records resources imported by custom blocks", () => { const entry = generateMetadataEntry([ { type: "custom_block", tag: "custom_block", runtime: "build", key: "board", sourcePath: "src/customBlocks/board.ts", }, ]); expect(entry).toContain( `await withMetadataCapabilityKey("board", () => import("../src/customBlocks/board.ts"));`, ); }); it("evaluates custom blocks under their capability key before other modules", () => { const entry = generateMetadataEntry([ { type: "workflow", tag: "workflow", runtime: "worker", key: "notify", sourcePath: "src/workflows/notify.ts", }, { type: "custom_block", tag: "custom_block", runtime: "build", key: "board", sourcePath: "src/customBlocks/board.ts", }, ]); expect(entry.indexOf("src/customBlocks/board.ts")).toBeLessThan( entry.indexOf("src/workflows/notify.ts"), ); }); });