import { test, expect } from "@playwright/test"; // 일반 구성원 관점의 핵심 도메인: 근무(휴가 신청 검증) + 인센티브 게이지. // ?as=user 로 로드하면 앱 전체가 비관리자(김주임)로 동작. test("근무 페이지 + 휴가 신청 모달 검증", async ({ page }) => { await page.goto("/attendance?as=user"); await expect(page.getByRole("heading", { name: "근무" })).toBeVisible(); await expect(page.getByText("이번 달 출근일")).toBeVisible(); // 휴가/공가 탭 → 휴가 신청 모달 await page.getByRole("button", { name: "휴가/공가" }).click(); await page.getByRole("button", { name: "휴가 신청" }).click(); const submit = page.getByRole("button", { name: "신청", exact: true }); // 시작일 없으면 신청 비활성 await expect(submit).toBeDisabled(); await page.locator('.fixed input[type="date"]').first().fill("2026-09-10"); await expect(submit).toBeEnabled(); // 제출하지 않고 닫기(영속 데이터 오염 방지) await page.getByRole("dialog").getByRole("button", { name: "취소" }).click(); }); test("인센티브 페이지 게이지 렌더", async ({ page }) => { const errs: string[] = []; page.on("pageerror", (e) => errs.push(e.message)); await page.goto("/incentive?as=user"); await expect(page.getByRole("heading", { name: "내 인센티브" })).toBeVisible(); // 게이지/할당량 섹션 렌더(연도 선택 존재) await expect(page.locator("select").first()).toBeVisible(); expect(errs, errs.join("\n")).toHaveLength(0); }); test("대시보드 인센티브 게이지 + 내 이슈 보드", async ({ page }) => { await page.goto("/?as=user"); await expect(page.getByText(/안녕하세요/)).toBeVisible(); await expect(page.getByText("내 이슈")).toBeVisible(); });