관리자 기본 진입 경로 수정

This commit is contained in:
Yun Chan 2026-07-02 10:52:12 +09:00
parent 778e8526d4
commit bd046c4501
6 changed files with 62 additions and 25 deletions

View file

@ -147,7 +147,18 @@ async function expectResponseOk(response: APIResponse | Response) {
}
}
async function mockApprovedAdminWithoutOnboarding(page: Page) {
async function mockAdminSession(
page: Page,
authUser: Partial<{
user_id: string;
email: string;
display_name: string;
role: "learner" | "teacher" | "admin";
admin_access: boolean;
super_admin: boolean;
onboarding_completed_at: number | null;
}> = {},
) {
const seenAdminEndpoints = new Set<string>();
const json = (body: unknown) => JSON.stringify(body);
@ -165,17 +176,17 @@ async function mockApprovedAdminWithoutOnboarding(page: Page) {
if (method === "GET" && path.endsWith("/auth/me")) {
await fulfillJson({
user_id: "stale-admin",
email: "stale-admin@twentyoz.kr",
display_name: "Stale Admin",
role: "admin",
admin_access: false,
super_admin: false,
user_id: authUser.user_id ?? "stale-admin",
email: authUser.email ?? "stale-admin@twentyoz.kr",
display_name: authUser.display_name ?? "Stale Admin",
role: authUser.role ?? "admin",
admin_access: authUser.admin_access ?? false,
super_admin: authUser.super_admin ?? false,
account_status: "approved",
approval_required: false,
cohort_ids: [],
consent_at: null,
onboarding_completed_at: null,
onboarding_completed_at: authUser.onboarding_completed_at ?? null,
nickname: "",
self_introduction: "",
avatar_url: "",
@ -275,6 +286,10 @@ async function mockApprovedAdminWithoutOnboarding(page: Page) {
return seenAdminEndpoints;
}
async function mockApprovedAdminWithoutOnboarding(page: Page) {
return mockAdminSession(page);
}
async function signInAsAdmin(page: Page) {
let res: APIResponse | null = null;
for (let attempt = 0; attempt < 3; attempt += 1) {
@ -593,6 +608,27 @@ test.describe("admin route guards", () => {
.poll(() => Array.from(seenAdminEndpoints).sort())
.toEqual(["health", "tickets", "uptime", "usage", "users"]);
});
test("routes admin-entitled primary-role users from the root to the admin console", async ({ page }) => {
const seenAdminEndpoints = await mockAdminSession(page, {
user_id: "learner-admin",
email: "learner-admin@twentyoz.kr",
display_name: "Learner Admin",
role: "learner",
admin_access: true,
super_admin: false,
onboarding_completed_at: 1_782_900_000,
});
await page.goto("/");
await expect(page).toHaveURL(/\/admin$/);
await expect(page.getByRole("heading", { name: "현재 서비스 상태" })).toBeVisible();
await expect(page.locator(".vg-nav").getByRole("link", { name: "운영 홈" })).toBeVisible();
await expect
.poll(() => Array.from(seenAdminEndpoints).sort())
.toEqual(["health", "tickets", "uptime", "usage", "users"]);
});
});
test.describe("admin route", () => {