/** * Setup de autenticación para tests E2E de Playwright. * * El flujo de login de Anexo76 pasa por Workspace (workspace.aduanasoft.com): * 1. Navegar a /login → 303 redirect al formulario de Workspace * 2. Llenar el form de Workspace con el usuario de prueba (creado en globalSetup) * 3. Workspace/Keycloak redirige de vuelta a /auth/callback → /dashboard * 4. Guardar storageState para todos los tests dependientes * * El usuario de prueba es creado y eliminado por globalSetup / globalTeardown. * Patrón idéntico al de aduanasoft-hub. */ import { test as setup, expect } from '@playwright/test' import { mkdirSync } from 'node:fs' import path from 'node:path' import { fileURLToPath } from 'node:url' const __dirname = path.dirname(fileURLToPath(import.meta.url)) const authFile = path.join(__dirname, '.auth/user.json') setup('autenticacion', async ({ page }) => { const username = process.env.E2E_TEST_USER ?? '' const password = process.env.E2E_TEST_PASSWORD ?? '' if (!username) throw new Error('E2E_TEST_USER no está configurado') if (!password) throw new Error('E2E_TEST_PASSWORD no está configurado') // ── 1. Navegar a /login — Workspace intercepta y muestra su formulario ── await page.goto('/login') // ── 2. Llenar el formulario de Workspace (mismos selectores que hub/login.spec.ts) ── await page.getByRole('textbox', { name: /usuario o email/i }).fill(username) await page.getByLabel(/contraseña/i).fill(password) await page.getByRole('button', { name: /continuar/i }).click() // ── 3. Esperar redirect de vuelta a Anexo76 (/auth/callback → /dashboard) ── await expect(page).toHaveURL(/\/dashboard/, { timeout: 30_000 }) // ── 4. Guardar estado para los tests dependientes ───────────────────────── mkdirSync(path.dirname(authFile), { recursive: true }) await page.context().storageState({ path: authFile }) })