Referencia del Test Helper
t/helper.pl es la librería compartida de la suite de tests: el constructor de fixtures y las utilidades de login que todo archivo de test usa. Esta página es la referencia ojo-de-programador de las piezas que provee. (Para cómo correr la suite, ver la página running-tests; para qué se prueba, ver la página de cobertura.)
setup_test_env
El constructor de entorno, invocable desde cualquier archivo de test:
- Define el secret de sesión a un valor de test conocido y
MOJO_MODE=test(la rama de modo test del CMS ejecuta el trabajo diferido de forma síncrona, así los tests no esperan timers). - Crea una base de datos SQLite temporal fresca (File::Temp, UNLINK-solo-el-archivo-principal) construida statement por statement desde el
schema.sqlreal, con las secciones INSERT de seed de users y settings removidas para que las seeds de la propia suite sean autoritativas. - Habilita la aplicación de foreign keys (
PRAGMA foreign_keys = ON). - Apunta
CHINASKI_DBal archivo temporal,CHINASKI_DOCS_DIRa un path anidado por corrida (<db>.docs/documents), y crea el directoriooutput/de la app si falta (está en el gitignore; los checkouts frescos en CI fallarían de otro modo el chequeo de output-dir escribible del /health en tests que lo ejercitan). - Registra el cleanup en un bloque END: los sidecars
-wal/-shmde WAL y el árbol de docs, que los trucos de unlink de SQLite nunca atrapan. - Siembra dos users con contraseñas hasheadas con bcrypt generadas en runtime vía Crypt::Passphrase (
admin/admin123,editor/editor123) y un site de dos idiomas (en, es). - Finalmente carga la aplicación real (
require cms.pl) y expone el harness como$t = Test::Mojo->new(globals de paquete compartidos, así cada test puede$t->get_ok(...)justo después de la llamada).
login_admin / login_editor
Manejan un inicio de sesión completo:
- GET /login (200).
- Extraer el token CSRF del formulario renderizado (
csrf_token" ... value="…") vía una regex: coincidiendo con cómo se valida el CSRF de login del lado servidor. - POST de las credenciales con el token, esperar la redirección 302, luego asertar que el header
Locationcoincida con el área de admin (la app puede redirigir a un path return_to guardado cuando el login fue precedido por una URL protegida, por eso el test aserta solo el prefijo).
Otros bits exportados
$ty$dbhson globals de paquete para que los tests puedan manejar llamadas HTTP o entrar directamente a la DB cuando lo necesiten.- Las funciones helper son nombres exportados vía la lista de módulos (
setup_test_env,login_admin,login_editor,$t,$dbh).
Convenciones
- Los archivos que necesitan el harness llaman
setup_test_env()justo después de haceruse/requirede helper.pl; cualquier cosa antes de esa llamada no tiene app ni DB. - Las mutaciones de estado local deben quedar dentro de la propia sesión del archivo de test; el harness no resetea nada entre tests dentro de un mismo archivo (eso es aislamiento por archivo, no por aserción).
- Los tests que hacen shell-out al builder definen
CHINASKI_TEST=1ellos mismos; el helper no lo hace.