40 lines
1.3 KiB
TypeScript
40 lines
1.3 KiB
TypeScript
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}<meta data-view="${path}" data-title="${String(locals.title)}">`,
|
|
);
|
|
});
|
|
const html = await hooks.renderSpug({
|
|
html: "<main>hello</main>",
|
|
path: "/views/index.spug",
|
|
locals: { title: "Muddle" },
|
|
});
|
|
expect(html).toContain(
|
|
'<meta data-view="/views/index.spug" data-title="Muddle">',
|
|
);
|
|
});
|
|
|
|
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}<aside>expanded</aside>`);
|
|
});
|
|
const views = createViews({ root, viewsDir: root, hooks });
|
|
expect(
|
|
await views.render("index.spug", { title: "Muddle" } as never),
|
|
).toContain("<aside>expanded</aside>");
|
|
} finally {
|
|
await rm(root, { recursive: true, force: true });
|
|
}
|
|
});
|