// frontend/playwright/approvals.spec.ts — 결재함 E2E // 백엔드는 ARI_ALLOW_TEST_RESET=1 LLM_PROVIDER=heuristic 로 기동 가정. import { expect, test } from "@playwright/test"; import { resetSeed } from "./fixtures/seed-reset"; test.describe.configure({ mode: "serial" }); test.beforeEach(async () => { await resetSeed(); }); test("mixed: low 자동(되돌리기) / high 승인 대기", async ({ page }) => { await page.goto("/approvals"); await expect(page.getByText("아리 결재함").first()).toBeVisible(); await expect(page.locator(".appr-list .ap-row")).toHaveCount(4); // high 3 + 심부름 게이트(phase-14) await expect(page.locator(".appr-done .ad-row")).toHaveCount(3); // low 3 처리됨 await expect(page.getByRole("button", { name: "보내기", exact: true })).toBeVisible(); await expect(page.getByText(/오늘 47분 아껴드렸어요/).first()).toBeVisible(); }); test("되돌리기 → 대기로 이동", async ({ page }) => { await page.goto("/approvals"); await page .locator(".ad-row", { hasText: "치과 예약을 16:00로" }) .getByRole("button") .click(); await expect(page.locator(".ap-row", { hasText: "치과 예약을 16:00로" })).toBeVisible(); }); test("자율성 레벨 변경 → 큐 재구성", async ({ page }) => { await page.goto("/approvals"); await page.getByText("승인 우선").click(); await expect(page.locator(".appr-list .ap-row")).toHaveCount(7); // 전부 대기(+심부름 게이트) await page.getByText("완전 자율").click(); await expect(page.getByText(/결재할 게 없어요/)).toBeVisible(); // 빈 큐 }); test("모두 승인 → 빈 큐", async ({ page }) => { await page.goto("/approvals"); await page.getByRole("button", { name: /모두 승인 \(4건\)/ }).click(); await expect(page.getByText(/결재할 게 없어요/)).toBeVisible(); });