Files
sam-scenarios/withdrawal-management.json
김보곤 b2509ee2dc refactor: 28개 시나리오 JSON 업데이트
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 14:14:09 +09:00

529 lines
19 KiB
JSON

{
"enabled": false,
"id": "withdrawal-management",
"name": "출금관리 테스트",
"screenshotPolicy": {
"onErrorOnly": true,
"captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
},
"description": "출금관리 목록 조회, 계정과목명 일괄변경, 상세 수정 기능 E2E 테스트",
"baseUrl": "https://dev.codebridge-x.com",
"url": "/ko/accounting/withdrawals",
"navigation": {
"targetUrl": "/accounting/withdrawals",
"urlPattern": "/accounting/withdrawals|/ko/accounting/withdrawals",
"menuHints": ["출금관리", "출금 관리", "회계관리"]
},
"menuNavigation": {
"level1": "회계관리",
"level2": "출금관리",
"expectedUrl": "/ko/accounting/withdrawals",
"searchWithinParent": true,
"closeOtherMenus": true
},
"menuNavigationEnhanced": {
"strategy": "scroll-and-search",
"sidebarSelector": ".sidebar-scroll, [data-sidebar], nav[role='navigation']",
"scrollBehavior": {
"direction": "down",
"step": 200,
"maxScrolls": 10,
"waitAfterScroll": 300
},
"level1": {
"text": "회계관리",
"expandable": true,
"waitAfterClick": 500
},
"level2": {
"text": "출금관리",
"waitAfterClick": 300
},
"fallbackUrl": "/ko/accounting/withdrawals",
"verification": {
"urlContains": "/accounting/withdrawals",
"timeout": 5000
}
},
"timeout": 60000,
"tags": ["accounting", "withdrawal", "crud"],
"auth": {
"username": "TestUser5",
"password": "password123!"
},
"steps": [
{
"id": "step-0",
"name": "사이드바 메뉴 전체 펼치기",
"description": "모두 펼치기 버튼을 클릭하여 전체 메뉴를 펼친 후 메뉴 탐색 준비",
"actions": [
{
"type": "evaluate",
"script": "document.querySelector('.sidebar-scroll')?.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 }
],
"expect": {
"sidebarReady": true
}
},
{
"id": "step-1",
"name": "출금관리 메뉴 진입",
"description": "회계관리 > 출금관리 메뉴로 이동 (scrollAndFind 패턴 사용)",
"menuNavigation": {
"useEnhanced": true,
"scrollAndFind": {
"level1": {
"text": "회계관리",
"scrollUntilVisible": true,
"clickToExpand": true,
"waitAfterClick": 500
},
"level2": {
"text": "출금관리",
"scrollUntilVisible": true,
"waitAfterClick": 300
}
},
"fallback": {
"useDirectUrl": true,
"url": "/ko/accounting/withdrawals"
}
},
"expect": {
"url": "/accounting/withdrawals",
"visible": ["출금관리", "총 출금"]
}
},
{
"id": "step-2",
"name": "목록 페이지 구조 확인",
"description": "테이블 및 필터 요소 확인",
"expect": {
"visible": ["출금일", "출금계좌", "받는분", "출금금액", "거래처", "적요", "출금유형"],
"elements": {
"statisticsCards": ["총 출금", "당월 출금", "거래처 미설정", "출금유형 미설정"],
"filters": ["계정과목명", "저장", "새로고침"],
"pagination": true
}
}
},
{
"id": "step-3",
"name": "계정과목명 드롭다운 옵션 확인",
"description": "계정과목명 일괄변경 드롭다운 옵션 검증",
"actions": [
{ "type": "click_if_exists", "target": "계정과목명 드롭다운", "description": "드롭다운 열기" }
],
"expect": {
"options": ["미설정", "매입대금", "급여", "임차료", "수도광열비", "통신비", "소모품비", "운반비", "차량유지비", "보험료", "세금과공과", "이자비용", "수수료", "기타"]
},
"note": "출금유형 옵션은 비용 계정 기준이므로 입금관리와 다름"
},
{
"id": "step-4",
"name": "체크박스 선택 후 계정과목명 일괄변경",
"description": "테이블 행 선택 후 계정과목명 일괄변경 저장",
"actions": [
{ "type": "click_if_exists", "target": "첫 번째 행 체크박스", "description": "행 선택" },
{ "type": "click_if_exists", "target": "계정과목명 드롭다운", "description": "드롭다운 열기" },
{ "type": "click_if_exists", "target": "매입대금", "description": "매입대금 선택" },
{ "type": "click_if_exists", "target": "저장", "description": "저장 버튼 클릭" }
],
"expect": {
"dialog": "확인 다이얼로그 표시",
"dialogMessage": "1개의 출금 유형을 매입대금(으)로 모두 변경하시겠습니까?",
"toast": "변경 완료 메시지"
},
"checks": [
"API 호출 확인 (PUT /api/v1/withdrawals/batch-update-account)",
"성공 토스트 메시지",
"URL 유지 확인"
]
},
{
"id": "step-4-1",
"name": "⚠️ 필수 검증: 계정과목명 변경 데이터 반영 확인",
"note": "토스트 성공 메시지만으로 PASS 판정 불가. 실제 데이터 변경 확인 필수!",
"description": "저장 후 테이블에서 변경된 출금유형 값 확인",
"expect": {
"tableCell": {
"row": 1,
"column": "출금유형",
"value": "매입대금"
}
},
"checks": [
"선택한 행의 출금유형 컬럼 값 확인",
"변경 전 값과 비교 (예: 미설정 → 매입대금)",
"페이지 새로고침 후에도 변경된 값 유지 확인",
"API 응답과 UI 표시값 일치 확인"
],
"knownBugReference": "BUG-DEPOSIT-20260115-001 (입금관리 동일 버그 확인 필요)"
},
{
"id": "step-5",
"name": "출금 상세 페이지 이동",
"description": "테이블 행 클릭하여 상세 페이지로 이동",
"actions": [
{ "type": "click_if_exists", "target": "테이블 첫 번째 행", "description": "행 클릭 (체크박스 제외 영역)" }
],
"expect": {
"url": "/accounting/withdrawals/{id}",
"visible": ["출금 상세", "기본 정보", "목록", "삭제", "수정"]
}
},
{
"id": "step-6",
"name": "상세 페이지 읽기 모드 필드 확인",
"description": "수정 전 필드들이 비활성화 상태인지 확인",
"expect": {
"fields": [
{ "name": "출금일", "disabled": true },
{ "name": "출금계좌", "disabled": true },
{ "name": "받는분", "disabled": true },
{ "name": "출금금액", "disabled": true },
{ "name": "적요", "disabled": true },
{ "name": "거래처", "disabled": true },
{ "name": "출금 유형", "disabled": true }
]
}
},
{
"id": "step-7",
"name": "수정 모드 전환",
"description": "수정 버튼 클릭하여 편집 모드로 전환",
"click": "수정",
"expect": {
"url": "/accounting/withdrawals/{id}?mode=edit",
"visible": ["출금 수정", "취소", "저장"],
"notVisible": ["목록", "삭제", "수정"]
}
},
{
"id": "step-8",
"name": "수정 모드 필드 활성화 검증",
"description": "수정 가능한 필드와 불가능한 필드 확인",
"expect": {
"fields": [
{ "name": "출금일", "disabled": true, "note": "은행데이터 - 수정 불가" },
{ "name": "출금계좌", "disabled": true, "note": "은행데이터 - 수정 불가" },
{ "name": "받는분", "disabled": true, "note": "은행데이터 - 수정 불가" },
{ "name": "출금금액", "disabled": true, "note": "은행데이터 - 수정 불가" },
{ "name": "적요", "disabled": false, "editable": true },
{ "name": "거래처", "disabled": false, "type": "combobox", "editable": true },
{ "name": "출금 유형", "disabled": false, "type": "combobox", "editable": true }
]
}
},
{
"id": "step-9",
"name": "거래처 드롭다운 옵션 확인",
"description": "거래처 선택 드롭다운 옵션 검증",
"actions": [
{ "type": "click_if_exists", "target": "거래처 드롭다운", "description": "드롭다운 열기" }
],
"expect": {
"options": ["거래처테스트", "아크더레드", "코브라브릿지", "가우스전자", "아크아크"],
"note": "거래처 옵션은 시스템 공통 데이터"
}
},
{
"id": "step-10",
"name": "출금 유형 드롭다운 옵션 확인",
"description": "출금 유형 선택 드롭다운 옵션 검증",
"actions": [
{ "type": "click_if_exists", "target": "출금 유형 드롭다운", "description": "드롭다운 열기" }
],
"expect": {
"options": ["미설정", "매입대금", "급여", "임차료", "수도광열비", "통신비", "소모품비", "운반비", "차량유지비", "보험료", "세금과공과", "이자비용", "수수료", "기타"]
}
},
{
"id": "step-11",
"name": "수정 데이터 입력",
"description": "수정 가능한 필드에 테스트 데이터 입력",
"form": {
"fields": [
{ "name": "적요", "type": "text", "value": "테스트 적요 수정" }
]
},
"actions": [
{ "type": "click_if_exists", "target": "거래처 드롭다운", "description": "거래처 드롭다운 열기" },
{ "type": "click_if_exists", "target": "거래처테스트", "description": "거래처 선택" },
{ "type": "click_if_exists", "target": "출금 유형 드롭다운", "description": "출금 유형 드롭다운 열기" },
{ "type": "click_if_exists", "target": "매입대금", "description": "매입대금 선택" }
]
},
{
"id": "step-12",
"name": "저장 및 결과 확인",
"description": "저장 버튼 클릭 후 데이터 반영 확인",
"click": "저장",
"expect": {
"toast": "저장 완료 메시지",
"url": "/accounting/withdrawals/{id}",
"mode": "view"
},
"checks": [
"API 호출 확인 (PUT /api/v1/withdrawals/{id})",
"성공 토스트 메시지",
"URL 유지 확인 (에러 페이지 이동 금지)"
]
},
{
"id": "step-12-1",
"name": "⚠️ 필수 검증: 수정 데이터 반영 확인",
"note": "토스트 성공 메시지만으로 PASS 판정 불가. 실제 데이터 변경 확인 필수!",
"description": "저장 후 상세 페이지에서 변경된 값 확인",
"expect": {
"fields": [
{ "name": "적요", "value": "테스트 적요 수정" },
{ "name": "거래처", "value": "거래처테스트" },
{ "name": "출금 유형", "value": "매입대금" }
]
}
},
{
"id": "step-13",
"name": "취소 버튼 동작 확인",
"description": "수정 모드에서 취소 버튼 동작 검증",
"actions": [
{ "type": "click_if_exists", "target": "수정", "description": "수정 모드 진입" },
{ "type": "click_if_exists", "target": "취소", "description": "취소 버튼 클릭" }
],
"expect": {
"url": "/accounting/withdrawals/{id}",
"mode": "view",
"visible": ["출금 상세", "목록", "삭제", "수정"]
}
},
{
"id": "step-14",
"name": "목록 버튼 동작 확인",
"description": "목록 버튼 클릭하여 목록 페이지로 이동",
"click": "목록",
"expect": {
"url": "/accounting/withdrawals",
"visible": ["출금관리", "총 출금"]
}
},
{
"id": "step-15",
"name": "필터 드롭다운 검증",
"description": "목록 페이지 필터 드롭다운 옵션 확인",
"note": "3개의 필터 드롭다운 존재 (거래처, 출금유형, 정렬)",
"expect": {
"filters": [
{ "name": "거래처 필터", "default": "전체" },
{ "name": "출금유형 필터", "default": "전체" },
{ "name": "정렬", "default": "최신순", "options": ["최신순", "등록순", "금액 높은순", "금액 낮은순"] }
]
}
},
{
"id": "step-16",
"name": "날짜 필터 검증",
"description": "날짜 필터 버튼 동작 확인",
"actions": [
{ "type": "click_if_exists", "target": "당해년도", "description": "당해년도 버튼 클릭" }
],
"expect": {
"dateRange": {
"start": "2026-01-01",
"end": "2026-12-31"
}
}
},
{
"id": "step-17",
"name": "페이지네이션 동작 확인",
"description": "페이지네이션 버튼 동작 검증 (데이터 존재 시)",
"condition": "데이터가 20건 이상인 경우에만 실행",
"expect": {
"pagination": {
"itemsPerPage": 20,
"currentPage": 1
}
},
"actions": [
{ "type": "click_if_exists", "target": "다음", "description": "다음 페이지로 이동" }
],
"expectAfterAction": {
"currentPage": 2
}
}
],
"skipTests": [
{
"id": "delete-button",
"name": "삭제 버튼 테스트",
"reason": "사용자 요청에 따라 테스트 제외"
}
],
"knownBugs": [
{
"id": "BUG-DEPOSIT-20260115-001",
"description": "계정과목명 일괄변경 시 API 오류 발생 (입금관리)",
"errorMessage": "존재하지 않는 URI 또는 데이터",
"relatedSteps": ["step-4-1"],
"note": "출금관리에서도 동일한 버그가 존재할 수 있으므로 step-4-1에서 검증 필수"
},
{
"id": "BUG-SALES-20260115-001",
"description": "계정과목명 일괄변경 시 토스트 성공 표시되나 실제 데이터 미변경 (매출관리)",
"relatedSteps": ["step-4-1"],
"note": "유사한 UI 패턴이므로 동일 버그 가능성 있음"
}
],
"criticalValidationChecklist": [
{
"id": 1,
"name": "파일 다운로드 검증",
"trigger": "다운로드, Export 버튼 발견 시",
"checks": ["Network API 호출", "실제 파일 다운로드"],
"note": "Console LOG만으로 PASS 판정 금지"
},
{
"id": 2,
"name": "등록/저장 버튼 검증",
"trigger": "등록, 저장, 제출 버튼 클릭 시",
"checks": ["URL 유지 확인", "에러 페이지 없음", "성공 토스트"],
"note": "에러 페이지 이동 감지 필수"
},
{
"id": 3,
"name": "일괄변경 데이터 반영 검증",
"trigger": "계정과목명 저장 후",
"checks": ["테이블 데이터 변경 확인", "새로고침 후 유지 확인"],
"note": "토스트만 확인하면 불충분"
},
{
"id": 4,
"name": "목업 페이지 감지",
"trigger": "페이지 로드 시",
"checks": ["입력 필드 존재", "동작하는 버튼 존재", "API 호출 여부"],
"note": "버튼만 있고 동작 안하면 목업"
}
],
"testData": {
"sampleWithdrawal": {
"date": "2025-12-28",
"account": "운영계좌",
"recipient": "홍길동",
"amount": "1,500,000",
"vendor": "",
"description": "급여 지급",
"withdrawalType": "미설정"
},
"modifiedData": {
"description": "테스트 적요 수정",
"vendor": "거래처테스트",
"withdrawalType": "매입대금"
}
},
"pageStructure": {
"listPage": {
"url": "/accounting/withdrawals",
"title": "출금관리",
"statistics": ["총 출금", "당월 출금", "거래처 미설정", "출금유형 미설정"],
"tableColumns": ["checkbox", "출금일", "출금계좌", "받는분", "출금금액", "거래처", "적요", "출금유형", "action"],
"batchUpdate": {
"label": "계정과목명",
"saveButton": "저장"
},
"filters": ["거래처", "출금유형", "정렬"],
"dateFilters": ["당해년도", "전전월", "전월", "당월", "어제", "오늘"]
},
"detailPage": {
"url": "/accounting/withdrawals/{id}",
"title": "출금 상세",
"buttons": ["목록", "삭제", "수정"],
"fields": {
"readOnly": ["출금일", "출금계좌", "받는분", "출금금액"],
"editable": ["적요", "거래처", "출금 유형"]
}
},
"editPage": {
"url": "/accounting/withdrawals/{id}?mode=edit",
"title": "출금 수정",
"buttons": ["취소", "저장"]
}
},
"dropdownOptions": {
"accountSubject": {
"label": "계정과목명",
"options": ["미설정", "매입대금", "급여", "임차료", "수도광열비", "통신비", "소모품비", "운반비", "차량유지비", "보험료", "세금과공과", "이자비용", "수수료", "기타"],
"note": "출금유형은 비용 계정 기준 (입금유형과 다름)"
},
"withdrawalType": {
"label": "출금 유형",
"options": ["미설정", "매입대금", "급여", "임차료", "수도광열비", "통신비", "소모품비", "운반비", "차량유지비", "보험료", "세금과공과", "이자비용", "수수료", "기타"]
},
"vendor": {
"label": "거래처",
"options": ["거래처테스트", "아크더레드", "코브라브릿지", "가우스전자", "아크아크"]
},
"sortOrder": {
"label": "정렬",
"options": ["최신순", "등록순", "금액 높은순", "금액 낮은순"]
}
},
"comparisonWithDeposit": {
"differences": [
{
"field": "계정과목/유형 옵션",
"deposit": "매출대금, 선수금, 가수금, 임대수익, 이자수익, 보증금 반환, 차입금, 자본금, 부가세 환급, 기타 (수입 계정)",
"withdrawal": "매입대금, 급여, 임차료, 수도광열비, 통신비, 소모품비, 운반비, 차량유지비, 보험료, 세금과공과, 이자비용, 수수료, 기타 (비용 계정)"
},
{
"field": "테이블 컬럼명",
"deposit": "입금일, 입금계좌, 입금자명, 입금금액, 입금유형",
"withdrawal": "출금일, 출금계좌, 받는분, 출금금액, 출금유형"
},
{
"field": "통계 카드",
"deposit": "총 입금, 당월 입금, 입금유형 미설정",
"withdrawal": "총 출금, 당월 출금, 출금유형 미설정"
}
],
"similarities": [
"페이지 구조 (목록 → 상세 → 수정)",
"계정과목명 일괄변경 기능",
"거래처 드롭다운 옵션 (공통 데이터)",
"날짜 필터 버튼 (당해년도, 전전월, 전월, 당월, 어제, 오늘)",
"정렬 옵션 (최신순, 등록순, 금액 높은순, 금액 낮은순)",
"은행 데이터 필드 수정 불가 (날짜, 계좌, 금액 등)"
]
},
"assertions": [
{
"type": "url",
"expected": "/accounting/withdrawals",
"message": "목록 페이지 URL 확인"
},
{
"type": "text",
"target": "body",
"expected": "출금관리",
"message": "페이지 타이틀 확인"
}
]
}