Files
sam-hotfix/testcase/TC_ATTENDANCE_MANAGEMENT.md
김보곤 413ea86fc0 test: E2E 전체 테스트 결과 추가 (2026-01-31)
- 57개 시나리오 테스트 완료 (56 PASS, 1 FAIL)
- 성공 리포트: success/
- 실패 리포트: Fail-account-info (마이페이지 미구현)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 21:19:12 +09:00

222 lines
9.4 KiB
Markdown

# TC - 근태관리 (Attendance Management)
> **페이지**: https://dev.codebridge-x.com/hr/attendance-management
> **작성일**: 2026-01-29
> **대상**: QC Playwright AI 테스트용
---
## ⚠️ 테스트 환경 안내
| 항목 | 내용 |
|------|------|
| **환경 유형** | 개발/테스트 환경 (Development Environment) |
| **운영 환경 여부** | ❌ 아니오 - 운영 환경이 **아닙니다** |
| **데이터 특성** | 테스트용 시드 데이터 및 개발 중 생성된 샘플 데이터 |
| **테스트 정책** | CRUD 전체 테스트 가능 (생성, 수정, 삭제 포함) |
### 테스트 실행 지침
1. **CRUD 테스트 허용**: 이 환경은 개발/테스트 목적으로, 데이터 생성·수정·삭제를 포함한 전체 기능 테스트를 수행해야 합니다.
2. **데이터 생성 테스트**: 근태 등록(D-020~D-026), 사유 등록(R-030~R-035) 테스트 시 실제 데이터를 생성하여 기능 검증을 수행합니다.
3. **테스트 데이터 정리**: 테스트 완료 후 생성된 테스트 데이터는 정리하여 환경을 유지합니다.
---
## 0. 사이드바 메뉴 탐색 (공통 전제 조건)
### 0.1 메뉴 펼치기
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| NAV-001 | 전제 | 사이드바 최상단 스크롤 | 사이드바가 최상단으로 스크롤 |
| NAV-002 | 전제 | "모두 펼치기" 버튼 클릭 | 사이드바의 모든 메뉴가 펼쳐짐 |
| NAV-003 | 전제 | 메뉴 펼침 대기 | 2초 대기 후 모든 메뉴 펼침 완료 |
| NAV-004 | 기능 | 1차 메뉴 찾기 | 스크롤 없이 1차 메뉴(인사관리) 클릭 가능 |
| NAV-005 | 기능 | 2차 메뉴 클릭 | 펼쳐진 서브메뉴에서 근태관리 클릭 |
| NAV-006 | 기능 | 페이지 로드 확인 | 404 없이 정상 페이지 로드 |
> **💡 참고**: "모두 펼치기" 버튼으로 전체 메뉴를 펼친 후 메뉴를 탐색하면 1차 메뉴를 누르지 못해 찾지 못하는 문제를 방지할 수 있습니다.
---
## 1. 목록 페이지 (List View)
### 1.1 페이지 로딩
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| L-001 | 기본 | 페이지 접근 | `/hr/attendance-management` 정상 로딩, 테이블 표시 |
| L-002 | 기본 | 대시보드 카드 표시 | "미출근", "정시 출근", "지각", "휴가" 4개 카드 |
| L-003 | 기본 | 빈 목록 | 데이터 없을 때 빈 상태 메시지 표시 |
| L-004 | 기본 | GPS 위치 정보 모킹 | Geolocation API 모킹 성공 |
### 1.2 테이블 컬럼
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| L-010 | 기본 | 컬럼 구성 | 번호, 부서, 직책, 이름, 직급, 기준일, 출근, 퇴근, 휴게, 연장근무, 사유 |
| L-011 | UI | 시간 포맷 | HH:MM 형식 표시 |
| L-012 | UI | 사유 표시 | 출장/휴가/외근/연장근무 텍스트 표시 |
### 1.3 기간 필터 (빠른 선택)
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| L-020 | 기능 | 당해년도 버튼 | 해당 년도 데이터 필터링 |
| L-021 | 기능 | 전전월 버튼 | 전전월 데이터 필터링 |
| L-022 | 기능 | 전월 버튼 | 전월 데이터 필터링 |
| L-023 | 기능 | 당월 버튼 | 당월 데이터 필터링 |
| L-024 | 기능 | 어제 버튼 | 어제 데이터 필터링 |
| L-025 | 기능 | 오늘 버튼 | 오늘 데이터 필터링 |
| L-026 | UI | 활성 버튼 표시 | 선택된 버튼 강조 표시 |
### 1.4 날짜 입력 필터
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| L-030 | 기능 | 시작일 입력 | 날짜 선택 가능 |
| L-031 | 기능 | 종료일 입력 | 날짜 선택 가능 |
| L-032 | 기능 | 날짜 필터 적용 | 선택한 기간 내 데이터만 필터링 |
### 1.5 상태 탭 필터
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| L-040 | 기능 | 전체 탭 | 모든 근태 데이터 표시 |
| L-041 | 기능 | 미출근 탭 | 미출근 상태만 필터링 |
| L-042 | 기능 | 정시 출근 탭 | 정시 출근 상태만 필터링 |
| L-043 | 기능 | 지각 탭 | 지각 상태만 필터링 |
| L-044 | 기능 | 결근 탭 | 결근 상태만 필터링 |
| L-045 | 기능 | 휴가 탭 | 휴가 상태만 필터링 |
| L-046 | 기능 | 출장 탭 | 출장 상태만 필터링 |
| L-047 | 기능 | 외근 탭 | 외근 상태만 필터링 |
| L-048 | 기능 | 연장근무 탭 | 연장근무 상태만 필터링 |
### 1.6 검색
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| L-050 | 기능 | 이름 검색 | 이름 입력 시 해당 직원만 필터링 |
| L-051 | 기능 | 부서 검색 | 부서명 입력 시 해당 부서만 필터링 |
| L-052 | 기능 | 검색어 지우기 | 검색어 삭제 시 전체 목록 복원 |
| L-053 | 경계 | 존재하지 않는 검색어 | 빈 결과 메시지 표시 |
| L-054 | UI | 검색 플레이스홀더 | "이름, 부서 검색..." 표시 |
---
## 2. 근태 등록 모달
### 2.1 모달 열기
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| D-001 | 기능 | 근태 등록 버튼 클릭 | "근태 정보" 모달 열림 |
| D-002 | 기본 | 모달 제목 | "근태 정보" 표시 |
### 2.2 모달 필드
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| D-010 | 기본 | 대상 필드 | 콤보박스, 사원 목록 표시 |
| D-011 | 기본 | 기준일 필드 | 날짜 선택, 기본값 오늘 |
| D-012 | 기본 | 출근 시간 필드 | 시간 선택, 기본값 9:00 |
| D-013 | 기본 | 퇴근 시간 필드 | 시간 선택, 기본값 18:00 |
| D-014 | 기본 | 야간 연장 시간 필드 | 시간 선택, 기본값 0:00 |
| D-015 | 기본 | 주말 연장 시간 필드 | 시간 선택, 기본값 0:00 |
### 2.3 근태 등록 실행
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| D-020 | 기능 | 대상 선택 | 사원 선택 가능 |
| D-021 | 기능 | 출근 시간 변경 | 시간 입력/선택 가능 |
| D-022 | 기능 | 퇴근 시간 변경 | 시간 입력/선택 가능 |
| D-023 | 기능 | 저장 버튼 클릭 | 근태 등록 처리 |
| D-024 | 비즈 | ⚠️ 등록 성공 | 성공 토스트 + 모달 닫힘 |
| D-025 | 비즈 | ⚠️ 데이터 반영 | 목록에서 등록된 근태 확인 |
| D-026 | API | POST /api/v1/attendances | 근태 등록 API 호출 |
### 2.4 취소/닫기
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| D-030 | 기능 | 취소 버튼 클릭 | 모달 닫힘, 데이터 미저장 |
| D-031 | 기능 | ESC 키 | 모달 닫힘 |
---
## 3. 사유 등록 모달
### 3.1 모달 열기
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| R-001 | 기능 | 사유 등록 버튼 클릭 | "사유 정보" 모달 열림 |
| R-002 | 기본 | 모달 제목 | "사유 정보" 표시 |
### 3.2 모달 필드
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| R-010 | 기본 | 대상 필드 | 콤보박스, 사원 목록 표시 |
| R-011 | 기본 | 기준일 필드 | 날짜 선택 |
| R-012 | 기본 | 유형 필드 | 드롭다운, 사유 유형 목록 |
### 3.3 사유 유형 옵션
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| R-020 | 기능 | 유형 드롭다운 열기 | 옵션 목록 표시 |
| R-021 | 기능 | 출장신청서 선택 | 출장신청서 선택 가능 |
| R-022 | 기능 | 휴가신청서 선택 | 휴가신청서 선택 가능 |
| R-023 | 기능 | 외근신청서 선택 | 외근신청서 선택 가능 |
| R-024 | 기능 | 연장근무신청서 선택 | 연장근무신청서 선택 가능 |
### 3.4 사유 등록 실행
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| R-030 | 기능 | 대상 선택 | 사원 선택 가능 |
| R-031 | 기능 | 유형 선택 | 사유 유형 선택 가능 |
| R-032 | 기능 | 등록 버튼 클릭 | 사유 등록 처리 |
| R-033 | 비즈 | ⚠️ 등록 성공 | 성공 토스트 + 모달 닫힘 |
| R-034 | 비즈 | ⚠️ 데이터 반영 | 목록 사유 컬럼에 등록된 사유 표시 |
| R-035 | API | POST /api/v1/attendance-reasons | 사유 등록 API 호출 |
---
## 4. 엑셀 다운로드
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| E-001 | 기능 | 엑셀 다운로드 버튼 존재 | 버튼 표시 확인 |
| E-002 | 기능 | 다운로드 실행 | Network API 호출 + 실제 파일 다운로드 |
| E-003 | API | GET /api/v1/attendances/export | 엑셀 다운로드 API 호출 |
---
## 5. API 응답 검증
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| A-001 | API | GET /api/v1/attendances 응답 | 페이지네이션 포함 목록 반환 |
| A-002 | API | POST /api/v1/attendances 응답 | 근태 등록 성공 응답 |
| A-003 | API | POST /api/v1/attendance-reasons 응답 | 사유 등록 성공 응답 |
| A-004 | API | GET /api/v1/attendances/export 응답 | 엑셀 파일 다운로드 |
---
## TC 요약
| 카테고리 | 건수 |
|----------|------|
| 목록 페이지 | 38건 |
| 근태 등록 모달 | 18건 |
| 사유 등록 모달 | 18건 |
| 엑셀 다운로드 | 3건 |
| API 응답 검증 | 4건 |
| **합계** | **81건** |