import { expect, test } from "@playwright/test"; test("MCP Key menu creates, hides secrets on navigation, and revokes", async ({ page, }) => { await page.goto("/#mcp-keys"); await page.getByLabel("密码", { exact: true }).fill("browser-test-password"); await page.getByRole("button", { name: "进入工作空间" }).click(); await expect( page.getByRole("heading", { name: "MCP Key", exact: true }), ).toBeVisible(); const headers = { "X-WQ-Request": "1" }; await page.request.put("/api/v1/account/credentials", { headers, data: { email: "test@example.com", password: "synthetic-password" }, }); await page.request.post("/api/v1/account/connect", { headers }); await expect .poll( async () => (await (await page.request.get("/api/v1/account")).json()) .connection_status, ) .toBe("connected"); await page.getByRole("button", { name: "刷新列表", exact: true }).click(); await page.getByLabel("Key 名称").fill("Browser test reader"); await page.getByRole("button", { name: "创建 Key", exact: true }).click(); await expect(page.getByLabel("新 Key 明文")).toBeVisible(); const secret = await page.getByLabel("新 Key 明文").inputValue(); expect(secret).toMatch(/^wqmcp_/); const listed = await (await page.request.get("/api/v1/mcp-tokens")).json(); expect(JSON.stringify(listed)).not.toContain(secret); const item = listed.items.find( (row: { name: string }) => row.name === "Browser test reader", ); expect(item.scopes).toEqual(["research:read"]); await page.screenshot({ path: "test-results/mcp-key-page.png", fullPage: true, mask: [page.getByLabel("新 Key 明文")], }); await page .getByRole("navigation", { name: "主导航", exact: true }) .getByRole("button", { name: "数据目录", exact: true }) .click(); await page .getByRole("navigation", { name: "主导航", exact: true }) .getByRole("button", { name: "MCP Key", exact: true }) .click(); await expect(page.getByLabel("新 Key 明文")).toHaveCount(0); const row = page.getByRole("row").filter({ hasText: "Browser test reader" }); await row.getByRole("button", { name: "撤销", exact: true }).click(); await row.getByRole("button", { name: "确认撤销", exact: true }).click(); await expect(row).toContainText("已撤销"); await page.reload(); await expect( page.getByRole("heading", { name: "MCP Key", exact: true }), ).toBeVisible(); await expect(page.getByLabel("新 Key 明文")).toHaveCount(0); });