refactor: migrar tests E2E a persistent context
global-setup.ts: - Usa launchPersistentContext en vez de browser.newContext() - Reemplaza storageState por marker file para cache de sesion - Captura logs de consola del browser para debug - Screenshots y HTML dump en caso de error playwright.config.ts: - Elimina storageState (ahora via persistent context fixture) - Screenshots siempre activas, video y trace en failures Tests (login, assistant-bot, asistente-2): - Importan test/expect desde persistent-context fixture - Usan handleElementDialogs() en vez de espera manual de rooms - Nuevo test de threads en asistente-2: verifica que el bot responde dentro del thread cuando se le habla por thread Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,20 +1,18 @@
|
||||
import { test, expect } from "@playwright/test";
|
||||
import { test, expect, handleElementDialogs } from "../fixtures/persistent-context";
|
||||
import {
|
||||
goToRoom,
|
||||
sendMessage,
|
||||
waitForBotReply,
|
||||
assertNoDecryptionErrors,
|
||||
startThreadOnLastMessage,
|
||||
sendThreadMessage,
|
||||
waitForThreadReply,
|
||||
} from "../fixtures/matrix-room";
|
||||
|
||||
test.describe("asistente-2", () => {
|
||||
test.beforeEach(async ({ page }) => {
|
||||
await page.goto("/");
|
||||
|
||||
// Esperar a que la sesion este lista
|
||||
await expect(
|
||||
page.locator('[role="tree"][aria-label="Rooms"]')
|
||||
).toBeVisible({ timeout: 30_000 });
|
||||
|
||||
await handleElementDialogs(page);
|
||||
await goToRoom(page, "Asistente 2");
|
||||
});
|
||||
|
||||
@@ -65,6 +63,37 @@ test.describe("asistente-2", () => {
|
||||
expect(reply.toLowerCase()).toContain("ping");
|
||||
});
|
||||
|
||||
test("responde dentro del thread cuando se le habla por thread", async ({
|
||||
page,
|
||||
}) => {
|
||||
// 1. Enviar un mensaje normal (sera el thread root)
|
||||
await sendMessage(page, "Mensaje para iniciar thread");
|
||||
|
||||
// Esperar a que el bot responda al mensaje original
|
||||
await waitForBotReply(page, {
|
||||
timeout: 60_000,
|
||||
sender: "Asistente 2",
|
||||
});
|
||||
|
||||
// 2. Iniciar thread sobre el mensaje del usuario
|
||||
await startThreadOnLastMessage(page);
|
||||
|
||||
// 3. Enviar mensaje dentro del thread
|
||||
await sendThreadMessage(
|
||||
page,
|
||||
"Hola desde el thread, respondeme aqui por favor"
|
||||
);
|
||||
|
||||
// 4. Esperar que el bot responda DENTRO del thread
|
||||
const threadReply = await waitForThreadReply(page, {
|
||||
timeout: 60_000,
|
||||
sender: "Asistente 2",
|
||||
});
|
||||
|
||||
expect(threadReply).toBeTruthy();
|
||||
expect(threadReply.length).toBeGreaterThan(5);
|
||||
});
|
||||
|
||||
test("no hay errores de E2EE en el timeline", async ({ page }) => {
|
||||
await assertNoDecryptionErrors(page);
|
||||
});
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { test, expect } from "@playwright/test";
|
||||
import { test, expect, handleElementDialogs } from "../fixtures/persistent-context";
|
||||
import {
|
||||
goToRoom,
|
||||
sendMessage,
|
||||
@@ -9,12 +9,7 @@ import {
|
||||
test.describe("assistant-bot", () => {
|
||||
test.beforeEach(async ({ page }) => {
|
||||
await page.goto("/");
|
||||
|
||||
// Esperar a que la sesion este lista
|
||||
await expect(
|
||||
page.locator('[role="tree"][aria-label="Rooms"]')
|
||||
).toBeVisible({ timeout: 30_000 });
|
||||
|
||||
await handleElementDialogs(page);
|
||||
await goToRoom(page, "Assistant");
|
||||
});
|
||||
|
||||
|
||||
+10
-26
@@ -1,54 +1,38 @@
|
||||
import { test, expect } from "@playwright/test";
|
||||
import { test, expect, handleElementDialogs } from "../fixtures/persistent-context";
|
||||
import { assertNoDecryptionErrors } from "../fixtures/matrix-room";
|
||||
|
||||
test.describe("Login y sesion E2EE", () => {
|
||||
test("storageState cargado — rooms visibles en sidebar", async ({
|
||||
page,
|
||||
}) => {
|
||||
test("sesion cargada — rooms visibles en sidebar", async ({ page }) => {
|
||||
await page.goto("/");
|
||||
await handleElementDialogs(page);
|
||||
|
||||
// Si la sesion esta cacheada, Element debe mostrar rooms directamente
|
||||
await expect(
|
||||
page.locator('[role="tree"][aria-label="Rooms"]')
|
||||
).toBeVisible({ timeout: 30_000 });
|
||||
// Si llegamos aqui, handleElementDialogs ya verifico rooms sidebar
|
||||
const rooms = page.locator('[role="treeitem"]');
|
||||
const roomCount = await rooms.count();
|
||||
expect(roomCount).toBeGreaterThan(0);
|
||||
});
|
||||
|
||||
test("no hay mensajes Unable to decrypt en rooms recientes", async ({
|
||||
page,
|
||||
}) => {
|
||||
await page.goto("/");
|
||||
|
||||
// Esperar a que cargue la lista de rooms
|
||||
await expect(
|
||||
page.locator('[role="tree"][aria-label="Rooms"]')
|
||||
).toBeVisible({ timeout: 30_000 });
|
||||
await handleElementDialogs(page);
|
||||
|
||||
// Abrir el primer room visible para verificar mensajes
|
||||
const firstRoom = page
|
||||
.locator('[role="treeitem"]')
|
||||
.first();
|
||||
const firstRoom = page.locator('[role="treeitem"]').first();
|
||||
const roomCount = await firstRoom.count();
|
||||
|
||||
if (roomCount > 0) {
|
||||
await firstRoom.click();
|
||||
|
||||
// Esperar a que cargue el timeline
|
||||
await page.waitForTimeout(3_000);
|
||||
|
||||
// Verificar que no hay errores de desencriptado
|
||||
await assertNoDecryptionErrors(page);
|
||||
}
|
||||
});
|
||||
|
||||
test("helpers de room navegan correctamente", async ({ page }) => {
|
||||
await page.goto("/");
|
||||
await handleElementDialogs(page);
|
||||
|
||||
// Esperar a que la sesion este lista
|
||||
await expect(
|
||||
page.locator('[role="tree"][aria-label="Rooms"]')
|
||||
).toBeVisible({ timeout: 30_000 });
|
||||
|
||||
// Verificar que hay al menos un room en el sidebar
|
||||
const rooms = page.locator('[role="treeitem"]');
|
||||
const roomCount = await rooms.count();
|
||||
expect(roomCount).toBeGreaterThan(0);
|
||||
|
||||
Reference in New Issue
Block a user