78 lines
4.8 KiB
TypeScript
78 lines
4.8 KiB
TypeScript
import { expect, test } from "@playwright/test";
|
|
import { mockAgentApi } from "./support/mock-agent-api";
|
|
import { mockWorkbenchContext } from "./support/mock-workbench-context";
|
|
|
|
test("failed recommendations retry in the open panel and keep the draft", async ({ page }) => {
|
|
await page.clock.install();
|
|
await page.emulateMedia({ reducedMotion: "reduce" });
|
|
await mockWorkbenchContext(page);
|
|
await mockAgentApi(page);
|
|
let requests = 0;
|
|
await page.route("**/api/v1/suggestions", (route) => {
|
|
requests++;
|
|
return route.fulfill({ headers: { "Access-Control-Allow-Origin": "*" }, status: requests === 1 ? 503 : 200,
|
|
json: requests === 1 ? { message: "temporarily unavailable" } : { suggestions: [{ question: "核查当前管网压力监测数据", activity_id: null }], generated_at: new Date().toISOString() } });
|
|
});
|
|
await page.goto("/", { waitUntil: "domcontentloaded" });
|
|
await page.getByRole("button", { name: /展开 Agent 助手面板/ }).click();
|
|
const panel = page.getByRole("complementary", { name: "Agent 命令面板" });
|
|
await expect(panel.getByText("推荐问题暂不可用,可直接输入任务。", { exact: true })).toBeVisible();
|
|
const prompt = panel.getByRole("textbox", { name: "询问供水问题,或描述需要处理的任务" });
|
|
await prompt.fill("保留尚未发送的问题");
|
|
await page.clock.runFor(31_000);
|
|
await expect(panel.getByRole("button", { name: /^核查当前管网压力监测数据/ })).toBeVisible();
|
|
await expect(prompt).toHaveValue("保留尚未发送的问题");
|
|
expect(requests).toBe(2);
|
|
});
|
|
|
|
test("Agent status copy removes boundary newlines and manual recommendation retry preserves input", async ({ page, context }) => {
|
|
await context.grantPermissions(["clipboard-read", "clipboard-write"]);
|
|
await page.emulateMedia({ reducedMotion: "reduce" });
|
|
await mockWorkbenchContext(page);
|
|
await mockAgentApi(page);
|
|
let requests = 0;
|
|
await page.route("**/api/v1/suggestions", (route) => route.fulfill({ headers: { "Access-Control-Allow-Origin": "*" }, status: ++requests === 1 ? 503 : 200,
|
|
json: requests === 1 ? { message: "temporarily unavailable" } : { suggestions: [{ question: "核查恢复后的供水监测数据", activity_id: null }] } }));
|
|
await page.goto("/", { waitUntil: "domcontentloaded" });
|
|
await page.getByRole("button", { name: /展开 Agent 助手面板/ }).click();
|
|
const panel = page.getByRole("complementary", { name: "Agent 命令面板" });
|
|
const text = "推荐问题暂不可用,可直接输入任务。";
|
|
const status = panel.getByText(text, { exact: true });
|
|
await expect(status).toBeVisible();
|
|
await status.click({ clickCount: 3 });
|
|
await page.keyboard.press("Control+c");
|
|
expect(await page.evaluate(() => navigator.clipboard.readText())).toBe(text);
|
|
const prompt = panel.getByRole("textbox", { name: "询问供水问题,或描述需要处理的任务" });
|
|
const draft = "第一行\n\n第二行\\n\\n";
|
|
await prompt.fill(draft);
|
|
await page.keyboard.press("Control+a");
|
|
await page.keyboard.press("Control+c");
|
|
expect(await page.evaluate(() => navigator.clipboard.readText())).toBe(draft);
|
|
await panel.getByRole("button", { name: "重试推荐", exact: true }).click();
|
|
await expect(panel.getByRole("button", { name: /^核查恢复后的供水监测数据/ })).toBeVisible();
|
|
await expect(prompt).toHaveValue(draft);
|
|
expect(requests).toBe(2);
|
|
});
|
|
|
|
test("service recovery immediately retries failed recommendations before cache expiry", async ({ page }) => {
|
|
await page.emulateMedia({ reducedMotion: "reduce" });
|
|
await mockWorkbenchContext(page);
|
|
await mockAgentApi(page);
|
|
let offline = false;
|
|
let requests = 0;
|
|
await page.route("**/health", (route) => route.fulfill({ headers: { "Access-Control-Allow-Origin": "*" }, status: offline ? 503 : 200, json: { ok: !offline, ready: !offline } }));
|
|
await page.route("**/api/v1/suggestions", (route) => route.fulfill({ headers: { "Access-Control-Allow-Origin": "*" }, status: ++requests === 1 ? 503 : 200,
|
|
json: requests === 1 ? { message: "temporarily unavailable" } : { suggestions: [{ question: "核查服务恢复后的任务状态", activity_id: null }] } }));
|
|
await page.goto("/", { waitUntil: "domcontentloaded" });
|
|
await page.getByRole("button", { name: /展开 Agent 助手面板/ }).click();
|
|
const panel = page.getByRole("complementary", { name: "Agent 命令面板" });
|
|
await expect(panel.getByText("推荐问题暂不可用,可直接输入任务。", { exact: true })).toBeVisible();
|
|
offline = true;
|
|
await page.evaluate(() => window.dispatchEvent(new Event("focus")));
|
|
await expect(panel.getByText("离线", { exact: true })).toBeVisible();
|
|
offline = false;
|
|
await page.evaluate(() => window.dispatchEvent(new Event("online")));
|
|
await expect(panel.getByRole("button", { name: /^核查服务恢复后的任务状态/ })).toBeVisible();
|
|
expect(requests).toBe(2);
|
|
});
|