Files
edgeever/scripts/self-hosted-static.test.mjs

38 lines
1.8 KiB
JavaScript

import { test } from "node:test";
import assert from "node:assert/strict";
import { readFileSync } from "node:fs";
import { extname, join, normalize, relative, resolve } from "node:path";
import { runInNewContext } from "node:vm";
// Exercise the production static handler without starting the database or API.
const source = readFileSync(new URL("./self-hosted-server.mjs", import.meta.url), "utf8");
const handlerSource = source.slice(source.indexOf("const contentTypes ="), source.indexOf("const server = Bun.serve"));
const webDirectory = resolve("/test/web");
const contents = new Map([
[join(webDirectory, "assets/pdf.worker.mjs"), "export const WorkerMessageHandler = {};"],
[join(webDirectory, "assets/app.js"), "export {};"],
[join(webDirectory, "assets/unknown.bin"), "binary"],
]);
const serveStatic = runInNewContext(`${handlerSource}\nserveStatic;`, {
extname, join, normalize, relative, resolve, webDirectory, URL, Response,
Bun: { file(path) {
const file = new Blob([contents.get(path) ?? ""]);
file.exists = async () => contents.has(path);
return file;
} },
});
test("serves the PDF module worker with a JavaScript MIME type and its original bytes", async () => {
const response = await serveStatic(new Request("http://localhost/assets/pdf.worker.mjs"));
assert.equal(response.status, 200);
assert.equal(response.headers.get("Content-Type"), "text/javascript; charset=utf-8");
assert.equal(await response.text(), "export const WorkerMessageHandler = {};");
});
test("preserves JavaScript and unknown-file content types", async () => {
for (const [name, expected] of [["app.js", "text/javascript; charset=utf-8"], ["unknown.bin", "application/octet-stream"]]) {
const response = await serveStatic(new Request(`http://localhost/assets/${name}`));
assert.equal(response.headers.get("Content-Type"), expected);
}
});