- fixtures/keycloak.ts: Admin REST API helpers (createTestUser, assignRoles, deleteTestUser) — copia exacta del hub - global-setup.ts: crea usuario e2e-anexo76 en KC antes de los tests - global-teardown.ts: elimina el usuario al finalizar - auth.setup.ts: navega a /login → Workspace → llena form → /dashboard (ya no usa password grant ni Direct Access Grants) - playwright.config.ts: agrega globalSetup y globalTeardown - Jenkinsfile: a76-e2e-credentials ahora son credenciales de KC admin; usuario de prueba es efímero (creado/borrado por global-setup/teardown) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
43 lines
2.0 KiB
TypeScript
43 lines
2.0 KiB
TypeScript
/**
|
|
* 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 })
|
|
})
|