mirror of
https://github.com/openclaw/openclaw.git
synced 2026-02-19 18:39:20 -05:00
test: table-drive mime mapping assertions
This commit is contained in:
@@ -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);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user