Corrige dos bugs en los fixtures de Playwright: 1. startThreadOnLastMessage usaba client.getRooms()[0] (el primer room unido) en lugar del room activo, causando que el mensaje threaded se enviara al room equivocado. Ahora lee el room ID de window.location.hash (#/room/!xxx:server), con resolucion de alias si la URL contiene un alias en lugar de un ID. 2. waitForThreadReplyViaSdk iteraba todos los rooms unidos, lo que podia devolver falsos positivos de otros rooms. Ahora esta acotado al room de la URL actual, con logica de fallback para aliases canonicos y alternativos.
E2E Tests — agents_and_robots
Tests end-to-end con Playwright para verificar que los agentes Matrix responden correctamente via Element Web.
Requisitos
- Node.js v18+
- Agentes corriendo contra el homeserver (
./dev-scripts/server/start.sh) - Credenciales de un usuario de test en el homeserver
Instalacion
./dev-scripts/e2e/install.sh
Esto instala dependencias npm y Chromium para Playwright.
Configuracion
cp e2e/.env.example e2e/.env
Editar e2e/.env con las credenciales del usuario de test:
| Variable | Descripcion |
|---|---|
ELEMENT_URL |
URL de Element Web local (default: http://localhost:8090) |
MATRIX_HOMESERVER |
URL del homeserver Matrix |
MATRIX_USER |
MXID del usuario de test (@user:server) |
MATRIX_PASSWORD |
Password del usuario de test |
MATRIX_RECOVERY_KEY |
Recovery key para cross-signing/E2EE |
Ejecucion
# Ejecutar todos los tests (headless)
./dev-scripts/e2e/run.sh
# Con browser visible (requiere DISPLAY)
./dev-scripts/e2e/run.sh --headed
# Ejecutar un spec especifico
./dev-scripts/e2e/run.sh assistant-bot
# Directamente con Playwright
cd e2e && npx playwright test
cd e2e && npx playwright test --headed
cd e2e && npx playwright test assistant-bot.spec.ts
El script run.sh se encarga de:
- Verificar que los agentes estan corriendo
- Levantar Element Web si no esta activo
- Ejecutar los tests
- Generar reporte en caso de fallos
- Teardown de Element Web (si lo levanto)
Estructura
e2e/
├── package.json dependencias (Playwright, dotenv)
├── playwright.config.ts configuracion de Playwright
├── global-setup.ts login unico antes de todos los tests
├── .env.example template de credenciales
├── fixtures/
│ ├── element-auth.ts login y verificacion E2EE
│ └── matrix-room.ts helpers: goToRoom, sendMessage, waitForBotReply
├── tests/
│ ├── login.spec.ts smoke test: sesion y E2EE
│ ├── assistant-bot.spec.ts tests del assistant-bot
│ └── asistente-2.spec.ts tests del asistente-2 (con tools)
├── scripts/
│ └── setup-element.sh descarga y sirve Element Web local
└── element-web/ Element Web descargado (gitignored)
dev-scripts/e2e/
├── install.sh instalacion de dependencias
└── run.sh orquestacion completa de tests
Debug de fallos
Screenshots
Cuando un test falla, Playwright captura screenshot automaticamente en e2e/test-results/. Revisarlos para entender el estado de la UI al momento del fallo.
Reporte HTML
Si hay fallos, run.sh genera un reporte HTML:
cd e2e && npx playwright show-report
Modo headed
Para ver el browser en tiempo real (requiere entorno grafico):
./dev-scripts/e2e/run.sh --headed
Traces
En el primer retry, Playwright captura un trace completo. Verlo con:
cd e2e && npx playwright show-trace test-results/<test-name>/trace.zip
Login cacheado
El global-setup cachea la sesion autenticada en e2e/.auth/state.json por 12 horas. Si hay problemas de autenticacion:
rm -rf e2e/.auth/
Y re-ejecutar los tests para forzar login fresco.
Notas de diseno
- Assertions flexibles para LLM: las respuestas de los bots son no-deterministicas. Solo se verifica que responde, que no esta vacio, y longitud razonable.
- Commands con assertions estrictas:
!helpy!pingtienen respuestas deterministicas y se validan con mayor precision. - Tests secuenciales:
fullyParallel: falseyworkers: 1para evitar race conditions en el timeline de Matrix. - Timeouts generosos: 60s por test, 30s para expect. Los LLMs pueden tardar 5-20s en responder.
- Retry en CI: 1 retry en CI para manejar timeouts ocasionales.