d04a309313
Proyecto Node.js independiente en e2e/ con Playwright + Chromium headless. Incluye setup-element.sh para descargar y servir Element Web localmente (puerto 8090 por defecto, 8080 ocupado por Docker). Scripts de instalacion y placeholder para ejecucion de tests. Cierra issue 0022a. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
120 lines
4.3 KiB
Markdown
120 lines
4.3 KiB
Markdown
# 0022a — E2E Tests: Infraestructura base
|
|
|
|
> Parte de [0022 — Tests E2E con Playwright](0022-e2e-tests-playwright.md)
|
|
|
|
## Objetivo
|
|
|
|
Crear el proyecto Node.js base para tests E2E con Playwright: estructura de directorios, configuracion, scripts de instalacion y setup de Element Web local.
|
|
|
|
## Contexto
|
|
|
|
- Primer sub-issue del desglose de 0022. Establece la base sobre la que 0022b y 0022c construyen.
|
|
- Playwright necesita un proyecto Node.js independiente con sus propias dependencias
|
|
- Element Web se sirve localmente para control total del entorno
|
|
- La VPS no tiene entorno grafico — todo headless
|
|
|
|
## Arquitectura
|
|
|
|
```
|
|
e2e/ NEW — proyecto Node.js independiente
|
|
├── package.json NEW — playwright, @playwright/test, dotenv
|
|
├── playwright.config.ts NEW — config headless, timeouts, base URL
|
|
├── .env.example NEW — template de variables E2E
|
|
├── fixtures/ NEW — directorio vacio (se llena en 0022b)
|
|
├── tests/ NEW — directorio vacio (se llena en 0022c)
|
|
└── scripts/
|
|
└── setup-element.sh NEW — descargar/levantar Element Web local
|
|
|
|
dev-scripts/e2e/
|
|
├── install.sh NEW — instalar Node, Playwright, deps
|
|
└── run.sh NEW — placeholder (se completa en 0022c)
|
|
```
|
|
|
|
### Patron pure core / impure shell
|
|
|
|
100% infra de testing, sin cambios al codigo Go.
|
|
|
|
## Tareas
|
|
|
|
### Fase 1: Proyecto Node.js
|
|
|
|
- [ ] **1.1** Crear `e2e/package.json` con dependencias: `@playwright/test`, `dotenv`
|
|
- [ ] **1.2** Crear `e2e/playwright.config.ts`:
|
|
- Headless por defecto
|
|
- Timeout de 30s para acciones (LLMs son lentos)
|
|
- Screenshot on failure
|
|
- Base URL desde env (`ELEMENT_URL`)
|
|
- Solo proyecto Chromium
|
|
- `globalSetup` apuntando a `global-setup.ts` (se creara en 0022b)
|
|
- [ ] **1.3** Crear `e2e/.env.example`:
|
|
```
|
|
ELEMENT_URL=http://localhost:8080
|
|
MATRIX_HOMESERVER=https://matrix-af2f3d.organic-machine.com
|
|
MATRIX_USER=@test-user:matrix-af2f3d.organic-machine.com
|
|
MATRIX_PASSWORD=
|
|
MATRIX_RECOVERY_KEY=
|
|
```
|
|
|
|
### Fase 2: Scripts
|
|
|
|
- [ ] **2.1** Crear `e2e/scripts/setup-element.sh`:
|
|
- Descargar Element Web release (version fijada)
|
|
- Generar `config.json` apuntando al homeserver
|
|
- Servir con `python3 -m http.server` o `npx serve` en puerto 8080
|
|
- Opcion para detener el servidor
|
|
- [ ] **2.2** Crear `dev-scripts/e2e/install.sh`:
|
|
- Verificar/instalar Node.js v18+
|
|
- `npm ci` en `e2e/`
|
|
- `npx playwright install chromium`
|
|
- `npx playwright install-deps` (necesita sudo)
|
|
- [ ] **2.3** Crear `dev-scripts/e2e/run.sh` como placeholder:
|
|
- Verificar que `e2e/node_modules/` existe
|
|
- Verificar que `e2e/.env` existe
|
|
- Mensaje indicando que los tests se agregan en 0022c
|
|
|
|
### Fase 3: Gitignore y verificacion
|
|
|
|
- [ ] **3.1** Agregar a `.gitignore`: `e2e/node_modules/`, `e2e/test-results/`, `e2e/.auth/`, `e2e/.env`
|
|
- [ ] **3.2** Verificar que `npm ci` y `npx playwright install chromium` funcionan en la VPS
|
|
- [ ] **3.3** Verificar que Element Web se levanta y es accesible en `localhost:8080`
|
|
|
|
---
|
|
|
|
## Ejemplo de uso
|
|
|
|
```bash
|
|
# Instalar todo
|
|
./dev-scripts/e2e/install.sh
|
|
|
|
# Configurar credenciales
|
|
cp e2e/.env.example e2e/.env
|
|
vim e2e/.env
|
|
|
|
# Levantar Element Web
|
|
./e2e/scripts/setup-element.sh start
|
|
# → Element Web serving at http://localhost:8080
|
|
|
|
# Verificar que carga
|
|
curl -s http://localhost:8080 | head -5
|
|
# → <!doctype html>...
|
|
|
|
# Detener
|
|
./e2e/scripts/setup-element.sh stop
|
|
```
|
|
|
|
## Decisiones de diseno
|
|
|
|
- **Version fijada de Element**: evita que cambios de UI rompan selectores. Se actualiza manualmente.
|
|
- **python3 http.server como fallback**: disponible en cualquier VPS sin instalar nada extra. `npx serve` como alternativa si esta disponible.
|
|
- **Directorios vacios con .gitkeep**: `fixtures/` y `tests/` se crean vacios para que la estructura exista desde el primer sub-issue.
|
|
|
|
## Prerequisitos
|
|
|
|
- Acceso a la VPS con sudo (para `playwright install-deps`)
|
|
- Conectividad al homeserver Matrix
|
|
|
|
## Riesgos
|
|
|
|
- **Node.js no instalado**: `install.sh` debe manejarlo con instrucciones claras o instalacion automatica via nvm/nodesource.
|
|
- **Playwright deps del sistema**: varian por distro. `playwright install-deps` lo maneja pero necesita sudo.
|