import { describe, expect, it } from "vitest"; import { BOARD_CARD_STATE, cardState, LIST_BACKGROUND, openCardState } from "./modal.ts"; describe("состояние окна в истории", () => { it("со страницы — фон = адрес страницы, глубина 1", () => { expect(openCardState({ pathname: "/issues", search: "?sprint=S", state: null })) .toEqual({ background: { pathname: "/issues", search: "?sprint=S" }, depth: 1, direct: false }); }); it("из окна — тот же фон, глубина + 1, признак прямого адреса сохраняется", () => { const s = { background: LIST_BACKGROUND, depth: 0, direct: true }; expect(openCardState({ pathname: "/issues/A-1", search: "", state: s })).toEqual({ background: LIST_BACKGROUND, depth: 1, direct: true }); expect(openCardState({ pathname: "/issues/A-2", search: "", state: BOARD_CARD_STATE })) .toEqual({ background: { pathname: "/board", search: "" }, depth: 2, direct: false }); }); it("чужое или битое state — не состояние окна", () => { expect(cardState(null)).toBeNull(); expect(cardState({ background: "/issues", depth: 1 })).toBeNull(); expect(cardState({ background: { pathname: "/issues", search: "" }, depth: "1" })).toBeNull(); expect(cardState({ background: { pathname: "/issues", search: "" }, depth: 1 })) .toEqual({ background: { pathname: "/issues", search: "" }, depth: 1, direct: false }); }); it("глубина — только целое неотрицательное, иначе 0", () => { const bg = { pathname: "/issues", search: "" }; for (const depth of [-1, 1.5, NaN, Infinity]) expect(cardState({ background: bg, depth })?.depth).toBe(0); expect(cardState({ background: bg, depth: 3 })?.depth).toBe(3); }); });