Files
WRNexusJS/packages/dev-server/test/plugin-assets.test.ts
T
2026-07-30 13:36:29 +05:30

76 lines
2.6 KiB
TypeScript

import { expect, test } from "bun:test";
import {
mergePluginAssets,
runtimeIdsFromMarkup,
runtimeScriptsForMarkup,
servePluginAsset,
} from "../src/plugin-assets.ts";
import { resolvePackageMigrations } from "../src/plugin-migrations.ts";
test("injects only runtimes referenced by rendered markup", () => {
const runtimes = [
{ id: "captcha", source: "window.captcha = true" },
{ id: "editor", source: "window.editor = true" },
];
const body = '<div data-wrnexus-runtime="captcha captcha"></div>';
expect([...runtimeIdsFromMarkup(body)]).toEqual(["captcha"]);
const scripts = runtimeScriptsForMarkup(body, runtimes);
expect(scripts).toHaveLength(1);
expect(scripts[0]).toMatchObject({
src: "/__wrnexus/assets/captcha.js",
type: "module",
defer: true,
});
});
test("serves package assets with a safe content type", async () => {
const assets = mergePluginAssets(
[{ id: "captcha", source: "window.captcha = true", type: "script" }],
[],
);
const response = await servePluginAsset(assets, "/__wrnexus/assets/captcha.js", "development");
expect(response?.status).toBe(200);
expect(response?.headers.get("content-type")).toBe("text/javascript; charset=utf-8");
expect(response?.headers.get("x-content-type-options")).toBe("nosniff");
expect(await response?.text()).toContain("window.captcha");
});
test("resolves inline package migrations for the requested database", () => {
const migrations = resolvePackageMigrations(
[
{ id: "default-schema", source: "-- +up\nCREATE TABLE one(id INTEGER);" },
{
id: "analytics-schema",
database: "analytics",
source: "-- +up\nCREATE TABLE events(id INTEGER);",
},
],
"analytics",
);
expect(migrations).toHaveLength(1);
expect(migrations[0]?.name).toBe("analytics-schema");
expect(migrations[0]?.up).toContain("CREATE TABLE events");
});
import { collectScripts } from "../src/runtime.ts";
test("collectScripts automatically adds a referenced package runtime once", () => {
const scripts = collectScripts(
'<main><div data-wrnexus-runtime="captcha"></div><div data-wrnexus-runtime="captcha"></div></main>',
[{ id: "captcha", source: "window.captcha = true", type: "script" }],
);
expect(
scripts.filter(
(script) => typeof script !== "string" && script.src === "/__wrnexus/assets/captcha.js",
),
).toHaveLength(1);
});
test("collectScripts omits client navigation in document mode", () => {
const scripts = collectScripts("<main>Server rendered</main>", [], {
mode: "document",
});
expect(scripts).not.toContain("/__wrnexus/nav.js");
});