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.
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
- Ejecutar los tests y leer el output del fallo — te dice qué devuelve
hasNextvs. qué debería devolver. - Trazar la lógica para la última página: ¿qué vale
safePage? ¿YtotalPages? ¿Qué evalúa la condición actual? - Corregir la condición para que
hasNextseafalseen la última página ytrueen todas las demás.
Cuándo está listo
Los cuatro tests pasan. El fix es una única expresión — no hace falta reestructurar nada.