From d743332d8345f715d52d4eef117bb4fca46b971b Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Wed, 18 Feb 2026 23:25:30 +0000 Subject: [PATCH] test: table-drive mime mapping assertions --- src/media/mime.test.ts | 110 ++++++++++++++++++----------------------- 1 file changed, 47 insertions(+), 63 deletions(-) diff --git a/src/media/mime.test.ts b/src/media/mime.test.ts index 7b9be7a74b..020364663f 100644 --- a/src/media/mime.test.ts +++ b/src/media/mime.test.ts @@ -20,13 +20,15 @@ async function makeOoxmlZip(opts: { mainMime: string; partPath: string }): Promi } describe("mime detection", () => { - it("maps common image formats to mime types", () => { - expect(imageMimeFromFormat("jpg")).toBe("image/jpeg"); - expect(imageMimeFromFormat("jpeg")).toBe("image/jpeg"); - expect(imageMimeFromFormat("png")).toBe("image/png"); - expect(imageMimeFromFormat("webp")).toBe("image/webp"); - expect(imageMimeFromFormat("gif")).toBe("image/gif"); - expect(imageMimeFromFormat("unknown")).toBeUndefined(); + it.each([ + { format: "jpg", expected: "image/jpeg" }, + { format: "jpeg", expected: "image/jpeg" }, + { format: "png", expected: "image/png" }, + { format: "webp", expected: "image/webp" }, + { format: "gif", expected: "image/gif" }, + { format: "unknown", expected: undefined }, + ])("maps $format image format", ({ format, expected }) => { + expect(imageMimeFromFormat(format)).toBe(expected); }); it("detects docx from buffer", async () => { @@ -61,46 +63,30 @@ describe("mime detection", () => { }); describe("extensionForMime", () => { - it("maps image MIME types to extensions", () => { - expect(extensionForMime("image/jpeg")).toBe(".jpg"); - expect(extensionForMime("image/png")).toBe(".png"); - expect(extensionForMime("image/webp")).toBe(".webp"); - expect(extensionForMime("image/gif")).toBe(".gif"); - expect(extensionForMime("image/heic")).toBe(".heic"); - }); - - it("maps audio MIME types to extensions", () => { - expect(extensionForMime("audio/mpeg")).toBe(".mp3"); - expect(extensionForMime("audio/ogg")).toBe(".ogg"); - expect(extensionForMime("audio/x-m4a")).toBe(".m4a"); - expect(extensionForMime("audio/mp4")).toBe(".m4a"); - }); - - it("maps video MIME types to extensions", () => { - expect(extensionForMime("video/mp4")).toBe(".mp4"); - expect(extensionForMime("video/quicktime")).toBe(".mov"); - }); - - it("maps document MIME types to extensions", () => { - expect(extensionForMime("application/pdf")).toBe(".pdf"); - expect(extensionForMime("text/plain")).toBe(".txt"); - expect(extensionForMime("text/markdown")).toBe(".md"); - }); - - it("handles case insensitivity", () => { - expect(extensionForMime("IMAGE/JPEG")).toBe(".jpg"); - expect(extensionForMime("Audio/X-M4A")).toBe(".m4a"); - expect(extensionForMime("Video/QuickTime")).toBe(".mov"); - }); - - it("returns undefined for unknown MIME types", () => { - expect(extensionForMime("video/unknown")).toBeUndefined(); - expect(extensionForMime("application/x-custom")).toBeUndefined(); - }); - - it("returns undefined for null or undefined input", () => { - expect(extensionForMime(null)).toBeUndefined(); - expect(extensionForMime(undefined)).toBeUndefined(); + it.each([ + { mime: "image/jpeg", expected: ".jpg" }, + { mime: "image/png", expected: ".png" }, + { mime: "image/webp", expected: ".webp" }, + { mime: "image/gif", expected: ".gif" }, + { mime: "image/heic", expected: ".heic" }, + { mime: "audio/mpeg", expected: ".mp3" }, + { mime: "audio/ogg", expected: ".ogg" }, + { mime: "audio/x-m4a", expected: ".m4a" }, + { mime: "audio/mp4", expected: ".m4a" }, + { mime: "video/mp4", expected: ".mp4" }, + { mime: "video/quicktime", expected: ".mov" }, + { mime: "application/pdf", expected: ".pdf" }, + { mime: "text/plain", expected: ".txt" }, + { mime: "text/markdown", expected: ".md" }, + { mime: "IMAGE/JPEG", expected: ".jpg" }, + { mime: "Audio/X-M4A", expected: ".m4a" }, + { mime: "Video/QuickTime", expected: ".mov" }, + { mime: "video/unknown", expected: undefined }, + { mime: "application/x-custom", expected: undefined }, + { mime: null, expected: undefined }, + { mime: undefined, expected: undefined }, + ] as const)("maps $mime to extension", ({ mime, expected }) => { + expect(extensionForMime(mime)).toBe(expected); }); }); @@ -119,25 +105,23 @@ describe("isAudioFileName", () => { }); describe("normalizeMimeType", () => { - it("normalizes case and strips parameters", () => { - expect(normalizeMimeType("Audio/MP4; codecs=mp4a.40.2")).toBe("audio/mp4"); - }); - - it("returns undefined for empty input", () => { - expect(normalizeMimeType(" ")).toBeUndefined(); - expect(normalizeMimeType(null)).toBeUndefined(); - expect(normalizeMimeType(undefined)).toBeUndefined(); + it.each([ + { input: "Audio/MP4; codecs=mp4a.40.2", expected: "audio/mp4" }, + { input: " ", expected: undefined }, + { input: null, expected: undefined }, + { input: undefined, expected: undefined }, + ] as const)("normalizes $input", ({ input, expected }) => { + expect(normalizeMimeType(input)).toBe(expected); }); }); describe("mediaKindFromMime", () => { - it("classifies text mimes as document", () => { - expect(mediaKindFromMime("text/plain")).toBe("document"); - expect(mediaKindFromMime("text/csv")).toBe("document"); - expect(mediaKindFromMime("text/html; charset=utf-8")).toBe("document"); - }); - - it("keeps unknown mimes as unknown", () => { - expect(mediaKindFromMime("model/gltf+json")).toBe("unknown"); + it.each([ + { mime: "text/plain", expected: "document" }, + { mime: "text/csv", expected: "document" }, + { mime: "text/html; charset=utf-8", expected: "document" }, + { mime: "model/gltf+json", expected: "unknown" }, + ] as const)("classifies $mime", ({ mime, expected }) => { + expect(mediaKindFromMime(mime)).toBe(expected); }); });