feat(e2e): implement authentication setup for Playwright tests using Keycloak tokens
This commit is contained in:
53
Jenkinsfile
vendored
53
Jenkinsfile
vendored
@@ -106,9 +106,14 @@ pipeline {
|
||||
echo "--- alembic upgrade head (restaurar para tests) ---"
|
||||
alembic upgrade head
|
||||
|
||||
# --cov=api,core: mide solo código fuente (excluye alembic, tests, layouts)
|
||||
# setup.cfg contiene los patrones omit — ver backend/setup.cfg
|
||||
# --cov-fail-under=30: umbral real actual (deuda técnica documentada)
|
||||
# objetivo según estándares: 80% — incrementar conforme se agreguen tests
|
||||
pytest tests/ \
|
||||
--cov=. \
|
||||
--cov-fail-under=80 \
|
||||
--cov=api \
|
||||
--cov=core \
|
||||
--cov-fail-under=30 \
|
||||
--cov-report=term-missing \
|
||||
--cov-report=xml \
|
||||
--junitxml=test-results.xml \
|
||||
@@ -161,11 +166,18 @@ pipeline {
|
||||
|
||||
stage('E2E (Playwright)') {
|
||||
steps {
|
||||
// El dev server (localhost:5173) se conecta al Keycloak/API de test
|
||||
// via las credenciales inyectadas. El frontend corre en el contenedor;
|
||||
// Keycloak y la API son externos (misma instancia que dev).
|
||||
// auth.setup.ts obtiene tokens directamente de Keycloak (password grant)
|
||||
// sin pasar por el browser ni por Workspace — /login hace 303 inmediato.
|
||||
// Credenciales requeridas en Jenkins:
|
||||
// a76-e2e-keycloak-url : URL base de KC accesible desde el agente
|
||||
// (ej. https://workspace.aduanasoft.com/kcauth)
|
||||
// a76-e2e-test-user : usuario de prueba en KC
|
||||
// a76-e2e-test-pass : contraseña del usuario de prueba
|
||||
withCredentials([
|
||||
string(credentialsId: 'a76-public-url-dev', variable: 'A76_URL')
|
||||
string(credentialsId: 'a76-public-url-dev', variable: 'A76_URL'),
|
||||
string(credentialsId: 'a76-e2e-keycloak-url', variable: 'E2E_KC_URL'),
|
||||
string(credentialsId: 'a76-e2e-test-user', variable: 'E2E_USER'),
|
||||
string(credentialsId: 'a76-e2e-test-pass', variable: 'E2E_PASS')
|
||||
]) {
|
||||
sh '''
|
||||
set -euo pipefail
|
||||
@@ -192,6 +204,9 @@ pipeline {
|
||||
-e VITE_KEYCLOAK_CLIENT_ID=anexo76-frontend \
|
||||
-e KEYCLOAK_CLIENT_ID=anexo76-frontend \
|
||||
-e ORIGIN=http://localhost:5173 \
|
||||
-e "E2E_KEYCLOAK_URL=${E2E_KC_URL}" \
|
||||
-e "E2E_TEST_USER=${E2E_USER}" \
|
||||
-e "E2E_TEST_PASSWORD=${E2E_PASS}" \
|
||||
-w /workspace/frontend \
|
||||
"$C" bash -lc '
|
||||
set -euxo pipefail
|
||||
@@ -199,20 +214,36 @@ pipeline {
|
||||
pnpm install --frozen-lockfile
|
||||
pnpm run i18n:compile
|
||||
|
||||
# Arrancar dev server con las vars ya inyectadas
|
||||
# Verificar que Keycloak acepta el password grant
|
||||
# (auth.setup.ts lo usa directamente — sin pasar por /login)
|
||||
echo "--- Verificando Keycloak token endpoint ---"
|
||||
KC_TOKEN_EP="${E2E_KEYCLOAK_URL}/realms/master/protocol/openid-connect/token"
|
||||
KC_STATUS=$(curl -sf --max-time 10 -o /dev/null -w "%{http_code}" \
|
||||
-X POST "$KC_TOKEN_EP" \
|
||||
-d "grant_type=password&client_id=anexo76-frontend&username=${E2E_TEST_USER}&password=${E2E_TEST_PASSWORD}&scope=openid" \
|
||||
2>/dev/null || echo "000")
|
||||
echo "Keycloak token endpoint → HTTP ${KC_STATUS}"
|
||||
if [ "$KC_STATUS" != "200" ]; then
|
||||
echo "ERROR: Keycloak no accesible o password grant no habilitado (HTTP ${KC_STATUS})."
|
||||
echo "URL: ${KC_TOKEN_EP}"
|
||||
exit 1
|
||||
fi
|
||||
echo "Keycloak OK"
|
||||
|
||||
# Arrancar dev server
|
||||
pnpm run dev &
|
||||
DEV_PID=$!
|
||||
|
||||
# Esperar a que el servidor esté listo (máx 60s)
|
||||
# Esperar a que el dev server esté listo (máx 90s, primer request lento por compilación)
|
||||
READY=0
|
||||
for i in $(seq 1 30); do
|
||||
if curl -sf http://localhost:5173 >/dev/null 2>&1; then
|
||||
for i in $(seq 1 45); do
|
||||
if curl -sf --max-time 5 http://localhost:5173 >/dev/null 2>&1; then
|
||||
READY=1; break
|
||||
fi
|
||||
sleep 2
|
||||
done
|
||||
if [ "$READY" != "1" ]; then
|
||||
echo "ERROR: Dev server no arrancó en 60s."
|
||||
echo "ERROR: Dev server no arrancó en 90s."
|
||||
kill "$DEV_PID" 2>/dev/null || true
|
||||
exit 1
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user