Files
egutierrez 2752ce2f6a feat: script de orquestacion E2E run.sh
Completa el placeholder de 0022a con el flujo completo:
1. Verifica agentes corriendo (via ps.sh)
2. Levanta Element Web si no esta activo
3. Ejecuta npx playwright test
4. Genera reporte HTML en caso de fallos
5. Teardown de Element Web
6. Retorna exit code de Playwright

Soporte --headed para debug local con DISPLAY.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 14:35:03 +00:00

135 lines
3.4 KiB
Bash
Executable File

#!/usr/bin/env bash
# run.sh — ejecutar E2E tests con Playwright
#
# Uso:
# ./dev-scripts/e2e/run.sh # headless (default)
# ./dev-scripts/e2e/run.sh --headed # con browser visible (requiere DISPLAY)
#
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
E2E_DIR="$REPO_ROOT/e2e"
ELEMENT_SCRIPT="$E2E_DIR/scripts/setup-element.sh"
PS_SCRIPT="$REPO_ROOT/dev-scripts/server/ps.sh"
HEADED=false
EXTRA_ARGS=()
for arg in "$@"; do
case "$arg" in
--headed)
HEADED=true
;;
*)
EXTRA_ARGS+=("$arg")
;;
esac
done
# --- Verificaciones previas ---
# 1. Verificar dependencias instaladas
if [ ! -d "$E2E_DIR/node_modules" ]; then
echo "ERROR: node_modules no encontrado. Ejecutar primero:"
echo " ./dev-scripts/e2e/install.sh"
exit 1
fi
# 2. Verificar .env
if [ ! -f "$E2E_DIR/.env" ]; then
echo "ERROR: e2e/.env no encontrado. Crear desde el template:"
echo " cp e2e/.env.example e2e/.env"
echo " # editar e2e/.env con credenciales"
exit 1
fi
# 3. Verificar que los agentes estan corriendo
echo "=== Verificando agentes ==="
if [ -x "$PS_SCRIPT" ]; then
if ! "$PS_SCRIPT" 2>/dev/null | grep -q "running"; then
echo "WARN: el launcher no parece estar corriendo."
echo " Iniciar con: ./dev-scripts/server/start.sh"
echo " Continuando de todas formas..."
else
echo "Launcher corriendo OK"
fi
else
echo "WARN: no se encontro ps.sh, no se puede verificar el estado de los agentes"
fi
# --- Element Web ---
echo ""
echo "=== Element Web ==="
ELEMENT_STARTED_BY_US=false
if [ -x "$ELEMENT_SCRIPT" ]; then
if "$ELEMENT_SCRIPT" status 2>/dev/null | grep -q "corriendo\|running\|listening"; then
echo "Element Web ya esta corriendo"
else
echo "Levantando Element Web..."
"$ELEMENT_SCRIPT" start
ELEMENT_STARTED_BY_US=true
# Esperar a que el servidor este listo
sleep 2
fi
else
echo "WARN: setup-element.sh no encontrado. Asegurarse de que Element Web esta corriendo."
fi
# --- Ejecutar tests ---
echo ""
echo "=== Ejecutando E2E tests ==="
PLAYWRIGHT_ARGS=()
if [ "$HEADED" = true ]; then
if [ -z "${DISPLAY:-}" ] && [ -z "${WAYLAND_DISPLAY:-}" ]; then
echo "WARN: --headed solicitado pero no se detecta DISPLAY. Ejecutando headless."
else
PLAYWRIGHT_ARGS+=("--headed")
fi
fi
# Agregar argumentos extra del usuario
if [ ${#EXTRA_ARGS[@]} -gt 0 ]; then
PLAYWRIGHT_ARGS+=("${EXTRA_ARGS[@]}")
fi
EXIT_CODE=0
cd "$E2E_DIR"
npx playwright test "${PLAYWRIGHT_ARGS[@]}" || EXIT_CODE=$?
# Generar reporte HTML si hay fallos
if [ "$EXIT_CODE" -ne 0 ]; then
echo ""
echo "=== Generando reporte HTML ==="
npx playwright show-report --host 0.0.0.0 --port 0 2>/dev/null &
REPORT_PID=$!
sleep 1
kill "$REPORT_PID" 2>/dev/null || true
echo "Reporte disponible en: $E2E_DIR/playwright-report/"
echo " Para verlo: cd e2e && npx playwright show-report"
fi
# --- Teardown ---
if [ "$ELEMENT_STARTED_BY_US" = true ]; then
echo ""
echo "=== Deteniendo Element Web ==="
"$ELEMENT_SCRIPT" stop 2>/dev/null || true
fi
# --- Resultado ---
echo ""
if [ "$EXIT_CODE" -eq 0 ]; then
echo "=== Todos los tests pasaron ==="
else
echo "=== Algunos tests fallaron (exit code: $EXIT_CODE) ==="
echo "Ver screenshots en: $E2E_DIR/test-results/"
fi
exit "$EXIT_CODE"