import { describe, expect, it } from "vitest"; import { discoveredPageCount, offsetFor, pageCount, pageParam } from "$lib/pagination"; describe("pagination helpers", () => { describe("pageParam", () => { it("defaults to 1 when missing", () => { expect(pageParam(new URL("https://tangled.org/repo"))).toBe(1); }); it("parses valid positive page numbers", () => { expect(pageParam(new URL("https://tangled.org/repo?page=3"))).toBe(3); }); it("falls back to 1 for invalid or zero pages", () => { expect(pageParam(new URL("https://tangled.org/repo?page=0"))).toBe(1); expect(pageParam(new URL("https://tangled.org/repo?page=-5"))).toBe(1); expect(pageParam(new URL("https://tangled.org/repo?page=abc"))).toBe(1); }); }); describe("offsetFor", () => { it("returns undefined for page 1", () => { expect(offsetFor(1, 30)).toBeUndefined(); }); it("returns correct offset for pages > 1", () => { expect(offsetFor(2, 30)).toBe(30); expect(offsetFor(3, 30)).toBe(60); }); }); describe("pageCount", () => { it("returns 1 for 0 items", () => { expect(pageCount(0, 30)).toBe(1); }); it("calculates ceiling pages correctly", () => { expect(pageCount(30, 30)).toBe(1); expect(pageCount(31, 30)).toBe(2); expect(pageCount(90, 30)).toBe(3); }); }); describe("discoveredPageCount", () => { it("increments page when hasNext is true", () => { expect(discoveredPageCount(1, true)).toBe(2); expect(discoveredPageCount(5, true)).toBe(6); }); it("stays on current page when hasNext is false", () => { expect(discoveredPageCount(1, false)).toBe(1); expect(discoveredPageCount(5, false)).toBe(5); }); }); });