478007fc50
Importa closeThreadPanel y lo llama en beforeEach tras goToRoom. Si el thread panel queda abierto de sesiones previas, sus sender elements contaminarían los locators de waitForBotReply en tests posteriores.
101 lines
3.1 KiB
TypeScript
101 lines
3.1 KiB
TypeScript
import { test, expect, handleElementDialogs } from "../fixtures/persistent-context";
|
|
import {
|
|
goToRoom,
|
|
sendMessage,
|
|
waitForBotReply,
|
|
assertNoDecryptionErrors,
|
|
startThreadOnLastMessage,
|
|
waitForThreadReplyViaSdk,
|
|
closeThreadPanel,
|
|
} from "../fixtures/matrix-room";
|
|
|
|
test.describe("asistente-2", () => {
|
|
test.beforeEach(async ({ page }) => {
|
|
await page.goto("/");
|
|
await handleElementDialogs(page);
|
|
await goToRoom(page, "Asistente 2");
|
|
// Cerrar thread panel si estaba abierto de sesiones previas.
|
|
// Si queda abierto, sus sender elements contaminan los locators de waitForBotReply.
|
|
await closeThreadPanel(page);
|
|
});
|
|
|
|
test("responde a un saludo", async ({ page }) => {
|
|
await sendMessage(page, "Hola, que tal?");
|
|
|
|
const reply = await waitForBotReply(page, {
|
|
timeout: 60_000,
|
|
sender: "Asistente 2",
|
|
});
|
|
expect(reply).toBeTruthy();
|
|
expect(reply.length).toBeGreaterThan(10);
|
|
});
|
|
|
|
test("!tools muestra herramientas disponibles", async ({ page }) => {
|
|
await sendMessage(page, "!tools");
|
|
|
|
const reply = await waitForBotReply(page, {
|
|
timeout: 10_000,
|
|
sender: "Asistente 2",
|
|
});
|
|
expect(reply).toBeTruthy();
|
|
// asistente-2 tiene al menos current_time
|
|
expect(reply.toLowerCase()).toMatch(/current_time|hora|herramienta|tool/);
|
|
});
|
|
|
|
test("pregunta que activa tool use (que hora es?)", async ({ page }) => {
|
|
await sendMessage(page, "Que hora es ahora mismo?");
|
|
|
|
const reply = await waitForBotReply(page, {
|
|
timeout: 60_000,
|
|
sender: "Asistente 2",
|
|
});
|
|
expect(reply).toBeTruthy();
|
|
// La respuesta debe contener algo relacionado con tiempo/hora
|
|
expect(reply.length).toBeGreaterThan(5);
|
|
});
|
|
|
|
test("!help muestra comandos", async ({ page }) => {
|
|
await sendMessage(page, "!help");
|
|
|
|
const reply = await waitForBotReply(page, {
|
|
timeout: 10_000,
|
|
sender: "Asistente 2",
|
|
});
|
|
expect(reply).toBeTruthy();
|
|
expect(reply.toLowerCase()).toContain("help");
|
|
expect(reply.toLowerCase()).toContain("ping");
|
|
});
|
|
|
|
test("responde dentro del thread cuando se le habla por thread", async ({
|
|
page,
|
|
}) => {
|
|
// Este test necesita mas tiempo: enviar msg + esperar bot + thread + esperar bot en thread
|
|
test.setTimeout(120_000);
|
|
// 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. Enviar mensaje threaded via SDK (headless no soporta la hover action bar)
|
|
await startThreadOnLastMessage(page);
|
|
|
|
// 3. Esperar que el bot responda DENTRO del thread
|
|
// Usar el SDK para verificar que hay una respuesta en el thread
|
|
const threadReply = await waitForThreadReplyViaSdk(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);
|
|
});
|
|
});
|