2026-01-30 10:50:38 +09:00
|
|
|
{
|
|
|
|
|
"id": "daily-report",
|
|
|
|
|
"name": "일일리포트 테스트",
|
|
|
|
|
"screenshotPolicy": {
|
|
|
|
|
"onErrorOnly": true,
|
|
|
|
|
"captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
|
|
|
|
|
},
|
|
|
|
|
"description": "회계관리 > 일일리포트 메뉴의 날짜 선택, 테이블 데이터 표시, 새로고침, 엑셀 다운로드 기능 테스트",
|
|
|
|
|
"baseUrl": "https://dev.codebridge-x.com",
|
|
|
|
|
"url": "/ko/accounting/daily-report",
|
2026-01-30 21:47:29 +09:00
|
|
|
"navigation": {
|
|
|
|
|
"targetUrl": "/accounting/daily-report",
|
|
|
|
|
"urlPattern": "/accounting/daily-report|/ko/accounting/daily-report",
|
|
|
|
|
"menuHints": ["일일 일보", "일일리포트", "일일보고", "회계관리"]
|
|
|
|
|
},
|
2026-01-30 10:50:38 +09:00
|
|
|
"menuNavigation": {
|
|
|
|
|
"level1": "회계관리",
|
|
|
|
|
"level2": "일일 일보",
|
|
|
|
|
"expectedUrl": "/ko/accounting/daily-report"
|
|
|
|
|
},
|
|
|
|
|
"menuNavigationEnhanced": {
|
|
|
|
|
"strategy": "scroll-and-search",
|
|
|
|
|
"description": "사이드바를 스크롤하며 메뉴를 찾고 클릭하여 404를 방지",
|
|
|
|
|
"level1": "회계관리",
|
|
|
|
|
"level2": "일일 일보",
|
|
|
|
|
"alternativeLevel1Names": ["회계관리", "회계 관리", "Accounting"],
|
|
|
|
|
"alternativeLevel2Names": ["일일 일보", "일일리포트", "일일 리포트", "Daily Report"],
|
|
|
|
|
"scrollConfig": {
|
|
|
|
|
"sidebarSelector": "nav, aside, [role='navigation'], .sidebar, #sidebar",
|
|
|
|
|
"menuItemSelector": "a, button, [role='menuitem'], [role='treeitem']",
|
|
|
|
|
"scrollStep": 200,
|
|
|
|
|
"maxScrollAttempts": 10,
|
|
|
|
|
"scrollDelay": 300
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"testFocus": {
|
|
|
|
|
"primary": "날짜별 데이터 조회 및 테이블 표시 검증",
|
|
|
|
|
"description": "날짜 선택, 어음 및 외상매출채권 테이블, 일자별 상세 테이블(KRW/USD 분리), 매칭 상태, 합계 검증"
|
|
|
|
|
},
|
|
|
|
|
"prerequisites": {
|
|
|
|
|
"authentication": true,
|
|
|
|
|
"testData": {
|
|
|
|
|
"testDate": "2026-01-10",
|
|
|
|
|
"todayDate": "2026-01-15"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"expectedAPIs": [
|
|
|
|
|
{
|
|
|
|
|
"method": "GET",
|
|
|
|
|
"endpoint": "/api/v1/daily-report/note-receivables",
|
|
|
|
|
"params": "date=YYYY-MM-DD",
|
|
|
|
|
"description": "어음 및 외상매출채권 데이터 조회"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"method": "GET",
|
|
|
|
|
"endpoint": "/api/v1/daily-report/daily-accounts",
|
|
|
|
|
"params": "date=YYYY-MM-DD",
|
|
|
|
|
"description": "일자별 계좌 상세 데이터 조회"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"method": "GET",
|
|
|
|
|
"endpoint": "/api/v1/daily-report/summary",
|
|
|
|
|
"params": "date=YYYY-MM-DD",
|
|
|
|
|
"description": "일일리포트 요약 데이터 조회"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"method": "GET",
|
|
|
|
|
"endpoint": "/api/v1/daily-report/export",
|
|
|
|
|
"params": "date=YYYY-MM-DD",
|
|
|
|
|
"description": "엑셀 다운로드"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"steps": [
|
|
|
|
|
{
|
|
|
|
|
"id": "step-0",
|
2026-01-30 16:26:52 +09:00
|
|
|
"name": "사이드바 메뉴 전체 펼치기",
|
|
|
|
|
"description": "모두 펼치기 버튼을 클릭하여 전체 메뉴를 펼친 후 메뉴 탐색 준비",
|
2026-01-30 10:50:38 +09:00
|
|
|
"actions": [
|
|
|
|
|
{ "type": "scroll", "target": "sidebar", "direction": "top", "description": "사이드바 최상단으로 스크롤" },
|
2026-01-30 16:26:52 +09:00
|
|
|
{ "type": "wait", "duration": 300 },
|
|
|
|
|
{ "type": "evaluate", "script": "Array.from(document.querySelectorAll('button')).find(b => b.innerText?.includes('모두 펼치기'))?.click()" },
|
|
|
|
|
{ "type": "wait", "duration": 2000 }
|
2026-01-30 10:50:38 +09:00
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-1",
|
|
|
|
|
"name": "2단계 메뉴 진입: 회계관리 > 일일리포트",
|
|
|
|
|
"description": "사이드바를 스크롤하며 회계관리 > 일일리포트 메뉴를 찾아 클릭",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "scrollAndFind",
|
|
|
|
|
"target": "회계관리",
|
|
|
|
|
"alternativeTexts": ["회계관리", "회계 관리", "Accounting"],
|
|
|
|
|
"scrollContainer": "sidebar",
|
|
|
|
|
"maxAttempts": 10,
|
|
|
|
|
"description": "스크롤하며 회계관리 메뉴 찾기"
|
|
|
|
|
},
|
|
|
|
|
{ "type": "click", "target": "회계관리", "description": "회계관리 메뉴 클릭" },
|
|
|
|
|
{ "type": "wait", "duration": 500, "description": "서브메뉴 펼쳐지기 대기" },
|
|
|
|
|
{
|
|
|
|
|
"type": "scrollAndFind",
|
|
|
|
|
"target": "일일리포트",
|
|
|
|
|
"alternativeTexts": ["일일리포트", "일일 리포트", "Daily Report"],
|
|
|
|
|
"scrollContainer": "submenu",
|
|
|
|
|
"maxAttempts": 5,
|
|
|
|
|
"description": "서브메뉴에서 일일리포트 찾기"
|
|
|
|
|
},
|
|
|
|
|
{ "type": "click", "target": "일일리포트", "description": "일일리포트 메뉴 클릭" },
|
|
|
|
|
{ "type": "wait", "target": "페이지 로드 완료", "timeout": 10000 }
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"url": "/ko/accounting/daily-report",
|
|
|
|
|
"pageTitle": "일일리포트",
|
|
|
|
|
"elements": ["페이지 타이틀", "날짜 선택", "테이블"],
|
|
|
|
|
"authenticated": true
|
|
|
|
|
},
|
|
|
|
|
"verification": [
|
|
|
|
|
"회계관리 메뉴가 펼쳐졌는지 확인",
|
|
|
|
|
"일일리포트 서브메뉴 클릭 성공",
|
|
|
|
|
"404 에러 없이 페이지 로드 완료"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-2",
|
|
|
|
|
"name": "페이지 구조 확인",
|
|
|
|
|
"description": "날짜 선택, 버튼, 테이블 구조 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "페이지 구조"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"datePicker": "조회 일자 입력 필드",
|
|
|
|
|
"buttons": ["새로고침", "엑셀 다운로드"],
|
|
|
|
|
"tables": ["어음 및 외상매출채권현황", "일자별 상세"]
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-3",
|
|
|
|
|
"name": "날짜 선택 필드 기본값 확인",
|
|
|
|
|
"description": "날짜 입력 필드의 기본값이 오늘 날짜인지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "date input value"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"dateValue": "2026-01-15",
|
|
|
|
|
"dateFormat": "YYYY-MM-DD"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-4",
|
|
|
|
|
"name": "페이지 타이틀 날짜 표시 확인",
|
|
|
|
|
"description": "페이지 타이틀에 선택된 날짜와 요일이 표시되는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "title date format"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"titleFormat": "2026년 1월 15일 수요일",
|
|
|
|
|
"includesDayOfWeek": true
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-5",
|
|
|
|
|
"name": "어음 및 외상매출채권현황 테이블 구조 확인",
|
|
|
|
|
"description": "첫 번째 테이블의 컬럼 헤더 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "note receivables table columns"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"tableTitle": "어음 및 외상매출채권현황",
|
|
|
|
|
"columns": ["내용", "현재 잔액", "발행일", "만기일"]
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-6",
|
|
|
|
|
"name": "어음 및 외상매출채권 데이터 로드 확인",
|
|
|
|
|
"description": "테이블에 데이터가 표시되는지 확인 (또는 '데이터가 없습니다' 메시지)",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "table data or empty message"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"dataExists": "데이터 행 존재 또는 '데이터가 없습니다' 메시지",
|
|
|
|
|
"apiCalled": "GET /api/v1/daily-report/note-receivables"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-7",
|
|
|
|
|
"name": "어음 및 외상매출채권 합계 확인",
|
|
|
|
|
"description": "테이블 하단의 합계 행이 표시되는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "table footer total"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"footerExists": true,
|
|
|
|
|
"footerLabel": "합계",
|
|
|
|
|
"totalCalculation": "현재 잔액 합계 표시"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-8",
|
|
|
|
|
"name": "일자별 상세 테이블 구조 확인",
|
|
|
|
|
"description": "두 번째 테이블의 컬럼 헤더 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "daily accounts table columns"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"tableTitle": "일자별 상세",
|
|
|
|
|
"columns": ["구분", "상태", "전월 이월", "수입", "지출", "잔액"]
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-9",
|
|
|
|
|
"name": "일자별 상세 데이터 로드 확인",
|
|
|
|
|
"description": "테이블에 데이터가 표시되는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "daily accounts data"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"dataExists": "데이터 행 존재 또는 '데이터가 없습니다' 메시지",
|
|
|
|
|
"apiCalled": "GET /api/v1/daily-report/daily-accounts"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-10",
|
|
|
|
|
"name": "KRW 계좌 데이터 확인",
|
|
|
|
|
"description": "원화(KRW) 계좌 데이터가 표시되는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "KRW accounts"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"krwAccountsExist": true,
|
|
|
|
|
"currencyType": "KRW"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-11",
|
|
|
|
|
"name": "USD 계좌 데이터 확인",
|
|
|
|
|
"description": "외화(USD) 계좌 데이터가 별도로 표시되는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "USD accounts"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"usdAccountsExist": "USD 계좌 존재 또는 없음",
|
|
|
|
|
"currencyType": "USD"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-12",
|
|
|
|
|
"name": "매칭 상태 Badge 확인",
|
|
|
|
|
"description": "상태 컬럼의 매칭/비매칭 Badge가 표시되는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "match status badges"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"badgeTypes": ["매칭", "비매칭"],
|
|
|
|
|
"matchedStyle": "green background",
|
|
|
|
|
"unmatchedStyle": "orange background"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-13",
|
|
|
|
|
"name": "외화원(USD) 합계 행 확인",
|
|
|
|
|
"description": "일자별 상세 테이블의 첫 번째 합계 행 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "USD total row"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"footerLabel": "외화원 (USD) 합계",
|
|
|
|
|
"totalCalculation": "USD 계좌 합계 표시"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-14",
|
|
|
|
|
"name": "현금성 자산 합계 행 확인",
|
|
|
|
|
"description": "일자별 상세 테이블의 두 번째 합계 행 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "cash asset total row"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"footerLabel": "현금성 자산 합계",
|
|
|
|
|
"totalCalculation": "전체 현금성 자산 합계 표시"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-15",
|
|
|
|
|
"name": "로딩 상태 확인 - 어음 테이블",
|
|
|
|
|
"description": "데이터 로딩 중 어음 테이블에 로딩 스피너가 표시되는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "note receivables loading state"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"loadingSpinner": "Loader2 spinner",
|
|
|
|
|
"loadingMessage": "데이터를 불러오는 중..."
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-16",
|
|
|
|
|
"name": "로딩 상태 확인 - 일자별 상세 테이블",
|
|
|
|
|
"description": "데이터 로딩 중 일자별 상세 테이블에 로딩 스피너가 표시되는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "daily accounts loading state"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"loadingSpinner": "Loader2 spinner",
|
|
|
|
|
"loadingMessage": "데이터를 불러오는 중..."
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-17",
|
|
|
|
|
"name": "날짜 변경 - 과거 날짜 선택",
|
|
|
|
|
"description": "날짜 선택 필드에서 과거 날짜(2026-01-10)로 변경",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "clear",
|
|
|
|
|
"target": "date input"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"type": "type",
|
|
|
|
|
"target": "date input",
|
|
|
|
|
"value": "2026-01-10"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"type": "wait",
|
|
|
|
|
"target": "데이터 로드"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"dateChanged": "2026-01-10",
|
|
|
|
|
"dataReloaded": true
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-18",
|
|
|
|
|
"name": "날짜 변경 후 페이지 타이틀 확인",
|
|
|
|
|
"description": "변경된 날짜가 페이지 타이틀에 반영되는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "title date update"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"titleFormat": "2026년 1월 10일 금요일",
|
|
|
|
|
"dateMatches": "2026-01-10"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-19",
|
|
|
|
|
"name": "날짜 변경 후 데이터 리로드 확인",
|
|
|
|
|
"description": "새로운 날짜에 대한 데이터가 로드되는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "data reload for new date"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"apiCalledWithDate": "2026-01-10",
|
|
|
|
|
"dataUpdated": true
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-20",
|
|
|
|
|
"name": "날짜 변경 후 어음 테이블 데이터 확인",
|
|
|
|
|
"description": "변경된 날짜의 어음 데이터가 표시되는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "note receivables data for 2026-01-10"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"dataForDate": "2026-01-10",
|
|
|
|
|
"tableUpdated": true
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-21",
|
|
|
|
|
"name": "날짜 변경 후 일자별 상세 테이블 데이터 확인",
|
|
|
|
|
"description": "변경된 날짜의 계좌 상세 데이터가 표시되는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "daily accounts data for 2026-01-10"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"dataForDate": "2026-01-10",
|
|
|
|
|
"tableUpdated": true
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-22",
|
|
|
|
|
"name": "날짜를 오늘로 되돌리기",
|
|
|
|
|
"description": "날짜 선택 필드를 다시 오늘 날짜(2026-01-15)로 변경",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "clear",
|
|
|
|
|
"target": "date input"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"type": "type",
|
|
|
|
|
"target": "date input",
|
|
|
|
|
"value": "2026-01-15"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"type": "wait",
|
|
|
|
|
"target": "데이터 로드"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"dateChanged": "2026-01-15",
|
|
|
|
|
"dataReloaded": true
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-23",
|
|
|
|
|
"name": "새로고침 버튼 존재 확인",
|
|
|
|
|
"description": "새로고침 버튼이 표시되는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "refresh button"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"buttonExists": true,
|
|
|
|
|
"buttonText": "새로고침",
|
|
|
|
|
"icon": "RefreshCw"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-24",
|
|
|
|
|
"name": "새로고침 버튼 클릭",
|
|
|
|
|
"description": "새로고침 버튼 클릭하여 데이터 리로드 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "click",
|
|
|
|
|
"target": "새로고침 버튼"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"type": "wait",
|
|
|
|
|
"target": "데이터 리로드"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"buttonClicked": true,
|
|
|
|
|
"loadingStateShown": true,
|
|
|
|
|
"dataReloaded": true
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-25",
|
|
|
|
|
"name": "새로고침 버튼 로딩 상태 확인",
|
|
|
|
|
"description": "새로고침 버튼 클릭 시 버튼이 비활성화되고 로딩 스피너가 표시되는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "refresh button loading state"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"buttonDisabled": true,
|
|
|
|
|
"loadingSpinner": "Loader2 spinner",
|
|
|
|
|
"iconChanged": "RefreshCw → Loader2"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-26",
|
|
|
|
|
"name": "새로고침 후 API 호출 확인",
|
|
|
|
|
"description": "새로고침 버튼 클릭 후 모든 API가 다시 호출되는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "API calls after refresh"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"apiCalls": [
|
|
|
|
|
"GET /api/v1/daily-report/note-receivables",
|
|
|
|
|
"GET /api/v1/daily-report/daily-accounts",
|
|
|
|
|
"GET /api/v1/daily-report/summary"
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-27",
|
|
|
|
|
"name": "새로고침 후 데이터 표시 확인",
|
|
|
|
|
"description": "새로고침 후 두 테이블 모두 데이터가 정상적으로 표시되는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "both tables data after refresh"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"noteReceivablesTableUpdated": true,
|
|
|
|
|
"dailyAccountsTableUpdated": true,
|
|
|
|
|
"noError": "에러 없이 정상 동작"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-28",
|
|
|
|
|
"name": "엑셀 다운로드 버튼 존재 확인",
|
|
|
|
|
"description": "엑셀 다운로드 버튼이 표시되는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "excel download button"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"buttonExists": true,
|
|
|
|
|
"buttonText": "엑셀 다운로드",
|
|
|
|
|
"icon": "Download"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-29",
|
|
|
|
|
"name": "엑셀 다운로드 버튼 클릭 전 Network 상태 확인",
|
|
|
|
|
"description": "다운로드 전 Network Request 기록",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "network state before download"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"networkRecorded": true
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-30",
|
|
|
|
|
"name": "엑셀 다운로드 버튼 클릭",
|
|
|
|
|
"description": "엑셀 다운로드 버튼 클릭 후 다운로드 처리 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "click",
|
|
|
|
|
"target": "엑셀 다운로드 버튼"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"type": "wait",
|
|
|
|
|
"target": "다운로드 처리"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"buttonClicked": true,
|
|
|
|
|
"downloadInitiated": true
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-31",
|
|
|
|
|
"name": "엑셀 다운로드 API 호출 확인",
|
|
|
|
|
"description": "다운로드 버튼 클릭 후 Export API가 호출되는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "export API call"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"apiCall": "GET /api/v1/daily-report/export?date=2026-01-15",
|
|
|
|
|
"apiResponse": "200 OK",
|
|
|
|
|
"contentType": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-32",
|
|
|
|
|
"name": "엑셀 다운로드 이벤트 확인",
|
|
|
|
|
"description": "실제 파일 다운로드 이벤트가 발생하는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "download event"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"downloadEvent": "발생",
|
|
|
|
|
"fileFormat": "xlsx 또는 xls",
|
|
|
|
|
"filenamePattern": "daily_report_*.xlsx"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-33",
|
|
|
|
|
"name": "엑셀 다운로드 성공 토스트 확인",
|
|
|
|
|
"description": "다운로드 성공 시 토스트 메시지가 표시되는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "success toast message"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"toastMessage": "엑셀 다운로드가 완료되었습니다.",
|
|
|
|
|
"toastType": "success"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-34",
|
|
|
|
|
"name": "어음 데이터 내용 형식 확인",
|
|
|
|
|
"description": "어음 테이블의 '내용' 컬럼 형식이 올바른지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "note receivable content format"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"contentFormat": "(수취어음) 거래처명 - 어음번호",
|
|
|
|
|
"exampleFormat": "(수취어음) ABC상사 - N2026-001"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-35",
|
|
|
|
|
"name": "어음 현재 잔액 표시 확인",
|
|
|
|
|
"description": "어음 테이블의 현재 잔액이 올바른 형식으로 표시되는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "current balance format"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"formatType": "통화 형식 (₩1,000,000)",
|
|
|
|
|
"alignment": "right-aligned"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-36",
|
|
|
|
|
"name": "어음 발행일/만기일 형식 확인",
|
|
|
|
|
"description": "날짜 형식이 올바르게 표시되는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "date format in note table"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"dateFormat": "YYYY-MM-DD 또는 YYYY.MM.DD",
|
|
|
|
|
"exampleFormat": "2026-01-15 또는 2026.01.15"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-37",
|
|
|
|
|
"name": "일자별 상세 구분 컬럼 형식 확인",
|
|
|
|
|
"description": "계좌 '구분' 컬럼이 올바른 형식으로 표시되는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "account category format"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"categoryFormat": "은행명 계좌번호 축약",
|
|
|
|
|
"exampleFormat": "국민은행 ***1234"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-38",
|
|
|
|
|
"name": "일자별 상세 금액 컬럼 정렬 확인",
|
|
|
|
|
"description": "전월 이월, 수입, 지출, 잔액 컬럼이 우측 정렬되는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "amount columns alignment"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"alignment": "right-aligned",
|
|
|
|
|
"columns": ["전월 이월", "수입", "지출", "잔액"]
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-39",
|
|
|
|
|
"name": "일자별 상세 금액 형식 확인",
|
|
|
|
|
"description": "금액이 통화 형식으로 표시되는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "amount format"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"formatType": "통화 형식 (₩1,000,000 또는 $1,000.00)",
|
|
|
|
|
"thousandsSeparator": "쉼표(,) 사용"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-40",
|
|
|
|
|
"name": "어음 테이블 빈 데이터 처리 확인",
|
|
|
|
|
"description": "어음 데이터가 없을 때 적절한 메시지가 표시되는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "empty state message for note table"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"emptyMessage": "데이터가 없습니다.",
|
|
|
|
|
"messagePosition": "table center"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-41",
|
|
|
|
|
"name": "일자별 상세 테이블 빈 데이터 처리 확인",
|
|
|
|
|
"description": "계좌 데이터가 없을 때 적절한 메시지가 표시되는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "empty state message for daily accounts table"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"emptyMessage": "데이터가 없습니다.",
|
|
|
|
|
"messagePosition": "table center"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-42",
|
|
|
|
|
"name": "매칭 상태 필터링 확인",
|
|
|
|
|
"description": "매칭/비매칭 상태에 따라 데이터가 올바르게 분류되는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "match status filtering"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"matchedItems": "매칭 Badge 표시",
|
|
|
|
|
"unmatchedItems": "비매칭 Badge 표시",
|
|
|
|
|
"correctColors": "매칭=green, 비매칭=orange"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-43",
|
|
|
|
|
"name": "KRW/USD 계좌 분리 확인",
|
|
|
|
|
"description": "원화와 외화 계좌가 올바르게 분리되어 표시되는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "currency separation"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"krwAccountsFirst": "KRW 계좌 먼저 표시",
|
|
|
|
|
"usdAccountsAfter": "USD 계좌 나중에 표시",
|
|
|
|
|
"separateGroups": "통화별 그룹화"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-44",
|
|
|
|
|
"name": "외화원(USD) 합계 계산 확인",
|
|
|
|
|
"description": "외화원 합계가 USD 계좌만 합산하는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "USD total calculation"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"includesOnlyUSD": "USD 계좌만 합산",
|
|
|
|
|
"excludesKRW": "KRW 계좌 제외",
|
|
|
|
|
"correctTotal": "USD 계좌 잔액 합계"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-45",
|
|
|
|
|
"name": "현금성 자산 합계 계산 확인",
|
|
|
|
|
"description": "현금성 자산 합계가 전체 계좌를 합산하는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "cash asset total calculation"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"includesAllAccounts": "KRW + USD 계좌 전체 합산",
|
|
|
|
|
"correctTotal": "전체 계좌 잔액 합계"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-46",
|
|
|
|
|
"name": "어음 합계 계산 정확성 확인",
|
|
|
|
|
"description": "어음 테이블 합계가 현재 잔액의 정확한 합계인지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "note receivables total accuracy"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"correctCalculation": "모든 어음 현재 잔액의 합계",
|
|
|
|
|
"matchesData": "개별 행 합계와 일치"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-47",
|
|
|
|
|
"name": "페이지 반응형 동작 확인",
|
|
|
|
|
"description": "브라우저 크기 조절 시 테이블이 올바르게 표시되는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "responsive behavior"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"tableScrollable": "테이블 스크롤 가능",
|
|
|
|
|
"layoutPreserved": "레이아웃 유지"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-48",
|
|
|
|
|
"name": "날짜 선택 필드 제약 확인",
|
|
|
|
|
"description": "날짜 입력 필드에 유효하지 않은 날짜를 입력할 수 없는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "date input validation"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"inputType": "date",
|
|
|
|
|
"validationExists": "브라우저 기본 날짜 검증"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-49",
|
|
|
|
|
"name": "콘솔 에러 확인",
|
|
|
|
|
"description": "페이지 동작 중 콘솔에 에러가 발생하지 않는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "verify",
|
|
|
|
|
"target": "console errors"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"noErrors": "콘솔 에러 없음",
|
|
|
|
|
"warningsAcceptable": "경고는 허용"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "step-50",
|
|
|
|
|
"name": "전체 페이지 기능 통합 테스트",
|
|
|
|
|
"description": "날짜 변경, 새로고침, 다운로드를 순차적으로 실행하여 모든 기능이 정상 동작하는지 확인",
|
|
|
|
|
"actions": [
|
|
|
|
|
{
|
|
|
|
|
"type": "type",
|
|
|
|
|
"target": "date input",
|
|
|
|
|
"value": "2026-01-12"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"type": "wait",
|
|
|
|
|
"target": "데이터 로드"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"type": "click",
|
|
|
|
|
"target": "새로고침 버튼"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"type": "wait",
|
|
|
|
|
"target": "데이터 리로드"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"type": "click",
|
|
|
|
|
"target": "엑셀 다운로드 버튼"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"type": "wait",
|
|
|
|
|
"target": "다운로드 완료"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"expected": {
|
|
|
|
|
"allFunctionsWork": "모든 기능 정상 동작",
|
|
|
|
|
"dataConsistency": "데이터 일관성 유지",
|
|
|
|
|
"noErrors": "에러 없이 완료"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"cleanup": {
|
|
|
|
|
"description": "테스트 후 날짜를 오늘로 복원 (필요시)",
|
|
|
|
|
"actions": []
|
|
|
|
|
},
|
|
|
|
|
"notes": [
|
|
|
|
|
"날짜 선택에 따른 데이터 필터링 정상 동작 확인",
|
|
|
|
|
"두 개의 테이블(어음, 일자별 상세) 모두 데이터 표시 확인",
|
|
|
|
|
"KRW/USD 계좌 분리 및 합계 계산 정확성 확인",
|
|
|
|
|
"매칭/비매칭 상태 Badge 표시 확인",
|
|
|
|
|
"새로고침 버튼 동작 및 로딩 상태 확인",
|
|
|
|
|
"엑셀 다운로드는 Network Request 및 실제 다운로드 이벤트 확인 필수",
|
|
|
|
|
"모든 금액 표시 형식 및 정렬 확인",
|
|
|
|
|
"빈 데이터 처리 및 로딩 상태 표시 확인"
|
|
|
|
|
]
|
|
|
|
|
}
|