La aplicación Sistema de Gestión Tributaria Pasto es una SPA Angular con un flujo de login de dos pasos: primero se introduce el usuario y se hace clic en “Siguiente”; después se introduce la contraseña y se hace clic en “Iniciar Sesión”. Repetir ese flujo en cada test añade entre 5 y 15 segundos por caso, y con decenas de tests en la suite el tiempo se vuelve inmanejable. La solución adoptada en automation-arqc es realizar el login una sola vez en elDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/Giofelix/Proyecto-automatizacion-Empresa/llms.txt
Use this file to discover all available pages before exploring further.
global-setup, serializar el sessionStorage resultante en un archivo JSON, e inyectarlo en cada test mediante un addInitScript antes de que Angular cargue — sin tocar la red de autenticación en ningún test individual.
Flujo de autenticación
global-setup.js ejecuta el login completo
Antes de que arranque cualquier test, Playwright invoca
playwright/global-setup.js. Este script lanza una instancia de Chromium en modo headless, navega a BASE_URL y delega el flujo de login de dos pasos a LoginPage (ubicado en pages/login/login.page.js). El script valida de antemano que las tres variables de entorno estén presentes (BASE_URL, USER_GENERIC, PASSWORD_UNIVERSAL) y lanza un error descriptivo si falta alguna.El sessionStorage se serializa en user.json
Después de un login exitoso, el script extrae todas las entradas de Si
window.sessionStorage (los tokens y metadatos de sesión que Angular almacena) y los persiste en playwright/.auth/user.json con la estructura:sessionStorage queda vacío tras el login, el script lanza un error (El login no generó datos en sessionStorage) y guarda una captura de pantalla del fallo en playwright/.auth/globalsetup-failure.png.La sesión se reutiliza si es reciente (solo en local)
En entornos locales, si
user.json ya existe y tiene menos de 8 horas de antigüedad, el global-setup lo reutiliza sin lanzar un nuevo login. En CI (process.env.CI definido), la sesión siempre se regenera desde cero para garantizar que no haya tokens expirados entre builds.auth.fixture.js inyecta la sesión en cada test
El fixture
paginaAutenticada (definido en fixtures/auth.fixture.js) lee user.json, registra un addInitScript que escribe todas las entradas en window.sessionStorage antes de que Angular inicialice, y luego navega a BASE_URL. Cuando Angular arranca ya encuentra los tokens en el almacén de sesión y trata al usuario como autenticado, saltando directamente a la pantalla de módulos.global-teardown.js cierra la sesión y elimina user.json
Al finalizar toda la suite,
playwright/global-teardown.js carga la sesión de user.json, inyecta el sessionStorage en una página nueva, navega a la aplicación y llama a LoginPage.logout() para hacer un cierre de sesión limpio en el servidor. En el bloque finally, independientemente de si el logout tuvo éxito, elimina user.json para que el siguiente build empiece siempre con una sesión fresca.Comportamiento de global-setup.js
El setup incluye validaciones y salvaguardas pensadas para servidores Angular remotos con latencia variable:
- Validación temprana de variables de entorno: si
BASE_URL,USER_GENERICoPASSWORD_UNIVERSALno están definidas, el proceso aborta con un mensaje claro antes de abrir el navegador. - Eliminación del
user.jsonanterior: si existe un archivo previo que haya superado las 8 horas, se elimina antes de generar uno nuevo para garantizar que nunca se inyecta una sesión parcialmente corrupta. - Captura de pantalla en fallo: si el login lanza una excepción, se guarda
playwright/.auth/globalsetup-failure.pngpara facilitar el diagnóstico sin necesidad de reproducir el error manualmente. - Flags de Chromium para entornos CI: el navegador se lanza con
--no-sandboxy--disable-dev-shm-usagepara compatibilidad con agentes de Jenkins sin entorno gráfico.
La fixture paginaAutenticada
Este es el código completo de fixtures/auth.fixture.js. Todos los tests de automation-arqc reciben paginaAutenticada como parámetro en lugar del page de Playwright base, lo que garantiza que la sesión esté activa desde el primer milisegundo del test:
waitFor del .mat-drawer-inner-container asegura que el menú lateral de Angular Material está completamente renderizado antes de que el test empiece a interactuar con él, evitando falsos fallos por timing en el arranque de la SPA.
playwright/.auth/user.json está en el .gitignore del repositorio y nunca se versiona. Cada desarrollador debe generarlo localmente antes de correr los tests por primera vez:globalSetup automáticamente como parte del paso de ejecución de Playwright, por lo que no es necesario ningún paso manual adicional.