src/features/inbox/pagination.test.ts
Linked repository file from this build.
import { expect, test } from "bun:test";
import { clampInboxPages } from "./pagination";
test("shrinking queues return to the last available page without moving other lists", () => {
const pages = { newPage: 1, touchedPage: 0, eventsPage: 3, queuePage: 2 };
expect(
clampInboxPages(pages, { newReviews: 20, lastTouched: 2, events: 40, awaitingReview: 3 }, 8),
).toEqual({ ...pages, queuePage: 0 });
});
test("empty lists reset to their first page", () => {
expect(
clampInboxPages(
{ newPage: 2, touchedPage: 1, eventsPage: 4, queuePage: 3 },
{ newReviews: 0, lastTouched: 0, events: 0, awaitingReview: 0 },
8,
),
).toEqual({ newPage: 0, touchedPage: 0, eventsPage: 0, queuePage: 0 });
});
test("reachable pages retain the same reference to avoid a refetch loop", () => {
const pages = { newPage: 1, touchedPage: 0, eventsPage: 0, queuePage: 0 };
expect(
clampInboxPages(pages, { newReviews: 16, lastTouched: 0, events: 5, awaitingReview: 1 }, 8),
).toBe(pages);
});