E2E 테스트 리포트: 매출관리 테스트
테스트 ID: sales-management
실행 시간: 2026-01-21 22:40:00 (KST)
소요 시간: 5분
테스트 결과: ⚠️ PASS (경고 포함)
📊 테스트 요약
| 항목 |
결과 |
| 전체 스텝 수 |
12개 |
| 성공 |
11개 |
| 실패 |
0개 |
| 경고 |
1개 |
| 성공률 |
100% |
📋 스텝별 상세 결과
| 스텝 |
테스트 항목 |
상태 |
비고 |
| 1 |
매출관리 페이지 진입 |
✅ |
/accounting/sales |
| 2 |
페이지 구조 확인 |
✅ |
통계 카드 4개, 카드형+테이블 레이아웃 |
| 3 |
통계 카드 확인 |
✅ |
총 매출, 당월 매출, 세금계산서/거래명세서 발행대기 |
| 4 |
계정과목명 드롭다운 확인 |
✅ |
8개 옵션 |
| 5 |
테이블 데이터 확인 |
✅ |
83건 데이터, 페이지네이션 정상 |
| 6 |
상세 페이지 이동 |
✅ |
행 클릭 → 상세 페이지 |
| 7 |
상세 페이지 구조 확인 |
✅ |
기본정보, 품목정보, 세금계산서/거래명세서 |
| 8 |
수정 모드 전환 |
✅ |
취소/저장 버튼 표시 |
| 9 |
매출 등록 페이지 진입 |
✅ |
등록 폼 표시 |
| 10 |
품목 정보 입력 |
✅ |
수량, 단가 입력 |
| 11 |
자동 계산 검증 |
✅ |
공급가액 = 수량 × 단가, 부가세 = 10% |
| 12 |
품목 추가 기능 |
✅ |
추가 버튼 클릭 시 행 추가 |
📈 동작 검증 결과
| UI 요소 |
검증 수준 |
동작 |
결과 |
비고 |
| 통계 카드 |
Level 2 |
데이터 표시 |
✅ |
4개 카드 |
| 날짜 필터 버튼 |
Level 2 |
표시 확인 |
✅ |
6개 버튼 |
| 계정과목명 드롭다운 |
Level 3 |
클릭 → 옵션 표시 |
✅ |
8개 옵션 |
| 거래처 드롭다운 |
Level 3 |
클릭 → 옵션 표시 |
✅ |
5개 거래처 |
| 테이블 행 클릭 |
Level 3 |
상세 페이지 이동 |
✅ |
|
| 수정 버튼 |
Level 3 |
편집 모드 전환 |
✅ |
|
| 취소 버튼 |
Level 3 |
보기 모드 복원 |
✅ |
|
| 목록 버튼 |
Level 3 |
목록 페이지 이동 |
✅ |
|
| 매출 등록 버튼 |
Level 3 |
등록 페이지 이동 |
✅ |
|
| 자동 계산 |
Level 4 |
수량×단가=공급가액, 10%=부가세 |
✅ |
|
| 품목 추가 버튼 |
Level 3 |
행 추가 |
✅ |
|
✅ 정상 동작 확인된 기능
- 매출관리 목록 페이지 정상 로드
- 통계 카드 4개 표시 (총 매출 1,724,640,802원, 당월 매출 1,430,000원)
- 계정과목명 드롭다운 8개 옵션
- 거래처 필터 드롭다운
- 카드형 + 테이블 형식 데이터 표시
- 테이블 데이터 83건, 페이지네이션 정상
- 행 클릭 → 상세 페이지 이동
- 상세 페이지 구조 (기본정보, 품목정보, 세금계산서, 거래명세서)
- 수정 모드 전환 (취소/저장 버튼)
- 매출 등록 페이지 접근
- 자동 계산 로직 (공급가액 = 수량 × 단가, 부가세 = 공급가액 × 10%)
- 품목 동적 추가 기능
📝 페이지 구조
통계 카드
| 카드 |
표시 값 |
| 총 매출 |
1,724,640,802원 |
| 당월 매출 |
1,430,000원 |
| 세금계산서 발행대기 |
83건 |
| 거래명세서 발행대기 |
83건 |
계정과목명 드롭다운 (8개)
| # |
옵션 |
| 1 |
미설정 |
| 2 |
제품 매출 |
| 3 |
상품 매출 |
| 4 |
부품 매출 |
| 5 |
용역 매출 |
| 6 |
공사 매출 |
| 7 |
임대수익 |
| 8 |
기타매출 |
거래처 드롭다운 (5개)
| # |
거래처명 |
| 1 |
거래처테스트 |
| 2 |
아크더레드 |
| 3 |
코브라브릿지 |
| 4 |
가우스전자 |
| 5 |
아크아크 |
테이블 컬럼 (목록)
| 컬럼 |
| 번호 |
| 매출번호 |
| 매출일 |
| 거래처 |
| 공급가액 |
| 부가세 |
| 합계금액 |
| 매출유형 |
| 세금계산서 발행완료 |
| 거래명세서 발행완료 |
📝 상세 페이지 구조
기본 정보 섹션
| 필드 |
타입 |
| 매출번호 |
텍스트 (자동생성) |
| 매출일 |
날짜 |
| 거래처명 |
드롭다운 |
| 매출 유형 |
드롭다운 |
품목 정보 섹션
| 컬럼 |
| # |
| 품목명 |
| 수량 |
| 단가 |
| 공급가액 (자동계산) |
| 부가세 (자동계산) |
| 적요 |
자동계산 로직
| 필드 |
계산식 |
| 공급가액 |
수량 × 단가 |
| 부가세 |
공급가액 × 10% |
| 합계 |
공급가액 + 부가세 |
세금계산서 섹션
| 항목 |
상태 |
| 세금계산서 발행 |
Switch (미발행/발행) |
거래명세서 섹션
| 항목 |
상태 |
| 거래명세서 발행 |
Switch (미발행/발행) |
| 거래명세서 조회 |
버튼 |
| 거래명세서 발행하기 |
버튼 |
버튼 (보기 모드)
버튼 (수정 모드)
⚠️ 경고 사항
1. Submit 에러 발견 (Console)
위치: 등록/수정 폼 제출 시
내용: TypeError: e.preventDefault is not a function
심각도: Medium
권장 조치:
- onSubmit 핸들러의 이벤트 객체(e) 타입 확인 필요
- react-hook-form 사용 시 handleSubmit 래퍼 확인
영향 범위: react
변경 승인 정책: ⚠️ 컨펌 필요
2. 접근성 경고
위치: DialogContent 컴포넌트
내용: Warning: Missing 'Description' or 'aria-describedby={undefined}' for {DialogContent}
심각도: Low
권장 조치: Radix UI DialogContent에 aria-describedby 속성 추가 권장
📊 데이터 요약
| 항목 |
값 |
| 전체 매출 건수 |
83건 |
| 페이지당 표시 |
20건 |
| 총 페이지 수 |
5 |
| 합계 공급가액 |
1,567,855,268원 |
| 합계 부가세 |
156,785,534원 |
| 합계 금액 |
1,724,640,802원 |
📸 스크린샷
- sales_management_page-2026-01-21T13-31-06-408Z.png (목록 페이지)
- sales_account_dropdown-2026-01-21T13-31-23-835Z.png (계정과목명 드롭다운)
- sales_detail_page-2026-01-21T13-31-42-475Z.png (상세 페이지)
- sales_edit_mode-2026-01-21T13-31-59-157Z.png (수정 모드)
- sales_register_page-2026-01-21T13-32-23-250Z.png (등록 페이지)
- sales_after_input-2026-01-21T13-34-59-695Z.png (자동 계산 검증)
- sales_item_added-2026-01-21T13-35-14-459Z.png (품목 추가)
🔍 콘솔 로그 분석
| 유형 |
메시지 |
심각도 |
조치 필요 여부 |
| ERROR |
Submit error: TypeError: e.preventDefault is not a function |
Medium |
버그 수정 필요 |
| WARNING |
Missing aria-describedby for DialogContent |
Low |
접근성 개선 권장 |
| LOG |
useFCM Not in native environment |
Info |
- |
💡 권장 사항
-
버그 수정 필요 (Medium):
- onSubmit 핸들러의 이벤트 객체 처리 수정
- employee-register와 동일한 버그 패턴 확인됨
-
개선 권장 (Low):
- DialogContent에 aria-describedby 속성 추가 (접근성)
테스트 실행자: Claude Code (QA Reporter)
리포트 생성 시간: 2026-01-21 22:40:00 (KST)