- 54개 시나리오 파일에 URL 기반 메뉴 탐색을 위한 navigation 속성 추가 - targetUrl: 정확한 페이지 URL 경로 - urlPattern: ko 버전 포함 URL 패턴 (regex) - menuHints: 메뉴명 힌트 배열 (fallback용) 메뉴 탐색 실패율 41.8% → URL 기반 방식으로 개선 예정 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1070 lines
29 KiB
JSON
1070 lines
29 KiB
JSON
{
|
|
"id": "expected-expenses",
|
|
"name": "예상비용 관리 테스트",
|
|
"screenshotPolicy": {
|
|
"onErrorOnly": true,
|
|
"captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
|
|
},
|
|
"description": "회계관리 > 예상비용 메뉴의 CRUD 전체 워크플로우, 일괄 작업, 전자결재 기능 테스트",
|
|
"baseUrl": "https://dev.codebridge-x.com",
|
|
"url": "/ko/accounting/expected-expenses",
|
|
"navigation": {
|
|
"targetUrl": "/accounting/expected-expenses",
|
|
"urlPattern": "/accounting/expected-expenses|/ko/accounting/expected-expenses",
|
|
"menuHints": ["지출예상내역서", "예상비용", "회계관리"]
|
|
},
|
|
"menuNavigation": {
|
|
"level1": "회계관리",
|
|
"level2": "지출예상내역서",
|
|
"expectedUrl": "/ko/accounting/expected-expenses"
|
|
},
|
|
"menuNavigationEnhanced": {
|
|
"strategy": "scroll-and-search",
|
|
"sidebarSelector": ".sidebar-scroll, [data-sidebar], nav[role='navigation']",
|
|
"scrollConfig": {
|
|
"scrollToTopFirst": true,
|
|
"scrollStep": 200,
|
|
"maxScrollAttempts": 10,
|
|
"scrollDelay": 300
|
|
},
|
|
"level1": {
|
|
"text": "회계관리",
|
|
"selectors": [
|
|
"button:has-text('회계관리')",
|
|
"[data-menu='accounting']",
|
|
"a:has-text('회계관리')"
|
|
],
|
|
"expandable": true,
|
|
"waitAfterClick": 500
|
|
},
|
|
"level2": {
|
|
"text": "지출예상내역서",
|
|
"selectors": [
|
|
"a:has-text('예상비용')",
|
|
"[href*='expected-expenses']",
|
|
"button:has-text('예상비용')"
|
|
],
|
|
"waitAfterClick": 1000
|
|
},
|
|
"fallback": {
|
|
"directUrl": "/ko/accounting/expected-expenses",
|
|
"useAfterAttempts": 3
|
|
}
|
|
},
|
|
"testFocus": {
|
|
"primary": "등록/수정/삭제 전체 워크플로우 및 일괄 작업 기능 검증",
|
|
"description": "2년 기간 설정, 모달 등록/수정, 일괄 작업(예상 지급일 변경, 전자결재, 일괄삭제) 테스트"
|
|
},
|
|
"prerequisites": {
|
|
"authentication": true,
|
|
"testData": {
|
|
"dateRange": {
|
|
"startDate": "2024-01-15",
|
|
"endDate": "2026-01-15"
|
|
},
|
|
"newExpense": {
|
|
"transactionType": "purchase",
|
|
"amount": 5000000,
|
|
"vendorName": "테스트거래처",
|
|
"accountSubject": "매입비용",
|
|
"note": "테스트 예상비용 등록"
|
|
},
|
|
"updateExpense": {
|
|
"amount": 7000000,
|
|
"note": "테스트 예상비용 수정"
|
|
},
|
|
"bulkOperation": {
|
|
"newExpectedDate": "2026-02-15"
|
|
}
|
|
}
|
|
},
|
|
"steps": [
|
|
{
|
|
"id": "step-0",
|
|
"name": "사이드바 메뉴 전체 펼치기",
|
|
"description": "모두 펼치기 버튼을 클릭하여 전체 메뉴를 펼친 후 메뉴 탐색 준비",
|
|
"actions": [
|
|
{
|
|
"type": "evaluate",
|
|
"script": "document.querySelector('.sidebar-scroll, [data-sidebar], nav[role=\"navigation\"]')?.scrollTo({top: 0, behavior: 'instant'})"
|
|
},
|
|
{ "type": "wait", "duration": 300 },
|
|
{
|
|
"type": "evaluate",
|
|
"script": "Array.from(document.querySelectorAll('button')).find(b => b.innerText?.includes('모두 펼치기'))?.click()"
|
|
},
|
|
{ "type": "wait", "duration": 2000 }
|
|
],
|
|
"expected": {
|
|
"sidebarReady": true,
|
|
"scrollPosition": "top"
|
|
}
|
|
},
|
|
{
|
|
"id": "step-1",
|
|
"name": "2단계 메뉴 진입: 회계관리 > 예상비용",
|
|
"description": "회계관리 > 예상비용 메뉴로 이동하여 페이지 로드 확인 (scrollAndFind 패턴 적용)",
|
|
"navigationPattern": "scrollAndFind",
|
|
"actions": [
|
|
{
|
|
"type": "scrollAndFind",
|
|
"target": "회계관리",
|
|
"container": ".sidebar-scroll, [data-sidebar], nav[role='navigation']",
|
|
"scrollStep": 200,
|
|
"maxAttempts": 10
|
|
},
|
|
{ "type": "click", "target": "회계관리" },
|
|
{ "type": "wait", "duration": 500 },
|
|
{
|
|
"type": "scrollAndFind",
|
|
"target": "예상비용",
|
|
"container": ".sidebar-scroll, [data-sidebar], nav[role='navigation']",
|
|
"scrollStep": 200,
|
|
"maxAttempts": 5
|
|
},
|
|
{ "type": "click", "target": "예상비용" },
|
|
{ "type": "wait", "target": "페이지 로드 완료", "timeout": 5000 }
|
|
],
|
|
"fallback": {
|
|
"action": "navigate",
|
|
"url": "/ko/accounting/expected-expenses"
|
|
},
|
|
"expected": {
|
|
"url": "/ko/accounting/expected-expenses",
|
|
"pageTitle": "예상비용",
|
|
"elements": ["페이지 타이틀", "기간 선택", "필터", "테이블", "등록 버튼"],
|
|
"authenticated": true
|
|
}
|
|
},
|
|
{
|
|
"id": "step-2",
|
|
"name": "페이지 구조 확인",
|
|
"description": "통계 카드, 필터, 버튼, 테이블 구조 확인",
|
|
"actions": [
|
|
{
|
|
"type": "verify",
|
|
"target": "페이지 구조"
|
|
}
|
|
],
|
|
"expected": {
|
|
"statCards": ["총 지출 예상", "미지급 건수", "지급완료 건수"],
|
|
"filters": ["기간 선택", "거래유형", "지급상태", "정렬"],
|
|
"buttons": ["등록", "예상 지급일 변경", "전자결재", "일괄삭제"],
|
|
"tableColumns": ["선택", "예상 지급일", "결제일", "거래유형", "거래처명", "지출금액", "지급상태", "전자결재", "적요", "수정", "삭제"]
|
|
}
|
|
},
|
|
{
|
|
"id": "step-3",
|
|
"name": "기간 설정 (2년)",
|
|
"description": "현재일자에서 2년 전까지 기간 설정 (2024-01-15 ~ 2026-01-15)",
|
|
"actions": [
|
|
{
|
|
"type": "click",
|
|
"target": "기간 선택 버튼"
|
|
},
|
|
{
|
|
"type": "selectDate",
|
|
"target": "시작일",
|
|
"value": "2024-01-15"
|
|
},
|
|
{
|
|
"type": "selectDate",
|
|
"target": "종료일",
|
|
"value": "2026-01-15"
|
|
},
|
|
{
|
|
"type": "click",
|
|
"target": "적용 버튼"
|
|
},
|
|
{
|
|
"type": "wait",
|
|
"target": "데이터 로드"
|
|
}
|
|
],
|
|
"expected": {
|
|
"dateRange": "2024-01-15 ~ 2026-01-15",
|
|
"dataLoaded": true,
|
|
"tableVisible": true
|
|
}
|
|
},
|
|
{
|
|
"id": "step-4",
|
|
"name": "초기 데이터 확인",
|
|
"description": "2년 기간 데이터 로드 확인 및 통계 카드 값 확인",
|
|
"actions": [
|
|
{
|
|
"type": "verify",
|
|
"target": "테이블 데이터 및 통계"
|
|
}
|
|
],
|
|
"expected": {
|
|
"tableHasData": true,
|
|
"statCardsVisible": true,
|
|
"monthGrouping": "월별 그룹핑 표시"
|
|
}
|
|
},
|
|
{
|
|
"id": "step-5",
|
|
"name": "등록 버튼 클릭",
|
|
"description": "등록 버튼 클릭하여 등록 모달 열기",
|
|
"actions": [
|
|
{
|
|
"type": "click",
|
|
"target": "등록 버튼"
|
|
},
|
|
{
|
|
"type": "wait",
|
|
"target": "모달 표시"
|
|
}
|
|
],
|
|
"expected": {
|
|
"modalTitle": "예상비용 등록",
|
|
"modalVisible": true,
|
|
"formFieldsVisible": true
|
|
}
|
|
},
|
|
{
|
|
"id": "step-6",
|
|
"name": "등록 모달 필드 확인",
|
|
"description": "등록 모달의 모든 입력 필드 존재 확인",
|
|
"actions": [
|
|
{
|
|
"type": "verify",
|
|
"target": "모달 입력 필드"
|
|
}
|
|
],
|
|
"expected": {
|
|
"fields": [
|
|
"예상 지급일 (datepicker)",
|
|
"결제일 (datepicker)",
|
|
"거래유형 (select)",
|
|
"거래처 (combobox)",
|
|
"지출금액 (input number)",
|
|
"계좌 (select)",
|
|
"계정과목 (select)",
|
|
"적요/메모 (textarea)",
|
|
"등록 버튼",
|
|
"취소 버튼"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"id": "step-7",
|
|
"name": "예상 지급일 입력",
|
|
"description": "DatePicker로 예상 지급일 선택",
|
|
"actions": [
|
|
{
|
|
"type": "click",
|
|
"target": "예상 지급일 필드"
|
|
},
|
|
{
|
|
"type": "selectDate",
|
|
"target": "캘린더",
|
|
"value": "2026-02-01"
|
|
}
|
|
],
|
|
"expected": {
|
|
"fieldValue": "2026-02-01",
|
|
"fieldFilled": true
|
|
}
|
|
},
|
|
{
|
|
"id": "step-8",
|
|
"name": "결제일 입력",
|
|
"description": "DatePicker로 결제일 선택",
|
|
"actions": [
|
|
{
|
|
"type": "click",
|
|
"target": "결제일 필드"
|
|
},
|
|
{
|
|
"type": "selectDate",
|
|
"target": "캘린더",
|
|
"value": "2026-01-20"
|
|
}
|
|
],
|
|
"expected": {
|
|
"fieldValue": "2026-01-20",
|
|
"fieldFilled": true
|
|
}
|
|
},
|
|
{
|
|
"id": "step-9",
|
|
"name": "거래유형 선택",
|
|
"description": "Select로 거래유형 선택 (매입)",
|
|
"actions": [
|
|
{
|
|
"type": "click",
|
|
"target": "거래유형 Select"
|
|
},
|
|
{
|
|
"type": "select",
|
|
"target": "옵션 목록",
|
|
"value": "매입"
|
|
}
|
|
],
|
|
"expected": {
|
|
"options": ["매입", "선급금", "가지급금", "임대료", "급여", "보험료", "세금", "공과금", "기타"],
|
|
"selectedValue": "매입"
|
|
}
|
|
},
|
|
{
|
|
"id": "step-10",
|
|
"name": "거래처 입력",
|
|
"description": "Combobox로 거래처 검색 및 선택 또는 직접 입력",
|
|
"actions": [
|
|
{
|
|
"type": "click",
|
|
"target": "거래처 Combobox"
|
|
},
|
|
{
|
|
"type": "type",
|
|
"target": "거래처 입력 필드",
|
|
"value": "테스트"
|
|
},
|
|
{
|
|
"type": "wait",
|
|
"target": "검색 결과"
|
|
},
|
|
{
|
|
"type": "select",
|
|
"target": "거래처 옵션 또는 직접 입력"
|
|
}
|
|
],
|
|
"expected": {
|
|
"searchWorking": true,
|
|
"optionsDisplayed": "거래처 목록 또는 새로 입력 가능",
|
|
"selectedVendor": "테스트거래처"
|
|
}
|
|
},
|
|
{
|
|
"id": "step-11",
|
|
"name": "지출금액 입력",
|
|
"description": "숫자 입력 필드에 금액 직접 입력",
|
|
"actions": [
|
|
{
|
|
"type": "click",
|
|
"target": "지출금액 필드"
|
|
},
|
|
{
|
|
"type": "clear",
|
|
"target": "지출금액 필드"
|
|
},
|
|
{
|
|
"type": "type",
|
|
"target": "지출금액 필드",
|
|
"value": "5000000"
|
|
}
|
|
],
|
|
"expected": {
|
|
"fieldValue": "5000000 또는 5,000,000 (포맷)",
|
|
"validInput": true
|
|
}
|
|
},
|
|
{
|
|
"id": "step-12",
|
|
"name": "계좌 선택",
|
|
"description": "Select로 계좌 선택",
|
|
"actions": [
|
|
{
|
|
"type": "click",
|
|
"target": "계좌 Select"
|
|
},
|
|
{
|
|
"type": "select",
|
|
"target": "계좌 옵션"
|
|
}
|
|
],
|
|
"expected": {
|
|
"optionsLoaded": true,
|
|
"accountSelected": true
|
|
}
|
|
},
|
|
{
|
|
"id": "step-13",
|
|
"name": "계정과목 선택",
|
|
"description": "Select로 계정과목 선택 (매입비용)",
|
|
"actions": [
|
|
{
|
|
"type": "click",
|
|
"target": "계정과목 Select"
|
|
},
|
|
{
|
|
"type": "select",
|
|
"target": "옵션 목록",
|
|
"value": "매입비용"
|
|
}
|
|
],
|
|
"expected": {
|
|
"options": ["매입비용", "급여", "임차료", "공과금", "보험료", "세금과공과", "기타비용"],
|
|
"selectedValue": "매입비용"
|
|
}
|
|
},
|
|
{
|
|
"id": "step-14",
|
|
"name": "적요 입력",
|
|
"description": "Textarea에 메모/적요 입력",
|
|
"actions": [
|
|
{
|
|
"type": "click",
|
|
"target": "적요/메모 필드"
|
|
},
|
|
{
|
|
"type": "type",
|
|
"target": "적요/메모 필드",
|
|
"value": "테스트 예상비용 등록"
|
|
}
|
|
],
|
|
"expected": {
|
|
"fieldValue": "테스트 예상비용 등록",
|
|
"textareaFilled": true
|
|
}
|
|
},
|
|
{
|
|
"id": "step-15",
|
|
"name": "등록 버튼 클릭 및 저장",
|
|
"description": "모달 내 등록 버튼 클릭하여 데이터 저장",
|
|
"actions": [
|
|
{
|
|
"type": "click",
|
|
"target": "등록 버튼 (모달 내)"
|
|
},
|
|
{
|
|
"type": "wait",
|
|
"target": "저장 처리 완료"
|
|
}
|
|
],
|
|
"expected": {
|
|
"apiCall": "POST /api/accounting/expected-expenses",
|
|
"apiResponse": "200 OK",
|
|
"successToast": "예상비용이 등록되었습니다",
|
|
"modalClosed": true
|
|
}
|
|
},
|
|
{
|
|
"id": "step-16",
|
|
"name": "등록 결과 확인",
|
|
"description": "테이블에 새로 등록된 데이터 표시 확인",
|
|
"actions": [
|
|
{
|
|
"type": "wait",
|
|
"target": "테이블 리로드"
|
|
},
|
|
{
|
|
"type": "verify",
|
|
"target": "신규 데이터 행"
|
|
}
|
|
],
|
|
"expected": {
|
|
"newRowVisible": true,
|
|
"dataMatches": {
|
|
"amount": "5,000,000원",
|
|
"vendorName": "테스트거래처",
|
|
"transactionType": "매입",
|
|
"note": "테스트 예상비용 등록"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "step-17",
|
|
"name": "수정 아이콘 클릭",
|
|
"description": "방금 등록한 데이터의 수정 아이콘 클릭하여 수정 모달 열기",
|
|
"actions": [
|
|
{
|
|
"type": "click",
|
|
"target": "신규 등록 행의 수정 아이콘"
|
|
},
|
|
{
|
|
"type": "wait",
|
|
"target": "수정 모달 표시"
|
|
}
|
|
],
|
|
"expected": {
|
|
"modalTitle": "예상비용 수정",
|
|
"modalVisible": true,
|
|
"prefilledData": {
|
|
"amount": "5000000",
|
|
"vendorName": "테스트거래처",
|
|
"note": "테스트 예상비용 등록"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "step-18",
|
|
"name": "지출금액 수정",
|
|
"description": "지출금액을 7,000,000원으로 변경",
|
|
"actions": [
|
|
{
|
|
"type": "click",
|
|
"target": "지출금액 필드"
|
|
},
|
|
{
|
|
"type": "clear",
|
|
"target": "지출금액 필드"
|
|
},
|
|
{
|
|
"type": "type",
|
|
"target": "지출금액 필드",
|
|
"value": "7000000"
|
|
}
|
|
],
|
|
"expected": {
|
|
"fieldValue": "7000000",
|
|
"valueChanged": true
|
|
}
|
|
},
|
|
{
|
|
"id": "step-19",
|
|
"name": "적요 수정",
|
|
"description": "적요를 '테스트 예상비용 수정'으로 변경",
|
|
"actions": [
|
|
{
|
|
"type": "click",
|
|
"target": "적요/메모 필드"
|
|
},
|
|
{
|
|
"type": "clear",
|
|
"target": "적요/메모 필드"
|
|
},
|
|
{
|
|
"type": "type",
|
|
"target": "적요/메모 필드",
|
|
"value": "테스트 예상비용 수정"
|
|
}
|
|
],
|
|
"expected": {
|
|
"fieldValue": "테스트 예상비용 수정",
|
|
"textChanged": true
|
|
}
|
|
},
|
|
{
|
|
"id": "step-20",
|
|
"name": "수정 버튼 클릭 및 저장",
|
|
"description": "모달 내 수정 버튼 클릭하여 변경사항 저장",
|
|
"actions": [
|
|
{
|
|
"type": "click",
|
|
"target": "수정 버튼 (모달 내)"
|
|
},
|
|
{
|
|
"type": "wait",
|
|
"target": "저장 처리 완료"
|
|
}
|
|
],
|
|
"expected": {
|
|
"apiCall": "PUT /api/accounting/expected-expenses/:id",
|
|
"apiResponse": "200 OK",
|
|
"successToast": "예상비용이 수정되었습니다",
|
|
"modalClosed": true
|
|
}
|
|
},
|
|
{
|
|
"id": "step-21",
|
|
"name": "수정 결과 확인",
|
|
"description": "테이블에서 수정된 데이터 반영 확인",
|
|
"actions": [
|
|
{
|
|
"type": "wait",
|
|
"target": "테이블 리로드"
|
|
},
|
|
{
|
|
"type": "verify",
|
|
"target": "수정된 데이터 행"
|
|
}
|
|
],
|
|
"expected": {
|
|
"updatedRowVisible": true,
|
|
"dataMatches": {
|
|
"amount": "7,000,000원",
|
|
"note": "테스트 예상비용 수정"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "step-22",
|
|
"name": "체크박스 선택 (단일)",
|
|
"description": "방금 수정한 데이터의 체크박스 선택",
|
|
"actions": [
|
|
{
|
|
"type": "click",
|
|
"target": "수정된 행의 체크박스"
|
|
}
|
|
],
|
|
"expected": {
|
|
"checkboxChecked": true,
|
|
"selectedCount": 1,
|
|
"bulkButtonsEnabled": true
|
|
}
|
|
},
|
|
{
|
|
"id": "step-23",
|
|
"name": "예상 지급일 변경 버튼 클릭",
|
|
"description": "일괄 작업: 예상 지급일 변경 다이얼로그 열기",
|
|
"actions": [
|
|
{
|
|
"type": "click",
|
|
"target": "예상 지급일 변경 버튼"
|
|
},
|
|
{
|
|
"type": "wait",
|
|
"target": "다이얼로그 표시"
|
|
}
|
|
],
|
|
"expected": {
|
|
"dialogTitle": "예상 지급일 변경",
|
|
"dialogVisible": true,
|
|
"datepickerVisible": true,
|
|
"selectedItemsCount": "1건"
|
|
}
|
|
},
|
|
{
|
|
"id": "step-24",
|
|
"name": "새로운 예상 지급일 선택",
|
|
"description": "DatePicker로 새로운 예상 지급일 선택 (2026-02-15)",
|
|
"actions": [
|
|
{
|
|
"type": "click",
|
|
"target": "날짜 선택 필드"
|
|
},
|
|
{
|
|
"type": "selectDate",
|
|
"target": "캘린더",
|
|
"value": "2026-02-15"
|
|
}
|
|
],
|
|
"expected": {
|
|
"dateSelected": "2026-02-15",
|
|
"confirmButtonEnabled": true
|
|
}
|
|
},
|
|
{
|
|
"id": "step-25",
|
|
"name": "예상 지급일 변경 확인",
|
|
"description": "확인 버튼 클릭하여 예상 지급일 일괄 변경",
|
|
"actions": [
|
|
{
|
|
"type": "click",
|
|
"target": "확인 버튼"
|
|
},
|
|
{
|
|
"type": "wait",
|
|
"target": "처리 완료"
|
|
}
|
|
],
|
|
"expected": {
|
|
"apiCall": "PUT /api/accounting/expected-expenses/bulk-update-date",
|
|
"apiResponse": "200 OK",
|
|
"successToast": "1건의 예상 지급일이 변경되었습니다",
|
|
"dialogClosed": true
|
|
}
|
|
},
|
|
{
|
|
"id": "step-26",
|
|
"name": "예상 지급일 변경 결과 확인",
|
|
"description": "테이블에서 예상 지급일이 변경되었는지 확인",
|
|
"actions": [
|
|
{
|
|
"type": "wait",
|
|
"target": "테이블 리로드"
|
|
},
|
|
{
|
|
"type": "verify",
|
|
"target": "변경된 데이터 행"
|
|
}
|
|
],
|
|
"expected": {
|
|
"expectedPaymentDate": "2026-02-15",
|
|
"dateUpdated": true
|
|
}
|
|
},
|
|
{
|
|
"id": "step-27",
|
|
"name": "전자결재 버튼 클릭",
|
|
"description": "일괄 작업: 전자결재 신청 (체크박스 선택 유지 상태)",
|
|
"actions": [
|
|
{
|
|
"type": "verify",
|
|
"target": "체크박스 선택 상태 (여전히 선택됨)"
|
|
},
|
|
{
|
|
"type": "click",
|
|
"target": "전자결재 버튼"
|
|
},
|
|
{
|
|
"type": "wait",
|
|
"target": "처리 완료"
|
|
}
|
|
],
|
|
"expected": {
|
|
"apiCall": "POST /api/accounting/expected-expenses/approval",
|
|
"apiResponse": "200 OK 또는 404/500 (미구현 가능)",
|
|
"resultToast": "전자결재가 신청되었습니다 또는 에러 메시지"
|
|
}
|
|
},
|
|
{
|
|
"id": "step-28",
|
|
"name": "전자결재 결과 확인",
|
|
"description": "테이블에서 전자결재 상태 변경 확인",
|
|
"actions": [
|
|
{
|
|
"type": "wait",
|
|
"target": "테이블 리로드"
|
|
},
|
|
{
|
|
"type": "verify",
|
|
"target": "전자결재 상태 컬럼"
|
|
}
|
|
],
|
|
"expected": {
|
|
"approvalStatus": "결재대기 또는 미신청 (API 미구현 시)",
|
|
"badgeVisible": true
|
|
}
|
|
},
|
|
{
|
|
"id": "step-29",
|
|
"name": "추가 데이터 등록 (일괄삭제 테스트용)",
|
|
"description": "일괄삭제 테스트를 위해 추가 데이터 1건 더 등록",
|
|
"actions": [
|
|
{
|
|
"type": "click",
|
|
"target": "등록 버튼"
|
|
},
|
|
{
|
|
"type": "wait",
|
|
"target": "모달 표시"
|
|
},
|
|
{
|
|
"type": "fillForm",
|
|
"target": "등록 폼",
|
|
"data": {
|
|
"expectedPaymentDate": "2026-03-01",
|
|
"transactionType": "급여",
|
|
"amount": "3000000",
|
|
"vendorName": "삭제테스트거래처",
|
|
"note": "일괄삭제 테스트용"
|
|
}
|
|
},
|
|
{
|
|
"type": "click",
|
|
"target": "등록 버튼 (모달 내)"
|
|
},
|
|
{
|
|
"type": "wait",
|
|
"target": "저장 완료"
|
|
}
|
|
],
|
|
"expected": {
|
|
"successToast": "예상비용이 등록되었습니다",
|
|
"newRowVisible": true
|
|
}
|
|
},
|
|
{
|
|
"id": "step-30",
|
|
"name": "복수 체크박스 선택",
|
|
"description": "일괄삭제를 위해 2개 행 체크박스 선택",
|
|
"actions": [
|
|
{
|
|
"type": "click",
|
|
"target": "첫 번째 테스트 데이터 체크박스"
|
|
},
|
|
{
|
|
"type": "click",
|
|
"target": "두 번째 테스트 데이터 체크박스"
|
|
}
|
|
],
|
|
"expected": {
|
|
"selectedCount": 2,
|
|
"bulkDeleteButtonEnabled": true
|
|
}
|
|
},
|
|
{
|
|
"id": "step-31",
|
|
"name": "일괄삭제 버튼 클릭",
|
|
"description": "일괄삭제 버튼 클릭하여 확인 다이얼로그 표시",
|
|
"actions": [
|
|
{
|
|
"type": "click",
|
|
"target": "일괄삭제 버튼"
|
|
},
|
|
{
|
|
"type": "wait",
|
|
"target": "확인 다이얼로그 표시"
|
|
}
|
|
],
|
|
"expected": {
|
|
"dialogTitle": "일괄삭제 확인",
|
|
"dialogMessage": "2건의 예상비용을 삭제하시겠습니까?",
|
|
"confirmButtonVisible": true,
|
|
"cancelButtonVisible": true
|
|
}
|
|
},
|
|
{
|
|
"id": "step-32",
|
|
"name": "일괄삭제 취소",
|
|
"description": "취소 버튼 클릭하여 삭제 취소 (워크플로우 분기 테스트)",
|
|
"actions": [
|
|
{
|
|
"type": "click",
|
|
"target": "취소 버튼"
|
|
}
|
|
],
|
|
"expected": {
|
|
"dialogClosed": true,
|
|
"dataPreserved": true,
|
|
"selectedItemsStillChecked": true
|
|
}
|
|
},
|
|
{
|
|
"id": "step-33",
|
|
"name": "일괄삭제 재시도",
|
|
"description": "일괄삭제 버튼 다시 클릭",
|
|
"actions": [
|
|
{
|
|
"type": "click",
|
|
"target": "일괄삭제 버튼"
|
|
},
|
|
{
|
|
"type": "wait",
|
|
"target": "확인 다이얼로그 표시"
|
|
}
|
|
],
|
|
"expected": {
|
|
"dialogVisible": true
|
|
}
|
|
},
|
|
{
|
|
"id": "step-34",
|
|
"name": "일괄삭제 확인",
|
|
"description": "확인 버튼 클릭하여 2건 일괄 삭제 실행",
|
|
"actions": [
|
|
{
|
|
"type": "click",
|
|
"target": "확인 버튼"
|
|
},
|
|
{
|
|
"type": "wait",
|
|
"target": "삭제 처리 완료"
|
|
}
|
|
],
|
|
"expected": {
|
|
"apiCall": "DELETE /api/accounting/expected-expenses/bulk",
|
|
"apiResponse": "200 OK",
|
|
"successToast": "2건이 삭제되었습니다",
|
|
"dialogClosed": true
|
|
}
|
|
},
|
|
{
|
|
"id": "step-35",
|
|
"name": "일괄삭제 결과 확인",
|
|
"description": "테이블에서 삭제된 데이터가 사라졌는지 확인",
|
|
"actions": [
|
|
{
|
|
"type": "wait",
|
|
"target": "테이블 리로드"
|
|
},
|
|
{
|
|
"type": "verify",
|
|
"target": "삭제된 행 부재"
|
|
}
|
|
],
|
|
"expected": {
|
|
"deletedRowsGone": true,
|
|
"tableUpdated": true,
|
|
"selectedItemsCleared": true
|
|
}
|
|
},
|
|
{
|
|
"id": "step-36",
|
|
"name": "단일 삭제 테스트 준비",
|
|
"description": "단일 삭제 테스트를 위해 새 데이터 1건 등록",
|
|
"actions": [
|
|
{
|
|
"type": "click",
|
|
"target": "등록 버튼"
|
|
},
|
|
{
|
|
"type": "fillForm",
|
|
"target": "등록 폼",
|
|
"data": {
|
|
"expectedPaymentDate": "2026-04-01",
|
|
"transactionType": "기타",
|
|
"amount": "1000000",
|
|
"note": "단일삭제 테스트용"
|
|
}
|
|
},
|
|
{
|
|
"type": "click",
|
|
"target": "등록 버튼 (모달 내)"
|
|
},
|
|
{
|
|
"type": "wait",
|
|
"target": "저장 완료"
|
|
}
|
|
],
|
|
"expected": {
|
|
"newRowVisible": true
|
|
}
|
|
},
|
|
{
|
|
"id": "step-37",
|
|
"name": "단일 삭제 아이콘 클릭",
|
|
"description": "방금 등록한 데이터의 삭제 아이콘 클릭",
|
|
"actions": [
|
|
{
|
|
"type": "click",
|
|
"target": "신규 등록 행의 삭제 아이콘"
|
|
},
|
|
{
|
|
"type": "wait",
|
|
"target": "확인 다이얼로그 표시"
|
|
}
|
|
],
|
|
"expected": {
|
|
"dialogTitle": "삭제 확인",
|
|
"dialogMessage": "이 예상비용을 삭제하시겠습니까?",
|
|
"confirmButtonVisible": true
|
|
}
|
|
},
|
|
{
|
|
"id": "step-38",
|
|
"name": "단일 삭제 확인",
|
|
"description": "확인 버튼 클릭하여 단일 삭제 실행",
|
|
"actions": [
|
|
{
|
|
"type": "click",
|
|
"target": "확인 버튼"
|
|
},
|
|
{
|
|
"type": "wait",
|
|
"target": "삭제 처리 완료"
|
|
}
|
|
],
|
|
"expected": {
|
|
"apiCall": "DELETE /api/accounting/expected-expenses/:id",
|
|
"apiResponse": "200 OK",
|
|
"successToast": "삭제되었습니다",
|
|
"dialogClosed": true
|
|
}
|
|
},
|
|
{
|
|
"id": "step-39",
|
|
"name": "단일 삭제 결과 확인",
|
|
"description": "테이블에서 삭제된 데이터 확인",
|
|
"actions": [
|
|
{
|
|
"type": "wait",
|
|
"target": "테이블 리로드"
|
|
},
|
|
{
|
|
"type": "verify",
|
|
"target": "삭제된 행 부재"
|
|
}
|
|
],
|
|
"expected": {
|
|
"deletedRowGone": true,
|
|
"tableUpdated": true
|
|
}
|
|
},
|
|
{
|
|
"id": "step-40",
|
|
"name": "필터 기능 테스트 - 거래유형",
|
|
"description": "거래유형 필터 선택하여 데이터 필터링 확인",
|
|
"actions": [
|
|
{
|
|
"type": "click",
|
|
"target": "거래유형 필터"
|
|
},
|
|
{
|
|
"type": "select",
|
|
"target": "옵션",
|
|
"value": "매입"
|
|
},
|
|
{
|
|
"type": "wait",
|
|
"target": "데이터 필터링"
|
|
}
|
|
],
|
|
"expected": {
|
|
"filteredData": "매입 거래유형만 표시",
|
|
"tableUpdated": true
|
|
}
|
|
},
|
|
{
|
|
"id": "step-41",
|
|
"name": "필터 기능 테스트 - 지급상태",
|
|
"description": "지급상태 필터 선택하여 데이터 필터링 확인",
|
|
"actions": [
|
|
{
|
|
"type": "click",
|
|
"target": "지급상태 필터"
|
|
},
|
|
{
|
|
"type": "select",
|
|
"target": "옵션",
|
|
"value": "미지급"
|
|
},
|
|
{
|
|
"type": "wait",
|
|
"target": "데이터 필터링"
|
|
}
|
|
],
|
|
"expected": {
|
|
"filteredData": "미지급 상태만 표시",
|
|
"tableUpdated": true
|
|
}
|
|
},
|
|
{
|
|
"id": "step-42",
|
|
"name": "필터 초기화",
|
|
"description": "필터를 '전체'로 변경하여 초기화",
|
|
"actions": [
|
|
{
|
|
"type": "click",
|
|
"target": "거래유형 필터"
|
|
},
|
|
{
|
|
"type": "select",
|
|
"target": "전체"
|
|
},
|
|
{
|
|
"type": "click",
|
|
"target": "지급상태 필터"
|
|
},
|
|
{
|
|
"type": "select",
|
|
"target": "전체"
|
|
}
|
|
],
|
|
"expected": {
|
|
"allDataVisible": true,
|
|
"filtersCleared": true
|
|
}
|
|
}
|
|
],
|
|
"cleanup": {
|
|
"description": "테스트 후 생성된 테스트 데이터 정리 (필요시)",
|
|
"actions": []
|
|
},
|
|
"notes": [
|
|
"2년 기간 설정으로 충분한 데이터 범위 확보",
|
|
"등록 모달의 모든 입력 필드 (datepicker, select, combobox, input, textarea) 테스트 필수",
|
|
"수정 모달의 기존 데이터 프리필 확인 필수",
|
|
"일괄 작업 (예상 지급일 변경, 전자결재, 일괄삭제) 모두 테스트",
|
|
"워크플로우 분기: 삭제 취소 → 재시도 → 확인 패턴 검증",
|
|
"단일 삭제와 일괄삭제 모두 테스트",
|
|
"필터 기능 (거래유형, 지급상태) 동작 확인",
|
|
"전자결재 기능은 API 미구현 가능성 있음 (404 에러 예상)"
|
|
],
|
|
"expectedAPIs": [
|
|
"GET /api/accounting/expected-expenses - 목록 조회",
|
|
"POST /api/accounting/expected-expenses - 등록",
|
|
"PUT /api/accounting/expected-expenses/:id - 수정",
|
|
"DELETE /api/accounting/expected-expenses/:id - 단일 삭제",
|
|
"DELETE /api/accounting/expected-expenses/bulk - 일괄 삭제",
|
|
"PUT /api/accounting/expected-expenses/bulk-update-date - 예상 지급일 일괄 변경",
|
|
"POST /api/accounting/expected-expenses/approval - 전자결재 신청",
|
|
"GET /api/clients - 거래처 목록",
|
|
"GET /api/bank-accounts - 계좌 목록"
|
|
]
|
|
}
|