import { expect, test } from "@playwright/test"; import { queuePreview } from "../../lib/admin/preview-queue"; import { formatRecordTime } from "../../lib/admin/record-time"; import { parseMediaQuery } from "../../lib/admin/media-records"; test("pagination rejects invalid values and bounds a requested page size", () => { expect(parseMediaQuery(new URLSearchParams("page=-1&pageSize=200"))).toMatchObject({ page: 1, pageSize: 100, }); expect( parseMediaQuery(new URLSearchParams("page=2&pageSize=40&search=%E9%99%88%E9%BE%99")), ).toMatchObject({ page: 2, pageSize: 40, search: "陈龙" }); expect(parseMediaQuery(new URLSearchParams("page=NaN&pageSize=0"))).toMatchObject({ page: 1, pageSize: 40, }); }); test("normalized Beijing record times do not receive a second timezone offset", () => { expect(formatRecordTime("2026-11-03T23:55:00.123Z")).toBe("2026-11-03 23:55"); expect(formatRecordTime("2026-11-03T17:12:00.123456")).toBe("2026-11-03 17:12"); }); test("leaving a page cancels waiting previews and retains active slots until fetch settles", () => { const started: number[] = []; const releases: Array<() => void> = []; const cancel = Array.from({ length: 7 }, (_, index) => queuePreview((release) => { started.push(index); releases[index] = release; }), ); expect(started).toEqual([0, 1, 2, 3]); cancel[0](); cancel[4](); expect(started).toEqual([0, 1, 2, 3]); releases[0](); expect(started).toEqual([0, 1, 2, 3, 5]); releases[0](); expect(started).toHaveLength(5); releases[1](); expect(started).toEqual([0, 1, 2, 3, 5, 6]); for (const release of releases) release?.(); });