Files
next-tjwater-frontend/tests/browser/project-presentation-backend.e2e.ts

59 lines
2.1 KiB
TypeScript

import { expect, test } from "@playwright/test";
import { mockWorkbenchContext } from "./support/mock-workbench-context";
import { TEST_PROJECT_ID } from "./support/mock-scada-api";
test("uses backend project identity, role and map extent with the existing fallback available", async ({
page
}) => {
await mockWorkbenchContext(page, undefined, {
metadata: {
project_id: TEST_PROJECT_ID,
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: TEST_PROJECT_ID,
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;
}