evOo-local/apps/web/e2e/chat-queued-progress.spec.ts
Cursor Agent 9c1137780d
Format chat-queued-progress E2E spec
Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
2026-10-07 08:13:06 +00:00

54 lines
1.8 KiB
TypeScript

import { expect, test } from "@playwright/test";
import { completeOnboarding, routePatchRpc, signup, waitForChatComposer } from "./helpers";
const viewports = [
{ name: "desktop", width: 1440, height: 900 },
{ name: "mobile", width: 390, height: 844 },
];
for (const viewport of viewports) {
test(`queued run shows waiting status (${viewport.name})`, async ({ page }) => {
await page.setViewportSize({ width: viewport.width, height: viewport.height });
const stamp = Date.now();
await signup(page, `queued-${viewport.name}-${stamp}@rakazo.test`, "password12", "Queue");
await completeOnboarding(page);
await waitForChatComposer(page);
const botId = new URL(page.url()).pathname.split("/").filter(Boolean).at(-1)!;
let holdQueued = false;
await routePatchRpc(page, "threads/get", (json) => {
if (!holdQueued) return json;
const run = {
id: "run-queued-e2e",
botId,
threadId: String(json.threadId ?? "thread-e2e"),
taskId: "task-queued-e2e",
status: "queued",
trigger: "user",
routineId: null,
modelProvider: null,
modelId: null,
error: null,
startedAt: null,
completedAt: null,
createdAt: new Date().toISOString(),
};
return { ...json, run, activeRuns: [run] };
});
await page.route("**/rpc/threads/send", async (route) => {
holdQueued = true;
await route.continue();
});
const composer = page.getByRole("combobox", { name: /Message|Nachricht/i });
await composer.fill("Hallo");
await composer.press("Enter");
await expect(
page.getByRole("status").filter({ hasText: /Queued|Wartet|Working|Arbeitet/i }),
).toBeVisible({
timeout: 20_000,
});
await expect(page.getByRole("button", { name: /Stop|Stopp/i })).toBeVisible();
});
}