import { describe, expect, it } from "vitest"; import { JIRA_URL } from "../../board/constants.ts"; import { fileKind, fmtSize, isTooBig, jiraAttachmentUrl } from "./format.ts"; describe("fmtSize", () => { it("как в хабе: Б, КБ, МБ с запятой", () => { expect(fmtSize(500)).toBe("500 Б"); expect(fmtSize(1023)).toBe("1023 Б"); expect(fmtSize(1024)).toBe("1,0 КБ"); expect(fmtSize(240000)).toBe("234,4 КБ"); expect(fmtSize(1024 ** 2)).toBe("1,0 МБ"); expect(fmtSize(25 * 1024 ** 2)).toBe("25,0 МБ"); expect(fmtSize(1280)).toBe("1,3 КБ"); expect(fmtSize(1048575)).toBe("1,0 МБ"); expect(fmtSize(1310720)).toBe("1,3 МБ"); expect(fmtSize(25_000_000)).toBe("23,8 МБ"); expect(fmtSize(null)).toBe("размер неизвестен"); }); }); describe("jiraAttachmentUrl", () => { it("имя в URL-кодировке", () => { expect(jiraAttachmentUrl("31337", "скрин 1.png")).toBe(`${JIRA_URL}/secure/attachment/31337/%D1%81%D0%BA%D1%80%D0%B8%D0%BD%201.png`); }); }); describe("isTooBig", () => { it("больше 10 МБ — только в Jira; ровно 10 МБ и неизвестный размер — нет", () => { expect(isTooBig(10 * 1024 * 1024)).toBe(false); expect(isTooBig(10 * 1024 * 1024 + 1)).toBe(true); expect(isTooBig(null)).toBe(false); }); }); describe("fileKind", () => { it("тип по mime, иначе по расширению", () => { expect(fileKind("image/png", "a.bin")).toBe("image"); expect(fileKind(null, "Скрин.PNG")).toBe("image"); expect(fileKind("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "x")).toBe("sheet"); expect(fileKind(null, "ОСВ 60.xlsx")).toBe("sheet"); expect(fileKind("text/csv", "d.txt")).toBe("sheet"); expect(fileKind("application/pdf", "x")).toBe("pdf"); expect(fileKind(null, "отчёт.pdf")).toBe("pdf"); expect(fileKind("video/mp4", "запись.mp4")).toBe("other"); expect(fileKind(null, "без расширения")).toBe("other"); }); });