Skip to article
Documentation

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);
});