Corrige el off-by-one en paginate()
Una función de paginación pierde silenciosamente el último ítem en cada página. Un test fallando ya te dice dónde mirar — encuentra el bug y corrígelo.
Llegó un bug report: los endpoints de lista de atlas/gateway pierden consistentemente el último ítem en cada página. Cinco resultados pedidos, cuatro devueltos. Diez pedidos, nueve devueltos. Siempre uno de menos.
La función responsable es paginate() en src/gateway/paginate.ts. Ya hay un test fallando que reproduce el problema exactamente. Tu trabajo es leer el test, entender qué espera, encontrar el bug y corregirlo.
La situación
El test ya está escrito y actualmente está en rojo:
it("returns a full page including the last item", () => {
expect(paginate([1, 2, 3, 4, 5], 0, 3)).toEqual([1, 2, 3])
})Con la implementación actual devuelve [1, 2]. Un ítem de menos.
El fix es un solo carácter. La explicación de por qué está mal es la parte valiosa.
Lo que harás
- Leer el test fallando para entender qué se supone que devuelve
paginate(). - Leer
paginate.tsy encontrar la línea que está causando el off-by-one. - Corregirla — el test debe ser tu única guía.
- Ejecutar los tests para confirmar que el fix es correcto y que nada más se rompió.
Cuándo está listo
- El test fallando pasa.
- La función devuelve el número correcto de ítems para cualquier combinación válida de
pageysize.
Resiste el impulso de reescribir la función. El bug es una línea. Corrige solo eso.