Saltar a contenido

2 de julio de 2026

Corregí dos defaults que se me habían colado sin examinar en el arranque de Auth.js: dónde vive el archivo y cómo se llamaba su test.

Dos defaults que no había mirado bien: auth.ts a src/ y el test con nombre propio

Hoy no sumé funcionalidad; ordené algo que había quedado torcido y que, cuando me puse a mirarlo de cerca, no aguantaba la explicación. Fue a raíz de una pregunta simple sobre el arranque de Auth.js que armé la última vez: por qué el test se llamaba bootstrap.test.ts y no auth.test.ts. Tirando de ese hilo aparecieron dos decisiones que en realidad no había decidido: las había heredado de afuera sin pasarlas por la convención de mi propio repo.

La primera, el nombre. Le había puesto bootstrap porque nombré el test por lo que hace —bootstrapear el sistema de autenticación— en vez de por el archivo que prueba. Suena razonable hasta que lo contrastás con el resto del proyecto, donde el test siempre se llama como su módulo: email.test.ts, store.test.ts, config.test.ts. Era el único que rompía el patrón, y peor todavía para lo que un test tiene que hacer bien: dejarse encontrar. Quien busca el test de auth.ts tipea "auth.test", no "bootstrap". El nombre lindo obligaba a saber de antemano cómo lo había bautizado yo; puro conocimiento tribal.

La segunda, más de fondo: por qué auth.ts estaba en la raíz del repo, suelto entre los archivos de configuración, siendo el único módulo de aplicación fuera de src/. La respuesta honesta es que la documentación de Auth.js usa esa ubicación en sus ejemplos, yo la copié al plan, y después la respeté al implementar. Nunca la pensé contra mi estructura, que mete todo lo de la app bajo src/. Y no había ninguna necesidad técnica sujetándola ahí: Auth.js soporta src/auth.ts igual de bien, y el middleware y los endpoints lo van a importar por alias sin enterarse de la mudanza.

Las dos cosas eran la misma en el fondo —un default externo que entró sin control—, así que las corregí juntas y de raíz en vez de maquillarlas. Moví auth.ts a src/auth.ts y coloqué su test al lado, ahora sí, como src/auth.test.ts. Con eso desaparece la anomalía entera: el archivo queda donde vive todo el código, el test se llama como su módulo y encima está pegado a él, como el resto. Aproveché que era barato: todavía no hay middleware ni route handler importando auth.ts, así que la mudanza fue el archivo, su test y los imports internos, nada más. Corregí también el plan, que era donde estaba grabado el default, para que no vuelva a colarse: la tabla de archivos y la subtask 5b ahora dicen src/auth.ts y aclaran que el test se coloca al lado.

Un detalle que me quedó claro y que quiero anotar: mover el archivo bajo src/ no lo mete en el umbral de cobertura, y está bien que así sea. El gate del 95% se mide sobre src/lib/** —la lógica pura de dominio y utilidades—, y auth.ts no es eso: es el pegamento que instancia el framework. Se prueba por comportamiento, con los tres casos de arranque, que es el tipo de prueba que corresponde para esa capa. La lógica con sustancia —la guarda de secretos y el armado de la config— sigue en src/lib/auth/, pura y gateada al 100%. Verifiqué que todo quedara en su lugar: cincuenta y una pruebas en verde, cobertura intacta, tipos, linter, formato y build sin una queja. Nada nuevo funcionando, pero el repo quedó más honesto consigo mismo, y eso también es trabajo.