diff --git a/testcase/TC_VENDOR_MANAGEMENT.md b/testcase/TC_VENDOR_MANAGEMENT.md new file mode 100644 index 0000000..08ea973 --- /dev/null +++ b/testcase/TC_VENDOR_MANAGEMENT.md @@ -0,0 +1,326 @@ +# TC - 거래처관리 (Vendor Management) + +> **페이지**: https://dev.sam.kr/accounting/vendors +> **작성일**: 2026-01-29 +> **대상**: QC Playwright AI 테스트용 + +--- + +## 1. 목록 페이지 (List View) + +### 1.1 페이지 로딩 + +| TC# | 구분 | 테스트 항목 | 기대 결과 | +|-----|------|------------|-----------| +| L-001 | 기본 | 페이지 접근 | `/accounting/vendors` 정상 로딩, 테이블 표시 | +| L-002 | 기본 | 통계 카드 표시 | 상단에 "전체 거래처", "매출 거래처", "매입 거래처" 3개 카드 표시 | +| L-003 | 기본 | 통계 숫자 일치 | 카드 숫자 합 = 테이블 전체 건수 (매출+매입+매입매출) | +| L-004 | 기본 | 기본 정렬 | 최신순(등록일 내림차순) 정렬 | +| L-005 | 기본 | 빈 목록 | 데이터 없을 때 빈 상태 메시지 표시 | + +### 1.2 테이블 컬럼 + +| TC# | 구분 | 테스트 항목 | 기대 결과 | +|-----|------|------------|-----------| +| L-010 | 기본 | 컬럼 구성 | 체크박스, 번호, 구분, 거래처명, 매입결제일, 매출결제일, 신용등급, 거래등급, 미수금, 악성채권, 작업 | +| L-011 | UI | 구분 뱃지 색상 | 매출=초록, 매입=주황, 매입매출=파랑 | +| L-012 | UI | 신용등급 뱃지 색상 | AAA/AA/A=초록, BBB/BB/B=노랑, CCC/CC/C/D=빨강 | +| L-013 | UI | 거래등급 뱃지 색상 | A(우수)=초록, B(양호)=파랑, C(보통)=노랑, D(주의)=주황, E(위험)=빨강 | +| L-014 | UI | 미수금 표시 | 금액 > 0이면 빨간색, 0이면 일반 또는 "-" | +| L-015 | UI | 악성채권 표시 | 악성채권=빨간 뱃지, 정상=초록 뱃지, 없으면 "-" | + +### 1.3 검색 + +| TC# | 구분 | 테스트 항목 | 기대 결과 | +|-----|------|------------|-----------| +| L-020 | 기능 | 거래처명 검색 | 이름 일부 입력 시 해당 거래처만 필터링 | +| L-021 | 기능 | 거래처코드 검색 | 코드 입력 시 해당 거래처만 필터링 | +| L-022 | 기능 | 사업자번호 검색 | 사업자번호 입력 시 해당 거래처만 필터링 | +| L-023 | 기능 | 검색어 지우기 | 검색어 삭제 시 전체 목록 복원 | +| L-024 | 경계 | 빈 검색어 | 전체 목록 표시 | +| L-025 | 경계 | 존재하지 않는 검색어 | 빈 결과 + "검색 결과 없음" 메시지 | +| L-026 | 경계 | 특수문자 검색 | 에러 없이 처리 (결과 0건 또는 매칭) | +| L-027 | 경계 | 공백만 입력 | 전체 목록 또는 빈 결과 (에러 없이) | + +### 1.4 필터 + +| TC# | 구분 | 테스트 항목 | 기대 결과 | +|-----|------|------------|-----------| +| L-030 | 기능 | 구분 필터 - 매출 | 매출 거래처만 표시 | +| L-031 | 기능 | 구분 필터 - 매입 | 매입 거래처만 표시 | +| L-032 | 기능 | 구분 필터 - 매입매출 | 매입매출 거래처만 표시 | +| L-033 | 기능 | 신용등급 필터 | 선택한 등급만 표시 (AAA~D 각각) | +| L-034 | 기능 | 거래등급 필터 | 선택한 등급만 표시 (A~E 각각) | +| L-035 | 기능 | 악성채권 필터 - 악성채권 | 악성채권 거래처만 표시 | +| L-036 | 기능 | 악성채권 필터 - 정상 | 정상 거래처만 표시 | +| L-037 | 기능 | 필터 복합 적용 | 구분 + 신용등급 동시 적용 시 AND 조건 | +| L-038 | 기능 | 필터 해제 | 필터 해제 시 전체 목록 복원 | +| L-039 | 경계 | 필터 결과 0건 | 빈 상태 메시지 표시, 에러 없음 | + +### 1.5 정렬 + +| TC# | 구분 | 테스트 항목 | 기대 결과 | +|-----|------|------------|-----------| +| L-040 | 기능 | 최신순 | 등록일 내림차순 | +| L-041 | 기능 | 등록순 | 등록일 오름차순 | +| L-042 | 기능 | 이름 오름차순 | 가나다/ABC 순 | +| L-043 | 기능 | 이름 내림차순 | 역순 | +| L-044 | 기능 | 미수금 높은순 | 미수금 내림차순 | +| L-045 | 기능 | 미수금 낮은순 | 미수금 오름차순 | + +### 1.6 페이지네이션 + +| TC# | 구분 | 테스트 항목 | 기대 결과 | +|-----|------|------------|-----------| +| L-050 | 기능 | 기본 페이지 크기 | 한 페이지 20건 표시 | +| L-051 | 기능 | 다음 페이지 이동 | 2페이지 클릭 시 다음 20건 표시 | +| L-052 | 기능 | 이전 페이지 이동 | 이전 페이지로 복귀 | +| L-053 | 경계 | 마지막 페이지 | "다음" 버튼 비활성화 또는 숨김 | +| L-054 | 경계 | 첫 페이지 | "이전" 버튼 비활성화 또는 숨김 | +| L-055 | 기능 | 필터 + 페이지네이션 | 필터 적용 후 페이지네이션 정상 동작 | + +### 1.7 행 선택 및 동작 + +| TC# | 구분 | 테스트 항목 | 기대 결과 | +|-----|------|------------|-----------| +| L-060 | 기능 | 행 클릭 | 상세 페이지(view 모드)로 이동 | +| L-061 | 기능 | 체크박스 개별 선택 | 해당 행 선택 상태 | +| L-062 | 기능 | 전체 선택 체크박스 | 현재 페이지 전체 선택/해제 | +| L-063 | 기능 | 호버 시 작업 버튼 | 행 호버 시 수정/삭제 버튼 표시 | +| L-064 | 기능 | 수정 버튼 클릭 | 상세 페이지(edit 모드)로 이동 | +| L-065 | 기능 | 삭제 버튼 클릭 | 삭제 확인 다이얼로그 표시 | +| L-066 | 기능 | 삭제 확인 | 확인 시 거래처 삭제, 목록 갱신 | +| L-067 | 기능 | 삭제 취소 | 취소 시 아무 변경 없음 | +| L-068 | 비즈 | 주문 있는 거래처 삭제 | 삭제 불가 에러 메시지 표시 | + +### 1.8 신규 등록 버튼 + +| TC# | 구분 | 테스트 항목 | 기대 결과 | +|-----|------|------------|-----------| +| L-070 | 기능 | 신규 등록 버튼 | 클릭 시 상세 페이지(new 모드)로 이동 | + +--- + +## 2. 상세/등록 페이지 (Detail View) + +### 2.1 신규 등록 (mode=new) + +| TC# | 구분 | 테스트 항목 | 기대 결과 | +|-----|------|------------|-----------| +| D-001 | 기본 | 페이지 로딩 | 빈 폼 표시, 저장/취소 버튼 | +| D-002 | 기본 | 기본값 확인 | 매입결제일=10, 매출결제일=15, 신용등급=A, 거래등급=C, 구분=매입매출 | +| D-003 | 기본 | 거래처코드 자동 생성 | 코드 필드 읽기전용, 저장 시 8자리 영숫자 자동 생성 | +| D-004 | 기본 | 삭제 버튼 없음 | 신규 모드에서 삭제 버튼 미표시 | + +#### 2.1.1 필수값 검증 + +| TC# | 구분 | 테스트 항목 | 기대 결과 | +|-----|------|------------|-----------| +| D-010 | 검증 | 거래처명 미입력 | 저장 시 필수값 에러 메시지 | +| D-011 | 검증 | 거래처명만 입력 후 저장 | 최소 필수값으로 정상 저장 | + +#### 2.1.2 기본 정보 입력 + +| TC# | 구분 | 테스트 항목 | 기대 결과 | +|-----|------|------------|-----------| +| D-020 | 기능 | 거래처명 입력 | 최대 100자, 정상 입력 | +| D-021 | 기능 | 구분 선택 | 매출/매입/매입매출 드롭다운 선택 | +| D-022 | 기능 | 사업자등록번호 입력 | 포맷 검증 (xxx-xx-xxxxx) | +| D-023 | 기능 | 대표자명 입력 | 최대 100자 | +| D-024 | 경계 | 거래처명 100자 초과 | 입력 제한 또는 에러 메시지 | + +#### 2.1.3 연락처 정보 + +| TC# | 구분 | 테스트 항목 | 기대 결과 | +|-----|------|------------|-----------| +| D-030 | 기능 | 우편번호 검색 | 우편번호 검색 팝업/모달 정상 동작 | +| D-031 | 기능 | 주소 자동 입력 | 우편번호 선택 시 기본주소 자동 채움 | +| D-032 | 기능 | 상세주소 입력 | 수동 입력 가능 | +| D-033 | 기능 | 전화번호 입력 | PhoneInput 포맷팅 (자동 하이픈) | +| D-034 | 기능 | 모바일 입력 | 포맷팅 적용 | +| D-035 | 기능 | 팩스 입력 | 포맷팅 적용 | +| D-036 | 기능 | 이메일 입력 | 유효한 이메일 형식 검증 | +| D-037 | 경계 | 잘못된 이메일 형식 | 에러 메시지 표시 | +| D-038 | 경계 | 전화번호 숫자 외 문자 | 자동 제거 또는 에러 | + +#### 2.1.4 담당자 정보 + +| TC# | 구분 | 테스트 항목 | 기대 결과 | +|-----|------|------------|-----------| +| D-040 | 기능 | 담당자명 입력 | 최대 50자 | +| D-041 | 기능 | 담당자 전화 입력 | 최대 20자 | +| D-042 | 기능 | 시스템 관리자 입력 | 최대 50자 | + +#### 2.1.5 회사 정보 + +| TC# | 구분 | 테스트 항목 | 기대 결과 | +|-----|------|------------|-----------| +| D-050 | 기능 | 업태 입력 | 최대 50자 | +| D-051 | 기능 | 업종 입력 | 최대 100자 | +| D-052 | UI | 로고 업로드 영역 | 이미지 업로드 UI 표시 (구현 여부 확인) | + +#### 2.1.6 결제 정보 + +| TC# | 구분 | 테스트 항목 | 기대 결과 | +|-----|------|------------|-----------| +| D-060 | 기능 | 매입 결제일 선택 | 1~31일 드롭다운 선택 | +| D-061 | 기능 | 매출 결제일 선택 | 1~31일 드롭다운 선택 | +| D-062 | 기본 | 기본값 확인 | 매입=10일, 매출=15일 | + +#### 2.1.7 신용/거래 정보 + +| TC# | 구분 | 테스트 항목 | 기대 결과 | +|-----|------|------------|-----------| +| D-070 | 기능 | 신용등급 선택 | AAA~D 드롭다운 | +| D-071 | 기능 | 거래등급 선택 | A(우수)~E(위험) 드롭다운 | +| D-072 | 기능 | 세금계산서 이메일 입력 | 이메일 형식 검증 | +| D-073 | 기능 | 입금계좌 은행 선택 | 21개 은행 드롭다운 | +| D-074 | 기능 | 계좌번호 입력 | AccountNumberInput 포맷팅 | +| D-075 | 기능 | 예금주 입력 | 텍스트 입력 | + +#### 2.1.8 저장 동작 + +| TC# | 구분 | 테스트 항목 | 기대 결과 | +|-----|------|------------|-----------| +| D-080 | 기능 | 정상 저장 | 성공 메시지 + 상세(view) 페이지로 이동 | +| D-081 | 기능 | 저장 후 거래처코드 | 8자리 영숫자 코드 자동 생성 확인 | +| D-082 | 기능 | 취소 버튼 | 목록 페이지로 복귀, 데이터 미저장 | +| D-083 | 경계 | 네트워크 오류 시 저장 | 에러 메시지 표시, 데이터 유지 | +| D-084 | 기능 | 전체 필드 입력 저장 | 모든 필드 정상 저장 및 조회 | + +--- + +### 2.2 조회 모드 (mode=view) + +| TC# | 구분 | 테스트 항목 | 기대 결과 | +|-----|------|------------|-----------| +| D-100 | 기본 | 페이지 로딩 | 저장된 데이터 표시, 모든 필드 읽기전용 | +| D-101 | 기본 | 거래처코드 표시 | 자동 생성된 코드 표시 | +| D-102 | UI | 수정/삭제/목록 버튼 | 상단에 표시 | +| D-103 | 기능 | 수정 버튼 클릭 | edit 모드로 전환 | +| D-104 | 기능 | 목록 버튼/뒤로가기 | 목록 페이지로 복귀 | + +#### 2.2.1 미수금/악성채권 정보 (읽기전용) + +| TC# | 구분 | 테스트 항목 | 기대 결과 | +|-----|------|------------|-----------| +| D-110 | 기능 | 미수금 표시 | 매출합계 - 입금합계 계산값 표시 | +| D-111 | 기능 | 악성채권 상태 표시 | 뱃지 또는 텍스트로 상태 표시 | +| D-112 | 기능 | 연체 상태 표시 | 토글 또는 텍스트 표시 | + +#### 2.2.2 메모 시스템 + +| TC# | 구분 | 테스트 항목 | 기대 결과 | +|-----|------|------------|-----------| +| D-120 | 기능 | 메모 목록 표시 | 등록된 메모 시간순 표시 | +| D-121 | 기능 | 메모 추가 | 텍스트 입력 + 추가 버튼 → 목록에 반영 | +| D-122 | 기능 | 메모 형식 | "YYYY-MM-DD HH:mm [작성자] 내용" | +| D-123 | 기능 | 메모 삭제 | X 버튼 클릭 → 삭제 확인 → 삭제 | +| D-124 | 경계 | 빈 메모 추가 | 빈 텍스트 등록 불가 | +| D-125 | 경계 | 메모 없는 상태 | 빈 메모 메시지 또는 빈 목록 | + +#### 2.2.3 신용분석 모달 + +| TC# | 구분 | 테스트 항목 | 기대 결과 | +|-----|------|------------|-----------| +| D-130 | 기능 | 신용분석 버튼 | 클릭 시 CreditAnalysisModal 열림 | +| D-131 | 기능 | 모달 내용 | 신용 분석 데이터 표시 | +| D-132 | 기능 | 모달 닫기 | 닫기 버튼 또는 외부 클릭으로 닫힘 | + +--- + +### 2.3 수정 모드 (mode=edit) + +| TC# | 구분 | 테스트 항목 | 기대 결과 | +|-----|------|------------|-----------| +| D-200 | 기본 | 페이지 로딩 | 기존 데이터 채워진 편집 가능 폼 | +| D-201 | 기본 | 거래처코드 읽기전용 | 코드 수정 불가 | +| D-202 | 기능 | 거래처명 수정 | 변경 후 저장 정상 동작 | +| D-203 | 기능 | 구분 변경 | 매출→매입 등 변경 가능 | +| D-204 | 기능 | 연락처 수정 | 전화/모바일/팩스/이메일 수정 | +| D-205 | 기능 | 결제일 변경 | 매입/매출 결제일 변경 | +| D-206 | 기능 | 등급 변경 | 신용등급/거래등급 변경 | +| D-207 | 기능 | 은행/계좌 변경 | 은행 선택 및 계좌번호 수정 | + +#### 2.3.1 악성채권 토글 + +| TC# | 구분 | 테스트 항목 | 기대 결과 | +|-----|------|------------|-----------| +| D-210 | 비즈 | 악성채권 ON | 토글 활성화 → BadDebt 레코드 생성 (COLLECTING) | +| D-211 | 비즈 | 악성채권 OFF | 토글 비활성화 → BadDebt RECOVERED, is_active=false | +| D-212 | 비즈 | 연체 토글 ON | is_overdue=true 저장 | +| D-213 | 비즈 | 연체 토글 OFF | is_overdue=false 저장 | + +#### 2.3.2 저장/취소/삭제 + +| TC# | 구분 | 테스트 항목 | 기대 결과 | +|-----|------|------------|-----------| +| D-220 | 기능 | 수정 저장 | 변경사항 저장 + view 모드 전환 | +| D-221 | 기능 | 수정 취소 | 변경사항 폐기 + view 모드 복귀 | +| D-222 | 기능 | 삭제 버튼 | 삭제 확인 다이얼로그 표시 | +| D-223 | 기능 | 삭제 확인 | 거래처 삭제 + 목록 페이지 이동 | +| D-224 | 기능 | 삭제 취소 | 아무 변경 없음 | +| D-225 | 비즈 | 주문 있는 거래처 삭제 | 삭제 불가, 에러 메시지 | +| D-226 | 검증 | 필수값 제거 후 저장 | 거래처명 비우고 저장 시 에러 | + +--- + +## 3. 모바일 반응형 + +| TC# | 구분 | 테스트 항목 | 기대 결과 | +|-----|------|------------|-----------| +| M-001 | UI | 목록 모바일 뷰 | 테이블 → 카드 레이아웃 전환 | +| M-002 | UI | 카드 핵심 정보 | 거래처명, 구분 뱃지, 주요 정보 표시 | +| M-003 | UI | 카드 액션 버튼 | 수정/삭제 접근 가능 | +| M-004 | UI | 상세 페이지 레이아웃 | 모바일에서 폼 필드 세로 정렬 | +| M-005 | UI | 검색/필터 모바일 | 검색바, 필터 접근 가능 | + +--- + +## 4. API 응답 검증 + +| TC# | 구분 | 테스트 항목 | 기대 결과 | +|-----|------|------------|-----------| +| A-001 | API | GET /clients 응답 | `{ success: true, data: { data: [...], total, page, size } }` | +| A-002 | API | GET /clients/{id} 응답 | outstanding_amount, bad_debt_total, has_bad_debt 필드 포함 | +| A-003 | API | POST /clients 응답 | client_code 자동 생성, 8자리 영숫자 | +| A-004 | API | GET /clients/stats 응답 | total, sales, purchase, both, badDebt, normal 포함 | +| A-005 | API | DELETE - 주문 연결 | 400 에러 + 적절한 에러 메시지 | +| A-006 | API | 멀티테넌트 격리 | 다른 tenant 데이터 접근 불가 | + +--- + +## 5. 데이터 정합성 + +| TC# | 구분 | 테스트 항목 | 기대 결과 | +|-----|------|------------|-----------| +| I-001 | 비즈 | 미수금 계산 | 매출합계 - 입금합계 = 표시 미수금 | +| I-002 | 비즈 | 결제일 표시 변환 | API "15일" → UI "15" 표시 | +| I-003 | 비즈 | 구분 코드 변환 | API SALES→매출, PURCHASE→매입, BOTH→매입매출 | +| I-004 | 비즈 | 등록→조회 일치 | 등록한 데이터 = 조회 데이터 (모든 필드) | +| I-005 | 비즈 | 수정→조회 일치 | 수정한 데이터 = 재조회 데이터 | + +--- + +## TC 요약 + +| 카테고리 | 건수 | +|----------|------| +| 목록 페이지 | 42건 | +| 상세/등록 페이지 | 52건 | +| 모바일 반응형 | 5건 | +| API 응답 검증 | 6건 | +| 데이터 정합성 | 5건 | +| **합계** | **110건** | + +--- + +## 참고: 구분 체계 + +- **기본**: 페이지 로딩, 기본 표시 +- **기능**: 사용자 인터랙션, CRUD 동작 +- **UI**: 색상, 레이아웃, 뱃지 등 시각 요소 +- **검증**: 입력값 유효성 검사 +- **경계**: 경계값, 예외 케이스 +- **비즈**: 비즈니스 로직 (악성채권, 미수금 등) +- **API**: API 레벨 검증 \ No newline at end of file