import { getFileCategory } from "./getFileCategory"; describe("getFileCategory", () => { it("returns 'other' when neither name nor type is provided", () => { expect(getFileCategory({})).toBe("other"); }); it.each([ ["application/pdf", undefined, "pdf"], [undefined, "report.pdf", "pdf"], [undefined, "REPORT.PDF", "pdf"], ])("pdf: type=%s fileName=%s → %s", (fileType, fileName, expected) => { expect(getFileCategory({ fileType, fileName })).toBe(expected); }); it.each([ ["image/jpeg", undefined, "image"], ["image/png", "photo.png", "image"], ])("image: type=%s fileName=%s → %s", (fileType, fileName, expected) => { expect(getFileCategory({ fileType, fileName })).toBe(expected); }); it.each([ ["video/mp4", undefined, "video"], ["video/quicktime", undefined, "video"], [undefined, "clip.mp4", "video"], [undefined, "clip.mov", "video"], [undefined, "clip.webm", "video"], [undefined, "clip.mkv", "video"], [undefined, "clip.avi", "video"], ])("video: type=%s fileName=%s → %s", (fileType, fileName, expected) => { expect(getFileCategory({ fileType, fileName })).toBe(expected); }); it.each([ ["application/msword", undefined, "document"], [ "application/vnd.openxmlformats-officedocument.wordprocessingml.document", undefined, "document", ], ["application/vnd.oasis.opendocument.text", undefined, "document"], ["application/rtf", undefined, "document"], ["text/rtf", undefined, "document"], [undefined, "report.doc", "document"], [undefined, "report.docx", "document"], [undefined, "report.odt", "document"], [undefined, "report.fodt", "document"], [undefined, "memo.rtf", "document"], [undefined, "notes.pages", "document"], [undefined, "legacy.wpd", "document"], ])("document: type=%s fileName=%s → %s", (fileType, fileName, expected) => { expect(getFileCategory({ fileType, fileName })).toBe(expected); }); it.each([ ["application/vnd.ms-excel", undefined, "spreadsheet"], [ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", undefined, "spreadsheet", ], [ "application/vnd.oasis.opendocument.spreadsheet", undefined, "spreadsheet", ], ["text/csv", undefined, "spreadsheet"], [undefined, "data.xls", "spreadsheet"], [undefined, "data.xlsx", "spreadsheet"], [undefined, "data.ods", "spreadsheet"], [undefined, "data.fods", "spreadsheet"], [undefined, "data.numbers", "spreadsheet"], [undefined, "data.csv", "spreadsheet"], ])( "spreadsheet: type=%s fileName=%s → %s", (fileType, fileName, expected) => { expect(getFileCategory({ fileType, fileName })).toBe(expected); }, ); it.each([ ["application/octet-stream", "unknown.bin", "other"], [undefined, "no-extension", "other"], [undefined, "presentation.pptx", "other"], [undefined, "presentation.odp", "other"], ])("other: type=%s fileName=%s → %s", (fileType, fileName, expected) => { expect(getFileCategory({ fileType, fileName })).toBe(expected); }); it("prefers MIME over extension when both are present and disagree", () => { expect( getFileCategory({ fileType: "application/pdf", fileName: "weird.docx" }), ).toBe("pdf"); }); });