import { describe, expect, it } from "vitest"; import { computeDragDates, pixelsToDays, shiftDate } from "./dragMath.js"; describe("dragMath", () => { it("returns zero days for invalid cell widths instead of leaking invalid drag deltas", () => { expect(pixelsToDays(40, 0)).toBe(0); expect(pixelsToDays(40, Number.NaN)).toBe(0); expect(pixelsToDays(40, Number.POSITIVE_INFINITY)).toBe(0); }); it("shifts dates without mutating the original date", () => { const original = new Date("2026-04-10T00:00:00.000Z"); const shifted = shiftDate(original, 3); expect(shifted.toISOString()).toBe("2026-04-13T00:00:00.000Z"); expect(original.toISOString()).toBe("2026-04-10T00:00:00.000Z"); }); it("clamps resize-start drags so the start does not cross the end", () => { const { start, end } = computeDragDates( "resize-start", new Date("2026-04-10T00:00:00.000Z"), new Date("2026-04-12T00:00:00.000Z"), 5, ); expect(start.toISOString()).toBe("2026-04-12T00:00:00.000Z"); expect(end.toISOString()).toBe("2026-04-12T00:00:00.000Z"); }); it("clamps resize-end drags so the end does not cross the start", () => { const { start, end } = computeDragDates( "resize-end", new Date("2026-04-10T00:00:00.000Z"), new Date("2026-04-12T00:00:00.000Z"), -5, ); expect(start.toISOString()).toBe("2026-04-10T00:00:00.000Z"); expect(end.toISOString()).toBe("2026-04-10T00:00:00.000Z"); }); });