116 lines
3.6 KiB
TypeScript
116 lines
3.6 KiB
TypeScript
import { expect, test } from "@playwright/test";
|
|
|
|
import {
|
|
THREAD_FOR_WELCOME,
|
|
invalidNewChatUrl,
|
|
newChatEntry,
|
|
openChat,
|
|
reuseThreadChatEntry,
|
|
reuseThreadWelcomeEntry,
|
|
skipIfMissingThread,
|
|
waitForMessageListReady,
|
|
} from "./support/chat-helpers";
|
|
|
|
test.describe("聊天工作台 / 路由与欢迎态", () => {
|
|
test("DF-ROUTE-001 /new 带 thread_id 时展示欢迎态与建议词", async ({
|
|
page,
|
|
}, testInfo) => {
|
|
skipIfMissingThread(
|
|
testInfo,
|
|
THREAD_FOR_WELCOME,
|
|
"FRONTEND_E2E_THREAD_ID",
|
|
);
|
|
await openChat(page, newChatEntry(THREAD_FOR_WELCOME!));
|
|
|
|
const suggestions = page.getByTestId("welcome-suggestions");
|
|
await expect(suggestions).toBeVisible();
|
|
await expect(suggestions.locator("button").first()).toBeVisible();
|
|
await expect(page.locator(".is-user, .is-assistant")).toHaveCount(0);
|
|
});
|
|
|
|
test("DF-ROUTE-002 /new 复用模式保留欢迎态且不直接渲染历史", async ({
|
|
page,
|
|
}, testInfo) => {
|
|
skipIfMissingThread(
|
|
testInfo,
|
|
THREAD_FOR_WELCOME,
|
|
"FRONTEND_E2E_THREAD_ID",
|
|
);
|
|
await openChat(page, reuseThreadWelcomeEntry(THREAD_FOR_WELCOME!));
|
|
|
|
await expect(page).toHaveURL(
|
|
new RegExp(`/workspace/chats/new\\?.*thread_id=${THREAD_FOR_WELCOME!}`),
|
|
);
|
|
await expect(page.getByTestId("welcome-suggestions")).toBeVisible();
|
|
await expect(page.locator(".is-user, .is-assistant")).toHaveCount(0);
|
|
});
|
|
|
|
test("DF-ROUTE-003 /new 缺少 thread_id 时进入欢迎态", async ({
|
|
page,
|
|
}) => {
|
|
await page.goto(invalidNewChatUrl());
|
|
|
|
await expect(page.getByTestId("welcome-suggestions")).toBeVisible();
|
|
await expect(page.locator("textarea[name='message']")).toBeVisible();
|
|
});
|
|
|
|
test("DF-ROUTE-004 线程页直接展示历史消息与标题栏", async ({
|
|
page,
|
|
}, testInfo) => {
|
|
skipIfMissingThread(
|
|
testInfo,
|
|
THREAD_FOR_WELCOME,
|
|
"FRONTEND_E2E_THREAD_ID",
|
|
);
|
|
await openChat(page, reuseThreadChatEntry(THREAD_FOR_WELCOME!));
|
|
await waitForMessageListReady(page);
|
|
|
|
await expect(page).toHaveURL(
|
|
new RegExp(`/workspace/chats/${THREAD_FOR_WELCOME!}`),
|
|
);
|
|
await expect(page.getByRole("log").first()).toBeVisible();
|
|
await expect(page.locator("header button").first()).toBeVisible();
|
|
await expect(page.getByTestId("welcome-suggestions")).toHaveCount(0);
|
|
});
|
|
|
|
test("DF-ROUTE-005 退出确认取消后保持当前线程页面", async ({
|
|
page,
|
|
}, testInfo) => {
|
|
skipIfMissingThread(
|
|
testInfo,
|
|
THREAD_FOR_WELCOME,
|
|
"FRONTEND_E2E_THREAD_ID",
|
|
);
|
|
await openChat(page, reuseThreadChatEntry(THREAD_FOR_WELCOME!));
|
|
await waitForMessageListReady(page);
|
|
|
|
await page.locator("header button").first().click();
|
|
await expect(page.getByText("退出后,当前会话结束并销毁")).toBeVisible();
|
|
await page.getByRole("button", { name: "取消" }).click();
|
|
|
|
await expect(page).toHaveURL(
|
|
new RegExp(`/workspace/chats/${THREAD_FOR_WELCOME!}`),
|
|
);
|
|
});
|
|
|
|
test("DF-ROUTE-006 退出确认确认后返回带 thread_id 的 /new", async ({
|
|
page,
|
|
}, testInfo) => {
|
|
skipIfMissingThread(
|
|
testInfo,
|
|
THREAD_FOR_WELCOME,
|
|
"FRONTEND_E2E_THREAD_ID",
|
|
);
|
|
await openChat(page, reuseThreadChatEntry(THREAD_FOR_WELCOME!));
|
|
await waitForMessageListReady(page);
|
|
|
|
await page.locator("header button").first().click();
|
|
await page.getByRole("button", { name: "确定" }).click();
|
|
|
|
await expect(page).toHaveURL(
|
|
new RegExp(`/workspace/chats/new\\?.*thread_id=${THREAD_FOR_WELCOME!}`),
|
|
);
|
|
await expect(page.getByTestId("welcome-suggestions")).toBeVisible();
|
|
});
|
|
});
|