81 lines
2.1 KiB
TypeScript
81 lines
2.1 KiB
TypeScript
import type { Page, Route } from "@playwright/test";
|
|
|
|
const json = (route: Route, body: unknown) =>
|
|
route.fulfill({
|
|
status: 200,
|
|
contentType: "application/json",
|
|
body: JSON.stringify(body),
|
|
});
|
|
|
|
export const mockBackend = async (page: Page) => {
|
|
if (process.env.E2E_USE_REAL_SERVICES === "true") return;
|
|
|
|
await page.route("**/api/v1/**", async (route) => {
|
|
const url = new URL(route.request().url());
|
|
|
|
if (url.pathname === "/api/v1/access-context") {
|
|
return json(route, {
|
|
user_id: "playwright-user",
|
|
username: "playwright",
|
|
system_role: "system_admin",
|
|
is_system_admin: true,
|
|
project_id: "playwright-project",
|
|
project_role: "project_admin",
|
|
permissions: [
|
|
"webgis.view",
|
|
"simulation.view",
|
|
"simulation.run",
|
|
"scada.clean",
|
|
"risk.run",
|
|
"optimization.run",
|
|
"burst.run",
|
|
"audit.view",
|
|
"environment.manage",
|
|
],
|
|
});
|
|
}
|
|
|
|
if (url.pathname === "/api/v1/projects/current") {
|
|
return json(route, {
|
|
project_id: "playwright-project",
|
|
code: "tjwater_e2e",
|
|
gs_workspace: "tjwater_e2e",
|
|
map_extent: {
|
|
bbox: [13508801.93, 3608163.35, 13555650.64, 3633685.14],
|
|
},
|
|
});
|
|
}
|
|
|
|
if (url.pathname === "/api/v1/audit-logs/count") {
|
|
return json(route, { count: 0 });
|
|
}
|
|
|
|
if (
|
|
url.pathname === "/api/v1/admin/keycloak-user-syncs" &&
|
|
route.request().method() === "POST"
|
|
) {
|
|
await new Promise((resolve) => setTimeout(resolve, 150));
|
|
return json(route, {
|
|
scanned: 3,
|
|
created: 1,
|
|
updated: 1,
|
|
skipped: 1,
|
|
issues: [{ username: "no-email", reason: "missing_email" }],
|
|
});
|
|
}
|
|
|
|
if (
|
|
url.pathname === "/api/v1/audit-logs" ||
|
|
url.pathname === "/api/v1/admin/users" ||
|
|
url.pathname === "/api/v1/admin/projects" ||
|
|
/^\/api\/v1\/admin\/projects\/[^/]+\/(members|databases)$/.test(
|
|
url.pathname,
|
|
)
|
|
) {
|
|
return json(route, []);
|
|
}
|
|
|
|
return json(route, {});
|
|
});
|
|
};
|