import { describe, expect, it } from "vitest"; import { dayDiff, emptyModel, fmtDate, fmtStamp, notStarted, plural, shortName, sortableDate, unassigned, whoKey } from "./util.ts"; describe("util", () => { it("sortableDate приводит даты Jira к ГГГГ-ММ-ДД", () => { expect(sortableDate("2026-10-20T10:00:00")).toBe("2026-10-20"); expect(sortableDate("5.1.2026")).toBe("2026-01-05"); expect(sortableDate("20/окт/26")).toBe("2026-10-20"); expect(sortableDate("10/Oct/2026")).toBe("2026-10-10"); expect(sortableDate("потом")).toBe("потом"); }); it("shortName, plural, fmtDate, dayDiff", () => { expect(shortName("Степанов Максим Александрович")).toBe("Степанов М. А."); expect(shortName("Stepanov-MAl")).toBe("Stepanov-MAl"); expect(shortName("")).toBe("не назначен"); expect(plural(21, "задача", "задачи", "задач")).toBe("21 задача"); expect(plural(12, "задача", "задачи", "задач")).toBe("12 задач"); expect(fmtDate("2026-10-20")).toBe("20.10"); expect(dayDiff("2026-10-14", "2026-10-20")).toBe(6); expect(dayDiff("", "2026-10-20")).toBeNull(); }); it("notStarted, unassigned, whoKey, fmtStamp, emptyModel", () => { expect(notStarted("Backlog")).toBe(true); expect(notStarted("К выполнению")).toBe(true); expect(notStarted("В работе")).toBe(false); expect(unassigned("")).toBe(true); expect(unassigned("Не назначен")).toBe(true); expect(unassigned("Иванов")).toBe(false); expect(whoKey(" Иванов ")).toBe("Иванов"); expect(whoKey("unassigned")).toBe(""); expect(fmtStamp("не дата")).toBe("не дата"); expect(fmtStamp("2026-10-14T09:05:00")).toMatch(/^14\.10 09:05$/); expect(emptyModel("пусто")).toMatchObject({ nodes: [], links: [], emptyText: "пусто", missing: 0 }); }); });