La paginación que pierde el último elemento
TypeScript · Un endpoint de listado en una API REST · Lógica · dificultad 1/3 · ~5 min
Un compañero le pidió al asistente de IA: "Escribe una función paginate(items, page, pageSize) para nuestro endpoint de listado. Las páginas empiezan en 1. Devuelve los elementos de la página pedida más la información de paginación."
El código llegó en treinta segundos, con tests que pasan. El contrato que promete el docstring:
pageempieza en 1;pageSizees el número máximo de elementos por página.itemscontiene los elementos de la página pedida, en su orden original.totalPageses el número de páginas necesarias para todos los elementos.hasNextestruecuando hay una página después de la pedida.
Revísalo antes de que se integre.
Repara el código hasta que pasen las pruebas ocultas.
code.ts
Pruebas visibles (pasan con el código tal como está)
import { describe, it, expect } from "@debunk/harness";
import { paginate } from "./code";
describe("paginate", () => {
it("returns the first page", () => {
const r = paginate([1, 2, 3, 4, 5, 6], 1, 2);
expect(r.items).toEqual([1, 2]);
expect(r.page).toBe(1);
});
it("computes totalPages for evenly divisible lists", () => {
expect(paginate([1, 2, 3, 4, 5, 6], 1, 3).totalPages).toBe(2);
});
it("hasNext is false on the last page of an evenly divisible list", () => {
expect(paginate([1, 2, 3, 4], 2, 2).hasNext).toBe(false);
});
});