deer-flow/frontend/tests/e2e/mcp-settings.spec.ts
Wenchao An a246c928e9
feat(frontend): move capability management out of Settings (#5468)
* feat(frontend): move capability management out of settings

* fix(frontend): address capability center review feedback
2026-09-16 18:39:24 +08:00

89 lines
2.6 KiB
TypeScript

import { expect, test } from "@playwright/test";
import { mockLangGraphAPI } from "./utils/mock-api";
test.describe("MCP server settings", () => {
test("edits one server without dropping advanced fields or siblings", async ({
page,
}) => {
mockLangGraphAPI(page);
let servers = {
local: {
enabled: true,
description: "Local tools",
command: "uvx",
args: ["local-tools"],
},
remote: {
enabled: false,
description: "Remote tools",
type: "http",
url: "https://example.test/mcp",
headers: { "X-API-Key": "***" },
routing: { mode: "prefer" },
},
};
let submittedUpdate:
| { server_name: string; server: (typeof servers)["remote"] }
| undefined;
await page.route("**/api/mcp/config", async (route) => {
await route.fulfill({
status: 200,
contentType: "application/json",
body: JSON.stringify({ mcp_servers: servers }),
});
});
await page.route("**/api/mcp/config/server", async (route) => {
if (route.request().method() !== "PUT") {
await route.fallback();
return;
}
submittedUpdate = route
.request()
.postDataJSON() as typeof submittedUpdate;
servers = {
...servers,
[submittedUpdate!.server_name]: submittedUpdate!.server,
};
await route.fulfill({
status: 200,
contentType: "application/json",
body: JSON.stringify({ mcp_servers: servers }),
});
});
await page.goto("/workspace/capabilities");
const settingsDialog = page;
await expect(page).toHaveURL(/workspace\/capabilities$/);
await settingsDialog.getByRole("button", { name: "Edit remote" }).click();
const editor = page.getByRole("dialog", { name: "Edit MCP server" });
const definitionBox = editor.getByRole("textbox");
const definition = JSON.parse(await definitionBox.inputValue()) as {
mcpServers: typeof servers;
};
definition.mcpServers.remote.description = "Updated remote tools";
await definitionBox.fill(JSON.stringify(definition));
await editor.getByRole("button", { name: "Save" }).click();
await expect(editor).toBeHidden();
await expect(
settingsDialog.getByText("Updated remote tools"),
).toBeVisible();
expect(submittedUpdate).toEqual({
server_name: "remote",
server: {
enabled: false,
description: "Updated remote tools",
type: "http",
url: "https://example.test/mcp",
headers: { "X-API-Key": "***" },
routing: { mode: "prefer" },
},
});
});
});