# E2E 테스트 리포트: 근태 사유 등록

**테스트 ID**: attendance-reason
**실행 시간**: 2026-01-20 17:37:00 (KST)
**소요 시간**: 2분
**테스트 결과**: ✅ PASS

---

## 📊 테스트 요약

| 항목 | 결과 |
|------|------|
| 전체 스텝 수 | 6개 |
| 주요 검증 완료 | 6개 |
| 성공 | 6개 |
| 스킵 | 0개 |
| 성공률 | 100% |

---

## 📋 스텝별 상세 결과

| 스텝 | 테스트 항목 | 상태 | 비고 |
|------|------------|------|------|
| 1 | 근태관리 메뉴 진입 | ✅ | /ko/hr/attendance-management |
| 2 | 사유 등록 모달 열기 | ✅ | 모달 표시: "사유 정보" |
| 3 | 대상 직원 선택 | ✅ | 홍킬동 선택 |
| 4 | 사유 유형 선택 | ✅ | 출장신청서 선택 |
| 5 | 등록 버튼 클릭 | ✅ | 문서 작성 페이지로 이동 |
| 6 | 등록 결과 확인 | ✅ | 출장신청 폼 표시 |

---

## 📈 CRUD 검증 결과

### 사유 등록 모달

| 항목 | 예상 | 실제 | 결과 |
|------|------|------|------|
| 모달 제목 | 사유 정보 | 사유 정보 | ✅ |
| 대상 필드 | 존재 | combobox 존재 | ✅ |
| 기준일 필드 | 존재 | 2026-01-20 (기본값) | ✅ |
| 유형 필드 | 존재 | combobox 존재 | ✅ |
| 취소 버튼 | 존재 | 존재 | ✅ |
| 등록 버튼 | 존재 | 존재 | ✅ |

### 대상 직원 드롭다운

| 옵션 | 표시 |
|------|------|
| 검수테스트사원 | ✅ |
| E2E테스트사원_20260120 | ✅ |
| 테스트사원_20260117034400 | ✅ |
| 홍길동 | ✅ |
| test02 | ✅ |
| test01 | ✅ |
| 홍킬동 | ✅ |

### 사유 유형 드롭다운

| 옵션 | 표시 |
|------|------|
| 출장신청서 | ✅ |
| 휴가신청서 | ✅ |
| 외근신청서 | ✅ |
| 연장근무신청서 | ✅ |

### 등록 후 리다이렉트

| 항목 | 예상 | 실제 | 결과 |
|------|------|------|------|
| 등록 후 URL | 문서 작성 페이지 | /hr/documents/new?type=businessTripRequest | ✅ |
| 페이지 제목 | 출장신청 | 출장신청 | ✅ |
| 폼 필드 | 존재 | 제목, 시작일, 종료일, 출장지, 목적, 상세 내용 | ✅ |
| 404 에러 | 없음 | 없음 | ✅ |

---

## 📊 UI 요소 검증 결과

| UI 요소 | 검증 수준 | 결과 |
|---------|----------|------|
| 사유 등록 버튼 | Level 3 | ✅ 클릭 → 모달 열림 |
| 대상 combobox | Level 3 | ✅ 클릭 → 7명 옵션 표시 |
| 기준일 필드 | Level 2 | ✅ 기본값 오늘 날짜 |
| 유형 combobox | Level 3 | ✅ 클릭 → 4개 옵션 표시 |
| 등록 버튼 | Level 4 | ✅ 클릭 → 문서 작성 페이지 이동 |
| 출장신청 폼 | Level 2 | ✅ 필드 표시 |

---

## 📊 사유 등록 플로우

```
근태관리 페이지
    ↓
사유 등록 버튼 클릭
    ↓
사유 정보 모달 열림
  - 대상: 직원 선택
  - 기준일: 날짜 선택 (기본값: 오늘)
  - 유형: 사유 유형 선택
    ↓
등록 버튼 클릭
    ↓
문서 작성 페이지로 리다이렉트
  - 출장신청서 → /hr/documents/new?type=businessTripRequest
  - 휴가신청서 → /hr/documents/new?type=vacationRequest
  - 외근신청서 → /hr/documents/new?type=fieldWorkRequest
  - 연장근무신청서 → /hr/documents/new?type=overtimeRequest
    ↓
문서 작성 및 제출
    ↓
결재 승인 후 근태 기록 반영
```

---

## 📊 출장신청 폼 필드

| 필드 | 타입 | 필수 |
|------|------|------|
| 제목 | text | * |
| 시작일 | date | * |
| 종료일 | date | * |
| 출장지 | text | * |
| 목적 | text | * |
| 상세 내용 | textarea | - |

---

## 📸 스크린샷

- 근태관리 페이지: `screenshots/77_attendance_reason_page-*.png`
- 사유 등록 모달: `screenshots/78_attendance_reason_modal-*.png`
- 폼 입력 완료: `screenshots/79_attendance_reason_filled-*.png`
- 문서 작성 페이지: `screenshots/80_attendance_reason_redirect-*.png`
- 근태관리 복귀: `screenshots/81_attendance_reason_final-*.png`

---

## 📝 테스트 결론

### ✅ 정상 동작 확인된 기능
- 근태관리 페이지 로딩
- 사유 등록 버튼 클릭 → 모달 열림
- 대상 직원 드롭다운 (7명 표시)
- 사유 유형 드롭다운 (4개 타입)
- 기준일 기본값 (오늘 날짜)
- 등록 버튼 클릭 → 문서 작성 페이지 리다이렉트
- 출장신청 폼 페이지 정상 표시
- URL 안정성 (404 에러 없음)

### 📌 참고사항
- 사유 등록은 직접 근태 기록에 추가되지 않음
- 사유 등록 → 문서 작성 → 결재 승인 후 반영되는 플로우
- 사유 유형별 문서 작성 페이지 URL:
  - 출장신청서: /hr/documents/new?type=businessTripRequest
  - 휴가신청서: /hr/documents/new?type=vacationRequest
  - 외근신청서: /hr/documents/new?type=fieldWorkRequest
  - 연장근무신청서: /hr/documents/new?type=overtimeRequest

### 📊 근태관리 탭 현황
| 탭 | 건수 |
|-----|------|
| 전체 | 7 |
| 미출근 | 5 |
| 정시 출근 | 1 |
| 지각 | 1 |
| 결근 | 0 |
| 휴가 | 0 |
| 출장 | 0 |
| 외근 | 0 |
| 연장근무 | 0 |

---

**테스트 실행자**: Claude Code (QA Reporter)
**리포트 생성 시간**: 2026-01-20 17:37:00 (KST)
