Commit Graph

5 Commits

Author SHA1 Message Date
egutierrez e0e0f2e013 refactor: reescribir fixtures E2E para deteccion robusta via SDK
Tres cambios principales en matrix-room.ts:

1. closeThreadPanel: nueva funcion exportada que cierra el panel de thread
   si esta abierto. Necesario para evitar que sender elements del panel
   contaminen locators de waitForBotReply.

2. waitForBotReply reescrito: usa Matrix SDK (mxMatrixClientPeg) en lugar
   de locators DOM para detectar respuestas. Captura startEventId antes de
   esperar para solo detectar mensajes NUEVOS. Ignora thread replies
   (rel_type=m.thread) y filtra por sender via room.getMember().
   Elimina la deteccion de sender por DOM que fallaba cuando thread summaries
   inyectaban elementos adicionales en el main timeline.

3. startThreadOnLastMessage reescrito: intenta primero via UI (right-click
   en el ultimo EventTile → 'Reply in Thread' en context menu → escribir
   en el composer del thread panel). Si el context menu no aparece (modo
   headless), cae al fallback SDK que envia el mensaje con m.relates_to
   correcto. El test de thread ya pasa con el fallback.
2026-03-08 18:33:40 +00:00
egutierrez 80014e8fb8 fix(e2e): obtener room ID desde URL en startThreadOnLastMessage y waitForThreadReplyViaSdk
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.
2026-03-08 18:06:05 +00:00
egutierrez 85e79b11fd refactor: reescribir goToRoom y startThreadOnLastMessage en matrix-room.ts
goToRoom: implementa estrategia doble — primero intenta click directo en el sidebar (mas robusto), luego usa Ctrl+K como fallback. Evita el click en el boton Search que a veces es bloqueado por toasts.

startThreadOnLastMessage: en headless Chromium la hover action bar de Element no se renderiza (es React onMouseEnter, no CSS :hover). Ahora usa el Matrix SDK expuesto en window.mxMatrixClientPeg para enviar el mensaje threaded directamente via API, evitando la dependencia del panel UI.

Nueva funcion waitForThreadReplyViaSdk: consulta el timeline del SDK en lugar de depender del panel de thread UI. Busca eventos con m.relates_to.rel_type === 'm.thread' y filtra por sender si se especifica.

Nueva funcion interna waitForRoomLoaded: espera header del room o el composer como fallback, desacoplando la verificacion de la navegacion.
2026-03-08 17:33:37 +00:00
egutierrez 947bb70eba feat: mejoras de robustez en fixtures de login y room
element-auth.ts:
- Reintentos con backoff para M_LIMIT_EXCEEDED (max 3 intentos)
- Screenshots de debug en cada paso del login
- Deteccion de sesion activa (skip login si ya logueado)
- Manejo robusto de cross-signing con fallback si no hay Done button
- waitForLoginResult() detecta errores, rate limits y exito

matrix-room.ts:
- Logging detallado en goToRoom, sendMessage, waitForBotReply
- Screenshots automaticas en errores y timeouts
- Dump del timeline en timeout para diagnóstico
- Nuevos helpers: startThreadOnLastMessage, sendThreadMessage,
  waitForThreadReply, assertBotDidNotReplyInMainTimeline

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 15:47:43 +00:00
egutierrez 71d866abde feat: auth fixtures y helpers de interaccion E2E
Implementa el issue 0022b — fixtures de Playwright para
autenticacion en Element Web y helpers de interaccion con rooms.

- element-auth.ts: flujo completo de login + cross-signing con
  recovery key, preparado para cachear sesion via storageState
- global-setup.ts: ejecuta login una vez antes de todos los tests,
  reutiliza sesion cacheada si tiene menos de 12 horas
- matrix-room.ts: helpers goToRoom, sendMessage, waitForBotReply,
  getLastMessage, assertNoDecryptionErrors (detecta "Unable to decrypt")
- login.spec.ts: 3 smoke tests validando sesion, E2EE y navegacion
- playwright.config.ts: configurado storageState para inyectar sesion

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