import { expect, test } from "bun:test"; import { mkdtemp, rm, writeFile } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { createViews } from "../views/api.ts"; import { defineHooks } from "../views/hooks.ts"; test("Spug hook registry composes render expansions with route context", async () => { const hooks = defineHooks((hook) => { hook.spug("stamp", ({ html, path, locals }) => `${html}`); }); const html = await hooks.renderSpug({ html: "
hello
", path: "/views/index.spug", locals: { title: "Muddle" } }); expect(html).toContain(''); }); test("Views applies Spug hooks after template composition", async () => { const root = await mkdtemp(join(tmpdir(), "muddle-hooks-")); try { await writeFile(join(root, "index.spug"), "main= title\n"); const hooks = defineHooks((hook) => { hook.spug("mark", ({ html }) => `${html}`); }); const views = createViews({ root, viewsDir: root, hooks }); expect(await views.render("index.spug", { title: "Muddle" } as never)).toContain(""); } finally { await rm(root, { recursive: true, force: true }); } });