import { expect, test } from "@playwright/test"; import { mockWorkbenchContext } from "./support/mock-workbench-context"; test("uses backend project identity, role and map extent with the existing fallback available", async ({ page }) => { await mockWorkbenchContext(page, undefined, { metadata: { project_id: "project-1", name: "北区供水项目", code: "north-supply", gs_workspace: "tjwater_next", map_extent: { bbox: [13358338.895, 3503549.844, 13369470.85, 3516410.23], zoom: 13 }, status: "active", project_role: "member" }, accessContext: { user_id: "user-1", username: "north.operator", system_role: "user", is_system_admin: false, project_id: "project-1", project_role: "member", permissions: ["webgis.view"] } }); await page.goto("/", { waitUntil: "domcontentloaded" }); const userMenu = page.getByRole("button", { name: "打开用户菜单" }); await expect(userMenu).toContainText("north.operator"); await userMenu.click(); await expect(page.getByText("北区供水项目 · 项目成员", { exact: true })).toBeVisible(); await page.keyboard.press("Escape"); await expect.poll(async () => isProjectCenter(await readMapCenter(page))).toBe(true); await page.evaluate(() => window.__waterNetworkMap?.jumpTo({ center: [121.5, 31] })); await page.getByRole("button", { name: "缩放到全局" }).click(); await expect.poll(async () => isProjectCenter(await readMapCenter(page))).toBe(true); }); async function readMapCenter(page: import("@playwright/test").Page) { return page.evaluate(() => { const center = window.__waterNetworkMap?.getCenter(); return center ? { longitude: center.lng, latitude: center.lat } : { longitude: Number.NaN, latitude: Number.NaN }; }); } function isProjectCenter(center: { longitude: number; latitude: number }) { return Math.abs(center.longitude - 120.05) < 0.15 && Math.abs(center.latitude - 30.05) < 0.15; }