feat: add MCP research access and browser key management
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
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);
|
||||
});
|
||||
Reference in New Issue
Block a user