diff --git a/dev-scripts/e2e/run.sh b/dev-scripts/e2e/run.sh index 0a056c6..82ef11a 100755 --- a/dev-scripts/e2e/run.sh +++ b/dev-scripts/e2e/run.sh @@ -1,19 +1,42 @@ #!/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" -# Verificar dependencias instaladas +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 -# Verificar .env +# 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" @@ -21,6 +44,91 @@ if [ ! -f "$E2E_DIR/.env" ]; then exit 1 fi -echo "Los tests E2E se agregan en el issue 0022c." -echo "Cuando esten listos, ejecutar:" -echo " cd $E2E_DIR && npx playwright test" +# 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"