openbranch
Corrección de bugsSin empezar

El botón de cargar más que nunca para

Un feed paginado sigue mostrando 'Cargar más' incluso en la última página — lanzando una petición extra vacía en cada visita. Los datos son correctos, pero el metadata miente.

Errores de límiteLógica de paginaciónIndexación base ceroDepurar con tests

Llegó un bug report del equipo de frontend: el componente del feed está lanzando una llamada a la API de más en cada visita. Los usuarios en la última página de resultados siguen viendo el botón "Cargar más" — al pulsarlo reciben un array vacío y un breve destello del spinner de carga. No es un crash, pero es suficiente para abrir un ticket.

El culpable es paginate() en src/paginate.ts. Devuelve un objeto PaginationResult con data, flags de navegación y metadatos de página. Tres de sus cuatro tests pasan — solo uno está en rojo, y apunta directamente al bug.

La situación

La función parece razonable a primera vista. Limita la página a los límites válidos, corta los ítems correctos y rellena el resultado. Pero uno de los campos devueltos está siempre ligeramente mal — y ese campo es el que la UI lee para decidir si renderizar el botón "Cargar más".

Tres tests pasan. Uno falla:

it("hasNext is false on the last page", () => {
  const result = paginate(ITEMS, 3, 3) // última página de 4
  expect(result.hasNext).toBe(false)
})

Lo que harás

  1. Ejecutar los tests y leer el output del fallo — te dice qué devuelve hasNext vs. qué debería devolver.
  2. Trazar la lógica para la última página: ¿qué vale safePage? ¿Y totalPages? ¿Qué evalúa la condición actual?
  3. Corregir la condición para que hasNext sea false en la última página y true en todas las demás.

Cuándo está listo

Los cuatro tests pasan. El fix es una única expresión — no hace falta reestructurar nada.