test: expand mime detection coverage

This commit is contained in:
Peter Steinberger
2025-12-20 19:16:53 +01:00
parent 36c85a617a
commit 96cbab2b22
2 changed files with 79 additions and 1 deletions

57
src/media/mime.test.ts Normal file
View File

@@ -0,0 +1,57 @@
import JSZip from "jszip";
import { describe, expect, it } from "vitest";
import { detectMime } from "./mime.js";
async function makeOoxmlZip(opts: {
mainMime: string;
partPath: string;
}): Promise<Buffer> {
const zip = new JSZip();
zip.file(
"[Content_Types].xml",
`<Types><Override PartName="${opts.partPath}" ContentType="${opts.mainMime}.main+xml"/></Types>`,
);
zip.file(opts.partPath.slice(1), "<xml/>");
return await zip.generateAsync({ type: "nodebuffer" });
}
describe("mime detection", () => {
it("detects docx from buffer", async () => {
const buf = await makeOoxmlZip({
mainMime:
"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
partPath: "/word/document.xml",
});
const mime = await detectMime({ buffer: buf, filePath: "/tmp/file.bin" });
expect(mime).toBe(
"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
);
});
it("detects pptx from buffer", async () => {
const buf = await makeOoxmlZip({
mainMime:
"application/vnd.openxmlformats-officedocument.presentationml.presentation",
partPath: "/ppt/presentation.xml",
});
const mime = await detectMime({ buffer: buf, filePath: "/tmp/file.bin" });
expect(mime).toBe(
"application/vnd.openxmlformats-officedocument.presentationml.presentation",
);
});
it("prefers extension mapping over generic zip", async () => {
const zip = new JSZip();
zip.file("hello.txt", "hi");
const buf = await zip.generateAsync({ type: "nodebuffer" });
const mime = await detectMime({
buffer: buf,
filePath: "/tmp/file.xlsx",
});
expect(mime).toBe(
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
);
});
});