Something went wrong. Try again.
Monorepo for Tangled
Something went wrong. Try again.
TypeScript
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071import { describe, expect, it } from "vitest";import { createOffsetPager, discoveredPageCount, pageCount, pageRows} from "$lib/components/profile/pagination.svelte";
describe("profile pagination counts", () => { it("uses the known total for profile lists", () => { expect(pageCount(4, 30)).toBe(1); expect(pageCount(30, 30)).toBe(1); expect(pageCount(31, 30)).toBe(2); });
it("only discovers an extra page when totals are unavailable", () => { expect(discoveredPageCount(1, false)).toBe(1); expect(discoveredPageCount(1, true)).toBe(2); expect(discoveredPageCount(2, true)).toBe(3); });
it("sizes a page's skeleton to the items it will hold", () => { expect(pageRows(1, 30, 100)).toBe(30); expect(pageRows(4, 30, 100)).toBe(10); expect(pageRows(4, 30, 90)).toBe(1); expect(pageRows(4, 30)).toBe(30); });
it("jumps to a page in one fetch", async () => { const requested: number[] = []; const pager = createOffsetPager(["first"], 30, async (offset) => { requested.push(offset); return [`page at ${offset}`]; });
await pager.select(40); expect(requested).toEqual([1170]); expect(pager.items).toEqual(["page at 1170"]); expect(pager.state).toEqual({ kind: "at-page", page: 40 });
await pager.select(40); await pager.select(1); expect(requested).toEqual([1170]); expect(pager.items).toEqual(["first"]); });
it("keeps pager lifecycle in one state", async () => { let release!: (items: string[]) => void; const pager = createOffsetPager( ["first"], 30, () => new Promise<string[]>((resolve) => (release = resolve)) );
const loading = pager.select(2); // while loading, state points to the incoming page, not the page left behind expect(pager.state).toEqual({ kind: "loading", page: 2 }); expect(pager.items).toEqual([]); expect(pager.hasNext).toBe(true); release(["second"]); await loading; expect(pager.state).toEqual({ kind: "at-page", page: 2 });
const failing = createOffsetPager(["first"], 30, async () => { throw new Error("nope"); }); await failing.select(2); expect(failing.state).toEqual({ kind: "failed", page: 1 }); });});