All checks were successful
build-and-push / build (push) Successful in 36s
- playwright.config.ts: 로컬 스택(5380/8380) 대상 headless chromium - e2e/spin.spec.ts: 대시보드·네비·쪽지함·캘린더 일정 생성·프로젝트 생성 모달·검증, 구성원 역할(관리자 메뉴 숨김·관리 라우트 리다이렉트·프로필) - e2e/project-flow.spec.ts: 프로젝트 상세 개요/작업자/메일 탭, 타임라인 작업 추가→상세 모달→칸반 카드 - e2e/member-domains.spec.ts: 근무·휴가 신청 검증, 인센티브 게이지, 대시보드 내 이슈 - ?as=user 로 역할 전환(api.ts 포워딩 활용), afterAll API 정리 - npm run test:e2e 스크립트, test-results/·playwright-report/ gitignore Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
37 lines
1.8 KiB
TypeScript
37 lines
1.8 KiB
TypeScript
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();
|
|
});
|