feat(admin): sync and authorize Keycloak users
This commit is contained in:
@@ -15,3 +15,37 @@ test("已登录管理员可以打开审计日志页面", async ({ page }) => {
|
||||
await expect(page.getByText("系统管理员权限已验证")).toBeVisible();
|
||||
await expect(page.getByRole("heading", { name: "查询结果" })).toBeVisible();
|
||||
});
|
||||
|
||||
test("已认证但未授权的账号会看到明确说明", async ({ page }) => {
|
||||
await page.route("**/api/v1/access-context", (route) =>
|
||||
route.fulfill({
|
||||
status: 403,
|
||||
contentType: "application/json",
|
||||
body: JSON.stringify({ detail: "User authorization pending" }),
|
||||
}),
|
||||
);
|
||||
|
||||
await page.goto("/");
|
||||
|
||||
await expect(page.getByText("账号尚未获得访问权限")).toBeVisible();
|
||||
await expect(
|
||||
page.getByText("身份认证已成功,但当前账号尚未由系统管理员启用"),
|
||||
).toBeVisible();
|
||||
});
|
||||
|
||||
test("系统管理员可以手动同步 Keycloak 用户目录", async ({ page }) => {
|
||||
await page.goto("/system-admin");
|
||||
await page.getByRole("tab", { name: "系统用户" }).click();
|
||||
|
||||
await page.getByRole("button", { name: "同步 Keycloak 用户" }).click();
|
||||
await expect(page.getByRole("button", { name: "正在同步" })).toBeDisabled();
|
||||
|
||||
await expect(
|
||||
page.getByText("已扫描 3 个 Keycloak 身份,新增 1 个,更新 1 个,跳过 1 个。"),
|
||||
).toBeVisible();
|
||||
await expect(page.getByText("跳过项包括服务账号、缺少邮箱或身份冲突")).toBeVisible();
|
||||
|
||||
await page.setViewportSize({ width: 390, height: 844 });
|
||||
await expect(page.getByRole("button", { name: "同步 Keycloak 用户" })).toBeVisible();
|
||||
await expect(page.getByRole("button", { name: "刷新", exact: true })).toBeVisible();
|
||||
});
|
||||
|
||||
@@ -50,10 +50,27 @@ export const mockBackend = async (page: Page) => {
|
||||
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"
|
||||
url.pathname === "/api/v1/admin/projects" ||
|
||||
/^\/api\/v1\/admin\/projects\/[^/]+\/(members|databases)$/.test(
|
||||
url.pathname,
|
||||
)
|
||||
) {
|
||||
return json(route, []);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user