// @vitest-environment node import { readFile } from "node:fs/promises"; import path from "node:path"; import { fileURLToPath } from "node:url"; import { describe, expect, it } from "vitest"; import { dashboardHostAssetUrls } from "../src/dashboard-assets.js"; const packageDirectory = path.dirname(path.dirname(fileURLToPath(import.meta.url))); describe("Dashboard host asset locator", () => { it("exports only frozen immutable href strings for the two exact built files, never the source map", () => { expect(Object.isFrozen(dashboardHostAssetUrls)).toBe(true); expect(dashboardHostAssetUrls).toEqual({ html: new URL("dist/browser/index.html", `file://${packageDirectory}/`).href, script: new URL( "dist/browser/assets/ekklesia-dashboard/app.js", `file://${packageDirectory}/`, ).href, }); expect(JSON.stringify(dashboardHostAssetUrls)).not.toContain(".map"); }); it("publishes the locator through a narrow package subpath, not the shell root barrel", async () => { const manifest = JSON.parse( await readFile(path.join(packageDirectory, "package.json"), "utf8"), ) as { exports?: Record }; expect(manifest.exports?.["./dashboard-assets"]).toEqual({ import: "./dist/dashboard-assets.js", types: "./dist/dashboard-assets.d.ts", }); const rootSource = await readFile(path.join(packageDirectory, "src/index.ts"), "utf8"); expect(rootSource).not.toContain("dashboardHostAssetUrls"); expect(rootSource).not.toContain("dashboard-assets"); }); it("loads exactly one fixed, absolute, same-origin script and no inline script", async () => { const html = await readFile(path.join(packageDirectory, "index.html"), "utf8"); expect(html).toContain('id="ekklesia-host"'); expect(html.match(/', ); }); it("builds the Dashboard entry at the exact path the locator names", async () => { const buildScript = await readFile( path.join(packageDirectory, "scripts/build-browser.mjs"), "utf8", ); expect(buildScript).toContain('"assets/ekklesia-dashboard/app": path.join('); }); });