feat(workbench): integrate runtime data and map tooling
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user