모바일 메뉴와 주요 화면 UX 개선 및 시각 검수

This commit is contained in:
Yun Chan 2026-09-12 17:57:59 +09:00
parent 89b5093ec7
commit e8b770e4d9
50 changed files with 3189 additions and 457 deletions

View file

@ -281,6 +281,31 @@ async function mockAdminAiSession(page: Page, state: AdminAiMockState) {
}
test.describe("full sweep: admin ai operations", () => {
test("제공자 조회 실패를 표시하고 다시 확인할 수 있다", async ({ page }) => {
await mockAdminAiSession(page, createMockState());
let attempts = 0;
let recovered = false;
await page.route("**/api/admin/providers", async (route) => {
attempts += 1;
await route.fulfill({
status: recovered ? 200 : 500,
contentType: "application/json",
body: JSON.stringify(!recovered
? { detail: "제공자 상태 조회 실패" }
: { providers: [], gateway_sync: { synced: false, detail: "연결 설정 대기" } }),
});
});
await page.goto("/admin/ai");
const panel = page.getByTestId("provider-connections-panel");
await expect(panel.locator(".aic-runtime")).toHaveText("연결 상태 확인 실패");
const failedAttempts = attempts;
recovered = true;
await panel.getByRole("button", { name: "다시 확인" }).click();
await expect(panel.locator(".aic-runtime")).toHaveText("적용 대기");
await expect(panel.getByRole("alert")).toHaveCount(0);
expect(attempts).toBeGreaterThan(failedAttempts);
});
// checklist: admin-ai-guard-pending-approval
test("redirects a pending-approval admin from /admin/ai to /pending", async ({ page }) => {
const state = createMockState({