repositories / pi-ext
pi-ext
bugabingas pi extensions
owned by admin
extensions/canvas/__serial__/package.test.ts
Rawimport { cp, mkdtemp, readdir, rm } from "node:fs/promises";
import { tmpdir } from "node:os";
import { join } from "node:path";
import { fileURLToPath, pathToFileURL } from "node:url";
import { describe, expect, it } from "vitest";
import type { CanvasServer } from "../src/server.ts";
describe.skipIf(process.env["PI_EXT_VERIFY_CANVAS_PACKAGE"] !== "1")(
"canvas relocated package",
() => {
it("serves browser JS, CSS, fonts and authenticated state after relocation", async () => {
const root = await mkdtemp(join(tmpdir(), "canvas-package-"));
const target = join(root, "canvas");
let server: CanvasServer | undefined;
try {
await cp(
fileURLToPath(new URL("../../../dist/canvas", import.meta.url)),
target,
{ recursive: true },
);
const packaged: typeof import("../server-test.ts") = await import(
pathToFileURL(join(target, "server-test.ts")).href
);
server = await packaged.startCanvasServer(
packaged.emptyState,
() => undefined,
);
const url = server.url;
const page = await fetch(url);
expect(page.status).toBe(200);
expect(await page.text()).toContain("/browser/main.js");
expect((await fetch(new URL("/api/state", url))).status).toBe(401);
const state = await fetch(new URL("/api/state", url), {
headers: {
Authorization: `Bearer ${new URL(url).hash.slice(1)}`,
},
});
expect(await state.json()).toMatchObject({ revision: 0, elements: [] });
const browser = await fetch(new URL("/browser/main.js", url));
expect(browser.status).toBe(200);
expect(await browser.text()).toContain("Pi sharing status");
const css = await fetch(new URL("/browser/excalidraw.css", url));
expect(css.status).toBe(200);
expect((await css.text()).length).toBeGreaterThan(0);
const fontName = (
await readdir(join(target, "browser/fonts/Excalifont"))
).find((name) => name.endsWith(".woff2"));
expect(fontName).toBeDefined();
const font = await fetch(
new URL(`/browser/fonts/Excalifont/${fontName}`, url),
);
expect(font.status).toBe(200);
expect((await font.arrayBuffer()).byteLength).toBeGreaterThan(0);
} finally {
await server?.close();
await rm(root, { recursive: true, force: true });
}
}, 60000);
},
);