From aa078458a462b20a3945be3ce7ecee78d741ee02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Wed, 4 Feb 2026 21:59:56 +0900 Subject: [PATCH] =?UTF-8?q?chore:=20=EB=AF=B8=EA=B5=AC=ED=98=84=20?= =?UTF-8?q?=EB=A9=94=EB=89=B4=20=EC=8B=9C=EB=82=98=EB=A6=AC=EC=98=A4=206?= =?UTF-8?q?=EA=B1=B4=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - accounting-cost (원가관리): 사이드바 메뉴 미존재 - accounting-financial (재무제표): 사이드바 메뉴 미존재 - inspection-management (검사관리): 사이드바 메뉴 미존재 - vehicle-management (차량관리): 1차 메뉴 미존재 - comprehensive-analysis (종합분석): 리포트 메뉴 미존재 - report-analysis (종합분석): 리포트 메뉴 미존재 Co-Authored-By: Claude Opus 4.5 --- accounting-cost.json | 212 --------------------- accounting-financial.json | 212 --------------------- approval-box.json | 13 +- attendance-checkin.json | 17 +- attendance-management.json | 14 +- company-info.json | 11 ++ comprehensive-analysis.json | 259 ------------------------- department-add.json | 14 +- deposit-management.json | 14 +- draft-box.json | 8 +- employee-register.json | 14 +- free-board.json | 8 +- inspection-management.json | 360 ----------------------------------- inventory-status.json | 14 +- item-management.json | 12 +- item-master.json | 4 +- payment-history.json | 11 ++ permission-management.json | 8 +- popup-management.json | 8 +- price-management.json | 14 +- quality-certification.json | 4 +- rank-management.json | 8 +- receiving-management.json | 14 +- reference-box.json | 12 +- report-analysis.json | 178 ----------------- salary-management.json | 14 +- sales-management.json | 4 +- subscription-management.json | 14 +- vacation-management.json | 14 +- vehicle-management.json | 259 ------------------------- vendor-ledger.json | 4 +- vendor-management.json | 4 +- withdrawal-management.json | 14 +- 33 files changed, 178 insertions(+), 1592 deletions(-) delete mode 100644 accounting-cost.json delete mode 100644 accounting-financial.json delete mode 100644 comprehensive-analysis.json delete mode 100644 inspection-management.json delete mode 100644 report-analysis.json delete mode 100644 vehicle-management.json diff --git a/accounting-cost.json b/accounting-cost.json deleted file mode 100644 index d73ae93..0000000 --- a/accounting-cost.json +++ /dev/null @@ -1,212 +0,0 @@ -{ - "id": "accounting-cost", - "name": "원가관리 테스트", - "screenshotPolicy": { - "onErrorOnly": true, - "captureOn": ["error", "fail", "timeout", "404", "500", "blocked"] - }, - "description": "회계관리 > 원가관리 메뉴의 원가 분석/조회/필터/다운로드 기능 테스트", - "baseUrl": "https://dev.codebridge-x.com", - "menuNavigation": { - "level1": "회계관리", - "level2": "원가관리", - "expectedUrl": "/accounting/cost-management", - "searchWithinParent": true, - "closeOtherMenus": true - }, - "auth": { - "username": "TestUser5", - "password": "password123!" - }, - "steps": [ - { - "id": 1, - "name": "메뉴 진입: 회계관리 > 원가관리", - "action": "menu_navigate", - "level1": "회계관리", - "level2": "원가관리", - "expected": { - "url_contains": "/accounting", - "visible": ["원가관리", "원가"] - } - }, - { - "id": 2, - "name": "필수 검증 #5: 목업 페이지 감지", - "action": "verify_not_mockup", - "checks": [ - "원가 데이터 표시 또는 조회 폼", - "기간 선택 가능", - "품목/제품 선택 가능" - ], - "expected": "정상 페이지 (목업 아님)" - }, - { - "id": 3, - "name": "원가관리 페이지 구조 확인", - "action": "verify_elements", - "checks": [ - "품목/제품 선택", - "기간 선택 (시작일/종료일)", - "조회 버튼", - "원가 테이블 또는 차트" - ], - "expected": "원가관리 페이지 정상 표시" - }, - { - "id": 4, - "phase": "FILTER", - "name": "[FILTER] 품목/제품 선택", - "action": "click", - "target": "select[name*='item'], select[name*='product'], button:has-text('품목'), input[placeholder*='품목']", - "expected": "품목 선택 옵션 표시" - }, - { - "id": 5, - "phase": "FILTER", - "name": "[FILTER] 기간 - 시작일", - "action": "fill", - "target": "input[type='date']:first-of-type, input[name*='start']", - "value": "2025-01-01", - "expected": "시작일 입력" - }, - { - "id": 6, - "phase": "FILTER", - "name": "[FILTER] 기간 - 종료일", - "action": "fill", - "target": "input[type='date']:last-of-type, input[name*='end']", - "value": "2025-12-31", - "expected": "종료일 입력" - }, - { - "id": 7, - "phase": "FILTER", - "name": "[FILTER] 조회 버튼 클릭", - "action": "click", - "target": "button:has-text('조회'), button:has-text('검색')", - "expected": { - "data_loaded": true, - "api_call": "GET /api/v1/accounting/cost" - } - }, - { - "id": 8, - "phase": "READ", - "name": "[READ] 원가 테이블 구조 확인", - "action": "verify_table", - "checks": [ - "품목명 컬럼", - "재료비 컬럼", - "노무비 컬럼", - "경비 컬럼", - "합계 컬럼" - ], - "expected": "원가 테이블 정상 표시" - }, - { - "id": 9, - "name": "원가 데이터 확인", - "action": "verify_detail", - "checks": [ - "데이터 행 존재 또는 '데이터 없음' 메시지", - "금액 포맷 정상" - ], - "expected": "원가 데이터 표시" - }, - { - "id": 10, - "name": "원가 구성 비율 확인", - "action": "verify_elements", - "checks": [ - "재료비 비율", - "노무비 비율", - "경비 비율" - ], - "expected": "원가 구성 비율 표시" - }, - { - "id": 11, - "name": "원가 차트 확인", - "action": "verify_elements", - "checks": [ - "원가 추이 차트 또는 구성 차트" - ], - "expected": "차트 시각화 표시" - }, - { - "id": 12, - "name": "필수 검증 #1: 엑셀 다운로드", - "action": "click", - "target": "button:has-text('엑셀'), button:has-text('Excel'), button:has-text('다운로드')", - "critical": true, - "verify": { - "api_call": "GET /api/v1/accounting/cost/export", - "file_download": true - }, - "expected": "엑셀 파일 다운로드" - }, - { - "id": 13, - "name": "인쇄 기능 확인", - "action": "verify_elements", - "checks": [ - "인쇄 버튼 존재" - ], - "expected": "인쇄 기능 표시" - }, - { - "id": 14, - "name": "원가율 표시 확인", - "action": "verify_detail", - "checks": [ - "매출원가율 표시", - "목표 원가율 대비 현황" - ], - "expected": "원가율 분석 표시" - }, - { - "id": 15, - "name": "기간별 비교 기능", - "action": "verify_elements", - "checks": [ - "전월/전년 대비 비교 기능" - ], - "expected": "비교 분석 기능 확인" - } - ], - "expectedAPIs": [ - { - "method": "GET", - "endpoint": "/api/v1/accounting/cost", - "description": "원가 데이터 조회" - }, - { - "method": "GET", - "endpoint": "/api/v1/accounting/cost/export", - "description": "원가 데이터 엑셀 다운로드" - }, - { - "method": "GET", - "endpoint": "/api/v1/products", - "description": "품목 목록 조회" - } - ], - "requiredVerifications": [ - { - "id": 1, - "name": "엑셀 다운로드", - "steps": [12], - "criteria": "API 호출 + 파일 다운로드" - }, - { - "id": 5, - "name": "목업 페이지 감지", - "steps": [2], - "criteria": "원가 데이터/조회 폼, 기간 선택, 품목 선택 존재" - } - ], - "rollbackPlan": { - "note": "조회 전용 페이지로 데이터 변경 없음" - } -} diff --git a/accounting-financial.json b/accounting-financial.json deleted file mode 100644 index e0efac7..0000000 --- a/accounting-financial.json +++ /dev/null @@ -1,212 +0,0 @@ -{ - "id": "accounting-financial", - "name": "재무제표 테스트", - "screenshotPolicy": { - "onErrorOnly": true, - "captureOn": ["error", "fail", "timeout", "404", "500", "blocked"] - }, - "description": "회계관리 > 재무제표 메뉴의 재무상태표/손익계산서 조회/기간선택/다운로드 기능 테스트", - "baseUrl": "https://dev.codebridge-x.com", - "menuNavigation": { - "level1": "회계관리", - "level2": "재무제표", - "expectedUrl": "/accounting/financial-statements", - "searchWithinParent": true, - "closeOtherMenus": true - }, - "auth": { - "username": "TestUser5", - "password": "password123!" - }, - "steps": [ - { - "id": 1, - "name": "메뉴 진입: 회계관리 > 재무제표", - "action": "menu_navigate", - "level1": "회계관리", - "level2": "재무제표", - "expected": { - "url_contains": "/accounting", - "visible": ["재무제표"] - } - }, - { - "id": 2, - "name": "필수 검증 #5: 목업 페이지 감지", - "action": "verify_not_mockup", - "checks": [ - "재무제표 영역 표시", - "기간 선택 가능", - "재무상태표 또는 손익계산서 탭" - ], - "expected": "정상 페이지 (목업 아님)" - }, - { - "id": 3, - "name": "재무제표 페이지 구조 확인", - "action": "verify_elements", - "checks": [ - "재무상태표 탭/버튼", - "손익계산서 탭/버튼", - "기간 선택 (연도/분기)", - "조회 버튼" - ], - "expected": "재무제표 페이지 정상 표시" - }, - { - "id": 4, - "phase": "READ", - "name": "[READ] 재무상태표 조회", - "action": "click", - "target": "button:has-text('재무상태표'), [class*='tab']:has-text('재무상태표'), a:has-text('재무상태표')", - "expected": { - "api_call": "GET /api/v1/accounting/financial/balance-sheet" - } - }, - { - "id": 5, - "name": "재무상태표 구조 확인", - "action": "verify_elements", - "checks": [ - "자산 항목 표시", - "부채 항목 표시", - "자본 항목 표시", - "자산총계 = 부채총계 + 자본총계" - ], - "expected": "재무상태표 정상 표시" - }, - { - "id": 6, - "phase": "READ", - "name": "[READ] 손익계산서 조회", - "action": "click", - "target": "button:has-text('손익계산서'), [class*='tab']:has-text('손익계산서'), a:has-text('손익계산서')", - "expected": { - "api_call": "GET /api/v1/accounting/financial/income-statement" - } - }, - { - "id": 7, - "name": "손익계산서 구조 확인", - "action": "verify_elements", - "checks": [ - "매출액 표시", - "매출원가 표시", - "영업이익 표시", - "당기순이익 표시" - ], - "expected": "손익계산서 정상 표시" - }, - { - "id": 8, - "phase": "FILTER", - "name": "[FILTER] 연도 선택", - "action": "click", - "target": "select[name*='year'], [class*='year'], button:has-text('연도')", - "expected": "연도 선택 옵션 표시" - }, - { - "id": 9, - "phase": "FILTER", - "name": "[FILTER] 분기 선택", - "action": "verify_elements", - "checks": [ - "1분기/2분기/3분기/4분기 선택 가능" - ], - "expected": "분기 선택 가능" - }, - { - "id": 10, - "phase": "FILTER", - "name": "[FILTER] 조회 실행", - "action": "click", - "target": "button:has-text('조회'), button:has-text('검색')", - "expected": { - "data_loaded": true - } - }, - { - "id": 11, - "name": "전년 동기 대비 확인", - "action": "verify_elements", - "checks": [ - "전년 동기 대비 증감 표시 여부" - ], - "expected": "비교 분석 기능 확인" - }, - { - "id": 12, - "name": "필수 검증 #1: 엑셀 다운로드", - "action": "click", - "target": "button:has-text('엑셀'), button:has-text('Excel'), button:has-text('다운로드')", - "critical": true, - "verify": { - "api_call": "GET /api/v1/accounting/financial/export", - "file_download": true - }, - "expected": "엑셀 파일 다운로드" - }, - { - "id": 13, - "name": "인쇄 기능 확인", - "action": "verify_elements", - "checks": [ - "인쇄 버튼 존재" - ], - "expected": "인쇄 기능 표시" - }, - { - "id": 14, - "name": "PDF 다운로드 확인", - "action": "verify_elements", - "checks": [ - "PDF 다운로드 버튼 존재 여부" - ], - "expected": "PDF 다운로드 기능 확인" - }, - { - "id": 15, - "name": "금액 포맷 확인", - "action": "verify_detail", - "checks": [ - "원화 포맷 정상 (천원 또는 원 단위)", - "음수 표시 (괄호 또는 마이너스)" - ], - "expected": "금액 표시 정상" - } - ], - "expectedAPIs": [ - { - "method": "GET", - "endpoint": "/api/v1/accounting/financial/balance-sheet", - "description": "재무상태표 조회" - }, - { - "method": "GET", - "endpoint": "/api/v1/accounting/financial/income-statement", - "description": "손익계산서 조회" - }, - { - "method": "GET", - "endpoint": "/api/v1/accounting/financial/export", - "description": "재무제표 엑셀 다운로드" - } - ], - "requiredVerifications": [ - { - "id": 1, - "name": "엑셀 다운로드", - "steps": [12], - "criteria": "API 호출 + 파일 다운로드" - }, - { - "id": 5, - "name": "목업 페이지 감지", - "steps": [2], - "criteria": "재무제표 영역, 기간 선택, 탭 전환 존재" - } - ], - "rollbackPlan": { - "note": "조회 전용 페이지로 데이터 변경 없음" - } -} diff --git a/approval-box.json b/approval-box.json index 1735e8b..41c2979 100644 --- a/approval-box.json +++ b/approval-box.json @@ -1,5 +1,5 @@ { - "scenarioId": "approval-box", + "id": "approval-box", "name": "결재함 E2E 테스트", "screenshotPolicy": { "onErrorOnly": true, @@ -7,6 +7,17 @@ }, "description": "결재함 페이지의 전체 기능을 검증합니다 (탭 전환, 검색, 필터, 승인/반려, 모달)", "baseUrl": "https://dev.codebridge-x.com", + "menuNavigation": { + "level1": "결재관리", + "level2": "결재함", + "expectedUrl": "/ko/approval/inbox", + "searchWithinParent": true, + "closeOtherMenus": true + }, + "auth": { + "username": "TestUser5", + "password": "password123!" + }, "navigation": { "targetUrl": "/approval/inbox", diff --git a/attendance-checkin.json b/attendance-checkin.json index 1aaf604..e3635e5 100644 --- a/attendance-checkin.json +++ b/attendance-checkin.json @@ -14,6 +14,13 @@ "urlPattern": "/hr/attendance|/ko/hr/attendance", "menuHints": ["근태현황", "근태 현황", "출퇴근", "인사관리"] }, + "menuNavigation": { + "level1": "인사관리", + "level2": "근태현황", + "expectedUrl": "/hr/attendance", + "searchWithinParent": true, + "closeOtherMenus": true + }, "menuNavigationEnhanced": { "strategy": "scroll-and-search", "description": "사이드바를 스크롤하며 메뉴를 찾고 클릭하여 404를 방지", @@ -40,13 +47,9 @@ "timeout": 120000, "tags": ["hr", "attendance", "geolocation", "checkin", "checkout"], - "login": { - "url": "https://dev.codebridge-x.com/login", - "credentials": { - "id": "TestUser5", - "password": "password123!" - }, - "successIndicator": "대시보드" + "auth": { + "username": "TestUser5", + "password": "password123!" }, "browserConfig": { diff --git a/attendance-management.json b/attendance-management.json index 7262b1e..5475874 100644 --- a/attendance-management.json +++ b/attendance-management.json @@ -11,7 +11,9 @@ "menuNavigation": { "level1": "인사관리", "level2": "근태관리", - "expectedUrl": "/ko/hr/attendance-management" + "expectedUrl": "/ko/hr/attendance-management", + "searchWithinParent": true, + "closeOtherMenus": true }, "navigation": { "targetUrl": "/hr/attendance-management", @@ -51,13 +53,9 @@ "timeout": 90000, "tags": ["hr", "attendance", "management", "crud"], - "login": { - "url": "https://dev.codebridge-x.com/login", - "credentials": { - "id": "TestUser5", - "password": "password123!" - }, - "successIndicator": "대시보드" + "auth": { + "username": "TestUser5", + "password": "password123!" }, "testData": { diff --git a/company-info.json b/company-info.json index bc026d0..2284ef4 100644 --- a/company-info.json +++ b/company-info.json @@ -13,6 +13,17 @@ "urlPattern": "/company-info|/ko/company-info|/settings/company-info", "menuHints": ["회사정보", "회사 정보", "설정"] }, + "menuNavigation": { + "level1": "설정", + "level2": "회사정보", + "expectedUrl": "/company-info", + "searchWithinParent": true, + "closeOtherMenus": true + }, + "auth": { + "username": "TestUser5", + "password": "password123!" + }, "menuNavigationEnhanced": { "strategy": "scroll-and-search", "description": "사이드바를 스크롤하며 메뉴를 찾고 클릭하여 404를 방지", diff --git a/comprehensive-analysis.json b/comprehensive-analysis.json deleted file mode 100644 index c5ece78..0000000 --- a/comprehensive-analysis.json +++ /dev/null @@ -1,259 +0,0 @@ -{ - "id": "comprehensive-analysis", - "name": "종합분석 테스트", - "screenshotPolicy": { - "onErrorOnly": true, - "captureOn": ["error", "fail", "timeout", "404", "500", "blocked"] - }, - "description": "리포트 > 종합분석 메뉴의 CEO 대시보드 조회 및 필터링 기능 테스트", - "baseUrl": "https://dev.codebridge-x.com", - "menuNavigation": { - "level1": "리포트", - "level2": "종합분석", - "expectedUrl": "/report/comprehensive", - "searchWithinParent": true, - "closeOtherMenus": true - }, - "auth": { - "username": "TestUser5", - "password": "password123!" - }, - "steps": [ - { - "id": 1, - "name": "메뉴 진입: 리포트 > 종합분석", - "action": "menu_navigate", - "level1": "리포트", - "level2": "종합분석", - "expected": { - "url_contains": "/report/comprehensive", - "visible": ["CEO 대시보드", "전사 경영 현황"] - } - }, - { - "id": 2, - "name": "필수 검증 #5: 목업 페이지 감지", - "action": "verify_not_mockup", - "checks": [ - "대시보드 위젯 표시", - "실시간 데이터 표시", - "필터 옵션 존재" - ], - "expected": "정상 페이지 (목업 아님)" - }, - { - "id": 3, - "name": "프로세스 현황 위젯 확인", - "action": "verify_elements", - "checks": [ - "견적 위젯", - "수주 위젯", - "생산 위젯", - "검사 위젯", - "출고예정 위젯", - "출고완료 위젯" - ], - "expected": "프로세스 현황 위젯 표시" - }, - { - "id": 4, - "name": "매출 지표 확인", - "action": "verify_elements", - "checks": [ - "당일 출하매출", - "매출총이익률", - "일일 순손익" - ], - "expected": "매출 지표 표시" - }, - { - "id": 5, - "name": "매출 차트 확인", - "action": "verify_elements", - "checks": [ - "일별 매출 차트", - "월별 매출 차트", - "연간 매출 차트" - ], - "expected": "매출 차트 표시" - }, - { - "id": 6, - "name": "미수금 현황 확인", - "action": "verify_elements", - "checks": [ - "총 미수금", - "연체 금액", - "거래처별 미수금" - ], - "expected": "미수금 현황 표시" - }, - { - "id": 7, - "name": "재고 현황 확인", - "action": "verify_elements", - "checks": [ - "재고 총액", - "재고 회전율", - "재고 부족 품목" - ], - "expected": "재고 현황 표시" - }, - { - "id": 8, - "phase": "FILTER", - "name": "[FILTER] 캘린더 필터 옵션 클릭", - "action": "click", - "target": "button:has-text('필터'), [class*='filter-option'], [class*='calendar-filter']", - "expected": "필터 옵션 열림" - }, - { - "id": 9, - "phase": "FILTER", - "name": "[FILTER] 필터 항목 확인", - "action": "verify_elements", - "checks": [ - "입고 필터", - "출고 필터", - "자재 필터", - "일정 필터", - "휴가 필터", - "출장 필터" - ], - "expected": "필터 항목 표시" - }, - { - "id": 10, - "phase": "FILTER", - "name": "[FILTER] 필터 선택 테스트", - "action": "click", - "target": "label:has-text('입고'), input[value='입고']", - "expected": "필터 선택됨" - }, - { - "id": 11, - "phase": "FILTER", - "name": "[FILTER] 필터 적용 확인", - "action": "verify_detail", - "checks": [ - "선택한 필터에 따른 데이터 표시" - ], - "expected": "필터 동작 확인" - }, - { - "id": 12, - "name": "인력 현황 확인", - "action": "verify_elements", - "checks": [ - "일일 출근율", - "결근 현황", - "지각 현황" - ], - "expected": "인력 현황 표시" - }, - { - "id": 13, - "name": "품질검사 결과 확인", - "action": "verify_elements", - "checks": [ - "품질검사 결과", - "적합률", - "부적합률" - ], - "expected": "품질검사 결과 표시" - }, - { - "id": 14, - "name": "승인 대기 품의서 확인", - "action": "verify_elements", - "checks": [ - "승인 대기 품의서", - "구매품의", - "투자품의" - ], - "expected": "승인 대기 품의서 표시" - }, - { - "id": 15, - "name": "휴가/출장 현황 확인", - "action": "verify_elements", - "checks": [ - "휴가 현황", - "출장 현황", - "부서별 현황" - ], - "expected": "휴가/출장 현황 표시" - }, - { - "id": 16, - "name": "TOP 5 고객 매출 확인", - "action": "verify_elements", - "checks": [ - "TOP 5 고객별 매출 현황" - ], - "expected": "TOP 5 고객 매출 표시" - }, - { - "id": 17, - "name": "일일보고서 버튼 확인", - "action": "verify_elements", - "checks": [ - "일일보고서 버튼 존재" - ], - "expected": "일일보고서 버튼 표시" - }, - { - "id": 18, - "name": "경영분석 버튼 확인", - "action": "verify_elements", - "checks": [ - "경영분석 버튼 존재" - ], - "expected": "경영분석 버튼 표시" - } - ], - "expectedAPIs": [ - { - "method": "GET", - "endpoint": "/api/v1/reports/comprehensive", - "description": "종합분석 데이터 조회" - }, - { - "method": "GET", - "endpoint": "/api/v1/reports/process-status", - "description": "프로세스 현황 조회" - }, - { - "method": "GET", - "endpoint": "/api/v1/reports/sales-summary", - "description": "매출 요약 조회" - }, - { - "method": "GET", - "endpoint": "/api/v1/reports/receivables", - "description": "미수금 현황 조회" - }, - { - "method": "GET", - "endpoint": "/api/v1/reports/inventory", - "description": "재고 현황 조회" - } - ], - "requiredVerifications": [ - { - "id": 3, - "name": "검색/필터", - "steps": [8, 9, 10, 11], - "criteria": "캘린더 필터 동작" - }, - { - "id": 5, - "name": "목업 페이지 감지", - "steps": [2], - "criteria": "대시보드 위젯, 실시간 데이터, 필터 옵션 존재" - } - ], - "rollbackPlan": { - "note": "조회 전용 대시보드로 데이터 변경 없음" - } -} diff --git a/department-add.json b/department-add.json index 58603f3..38c8a53 100644 --- a/department-add.json +++ b/department-add.json @@ -16,7 +16,9 @@ "menuNavigation": { "level1": "인사관리", "level2": "부서관리", - "expectedUrl": "/ko/hr/department-management" + "expectedUrl": "/ko/hr/department-management", + "searchWithinParent": true, + "closeOtherMenus": true }, "menuNavigationEnhanced": { "strategy": "scroll-and-search", @@ -48,13 +50,9 @@ "timeout": 90000, "tags": ["hr", "department", "crud", "random", "hierarchy"], - "login": { - "url": "https://dev.codebridge-x.com/login", - "credentials": { - "id": "TestUser5", - "password": "password123!" - }, - "successIndicator": "대시보드" + "auth": { + "username": "TestUser5", + "password": "password123!" }, "randomData": { diff --git a/deposit-management.json b/deposit-management.json index 862b48f..4ec740f 100644 --- a/deposit-management.json +++ b/deposit-management.json @@ -16,7 +16,9 @@ "menuNavigation": { "level1": "회계관리", "level2": "입금관리", - "expectedUrl": "/ko/accounting/deposits" + "expectedUrl": "/ko/accounting/deposits", + "searchWithinParent": true, + "closeOtherMenus": true }, "menuNavigationEnhanced": { "strategy": "scroll-and-search", @@ -36,13 +38,9 @@ "timeout": 60000, "tags": ["accounting", "deposit", "crud"], - "login": { - "url": "https://dev.codebridge-x.com/login", - "credentials": { - "id": "TestUser5", - "password": "password123!" - }, - "successIndicator": "대시보드" + "auth": { + "username": "TestUser5", + "password": "password123!" }, "steps": [ diff --git a/draft-box.json b/draft-box.json index 52d377b..00b67a2 100644 --- a/draft-box.json +++ b/draft-box.json @@ -19,7 +19,13 @@ "menuNavigation": { "level1": "결재관리", "level2": "기안함", - "expectedUrl": "/ko/approval/draft" + "expectedUrl": "/ko/approval/draft", + "searchWithinParent": true, + "closeOtherMenus": true + }, + "auth": { + "username": "TestUser5", + "password": "password123!" }, "menuNavigationEnhanced": { "strategy": "scroll-and-search", diff --git a/employee-register.json b/employee-register.json index 613dde3..0a322ff 100644 --- a/employee-register.json +++ b/employee-register.json @@ -16,7 +16,9 @@ "menuNavigation": { "level1": "인사관리", "level2": "사원관리", - "expectedUrl": "/ko/hr/employee-management" + "expectedUrl": "/ko/hr/employee-management", + "searchWithinParent": true, + "closeOtherMenus": true }, "menuNavigationEnhanced": { "strategy": "scroll-and-search", @@ -36,13 +38,9 @@ "timeout": 60000, "tags": ["hr", "employee", "crud"], - "login": { - "url": "https://dev.codebridge-x.com/login", - "credentials": { - "id": "TestUser5", - "password": "password123!" - }, - "successIndicator": "대시보드" + "auth": { + "username": "TestUser5", + "password": "password123!" }, "steps": [ diff --git a/free-board.json b/free-board.json index cdd883b..d23461b 100644 --- a/free-board.json +++ b/free-board.json @@ -15,7 +15,13 @@ "menuNavigation": { "level1": "게시판", "level2": "자유게시판", - "expectedUrl": "/ko/boards/free" + "expectedUrl": "/ko/boards/free", + "searchWithinParent": true, + "closeOtherMenus": true + }, + "auth": { + "username": "TestUser5", + "password": "password123!" }, "menuNavigationEnhanced": { "strategy": "scroll-and-search", diff --git a/inspection-management.json b/inspection-management.json deleted file mode 100644 index 7238c26..0000000 --- a/inspection-management.json +++ /dev/null @@ -1,360 +0,0 @@ -{ - "id": "inspection-management", - "name": "검사관리 테스트", - "screenshotPolicy": { - "onErrorOnly": true, - "captureOn": ["error", "fail", "timeout", "404", "500", "blocked"] - }, - "description": "품질관리 > 검사관리 페이지의 검사 등록/조회/수정/삭제 기능을 테스트하는 E2E 테스트", - "baseUrl": "https://dev.codebridge-x.com", - "url": "/quality/inspection", - "navigation": { - "targetUrl": "/quality/inspections", - "urlPattern": "/quality/inspections|/ko/quality/inspections|/quality/inspection", - "menuHints": ["검사관리", "검사 관리", "품질관리"] - }, - "menuNavigation": { - "level1": "품질관리", - "level2": "검사관리", - "expectedUrl": "/quality/inspection", - "searchWithinParent": true, - "closeOtherMenus": true - }, - "menuNavigationEnhanced": { - "strategy": "scroll-and-search", - "sidebar": { - "scrollContainer": ".sidebar-scroll", - "scrollStep": 200, - "maxScrollAttempts": 5, - "waitAfterScroll": 300 - }, - "level1": { - "text": "품질관리", - "expandable": true, - "waitAfterClick": 500 - }, - "level2": { - "text": "검사관리", - "waitAfterClick": 300 - }, - "fallbackUrl": "/quality/inspection", - "expectedUrl": "/quality/inspection" - }, - "timeout": 90000, - "tags": ["quality", "inspection", "crud"], - - "login": { - "url": "https://dev.codebridge-x.com/login", - "credentials": { - "id": "TestUser5", - "password": "password123!" - }, - "successIndicator": "대시보드" - }, - - "testData": { - "inspection": { - "quantity": "100", - "worker": "홍킬동", - "note": "E2E 테스트 특이사항", - "height": "50.5", - "length": "120.3" - } - }, - - "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": "품질관리 > 검사관리 메뉴로 이동", - "actions": [ - { - "type": "scrollAndFind", - "container": ".sidebar-scroll", - "target": "품질관리", - "scrollStep": 200, - "maxAttempts": 5 - }, - { "type": "click", "target": "품질관리" }, - { "type": "wait", "duration": 500 }, - { "type": "click", "target": "검사관리" } - ], - "expect": { - "url": "/quality/inspection", - "visible": ["검사 목록", "품질검사 관리", "검사 등록"] - }, - "fallback": { - "type": "navigate", - "url": "/quality/inspection" - } - }, - { - "id": "step-2", - "name": "페이지 구조 확인", - "description": "통계 카드와 테이블 구조 확인", - "verify": { - "visible": ["금일 대기 건수", "진행 중 검사", "금일 완료 건수", "불량 발생률"], - "tableColumns": ["번호", "검사유형", "요청일", "품목명", "LOT NO", "상태", "담당자"] - } - }, - { - "id": "step-3", - "name": "탭 기능 확인", - "description": "전체/대기/진행중/완료 탭 동작 확인", - "actions": [ - { "type": "click", "target": "대기", "role": "tab" }, - { "type": "wait", "duration": 300 }, - { "type": "click", "target": "진행중", "role": "tab" }, - { "type": "wait", "duration": 300 }, - { "type": "click", "target": "완료", "role": "tab" }, - { "type": "wait", "duration": 300 }, - { "type": "click", "target": "전체", "role": "tab" } - ], - "expect": { - "tabsWork": true - } - }, - { - "id": "step-4", - "name": "필수 검증 #2: 검사 등록 모달 열기", - "description": "검사 등록 버튼 클릭하여 모달 열기", - "actions": [ - { "type": "openModal", "target": "검사 등록", "description": "품질검사 등록 모달 열기" } - ], - "modalConfig": { - "containerSelector": "[role='dialog'], .modal", - "animationDelay": 300, - "waitForSelector": "[role='dialog']" - }, - "expect": { - "modal": "품질검사 등록", - "visible": ["LOT NO", "품목명", "공정명", "수량", "작업자", "특이사항", "검사 데이터 입력"] - } - }, - { - "id": "step-5", - "name": "검사 등록 폼 입력", - "description": "모달 내 검사 정보 입력", - "actions": [ - { "type": "fillInModal", "target": "수량", "value": "{testData.inspection.quantity}", "options": { "waitAfter": 100 } }, - { "type": "selectInModal", "target": "작업자", "value": "{testData.inspection.worker}", "options": { "waitAfter": 200 } }, - { "type": "fillInModal", "target": "특이사항", "value": "{testData.inspection.note}", "options": { "waitAfter": 100 } }, - { "type": "clickInModal", "target": "양호", "description": "가공상태 양호 선택", "options": { "waitAfter": 100 } }, - { "type": "fillInModal", "target": "높이 측정값", "value": "{testData.inspection.height}", "options": { "waitAfter": 100 } }, - { "type": "fillInModal", "target": "길이 측정값", "value": "{testData.inspection.length}", "options": { "waitAfter": 100 } } - ] - }, - { - "id": "step-6", - "name": "필수 검증 #2: 검사 등록 저장", - "description": "모달 내 등록 버튼 클릭하여 검사 저장", - "actions": [ - { "type": "clickInModal", "target": "등록", "options": { "waitAfter": 500 } } - ], - "expect": { - "urlMaintained": true, - "noErrorPage": true, - "toast": ["등록", "완료", "성공"], - "modalClosed": true - }, - "verify": { - "apiCall": "POST /api/quality/inspection" - } - }, - { - "id": "step-7", - "name": "필수 검증 #4: 등록 데이터 반영 확인", - "critical": true, - "note": "토스트 성공 메시지만으로 PASS 판정 불가. 실제 데이터 등록 확인 필수!", - "description": "테이블에서 등록된 검사 확인", - "verify": { - "tableContains": ["대기", "{testData.inspection.worker}"], - "recordCountIncreased": true - } - }, - { - "id": "step-8", - "name": "등록된 검사 상세 열기", - "description": "등록된 검사 항목 클릭하여 상세 보기", - "actions": [ - { - "type": "findRow", - "contains": "{testData.inspection.worker}", - "then": { - "type": "click", - "target": "row" - } - } - ], - "expect": { - "modal": "검사 상세", - "visible": ["수정", "삭제"] - } - }, - { - "id": "step-9", - "name": "검사 정보 수정", - "description": "모달 내 검사 정보 수정 테스트", - "actions": [ - { "type": "clickInModal", "target": "수정", "options": { "waitAfter": 300 } }, - { "type": "fillInModal", "target": "특이사항", "value": "E2E 테스트 수정됨", "options": { "waitAfter": 100 } }, - { "type": "clickInModal", "target": "저장", "options": { "waitAfter": 500 } } - ], - "expect": { - "toast": ["수정", "완료", "성공"], - "modalClosed": true - } - }, - { - "id": "step-10", - "name": "필수 검증 #4: 수정 데이터 반영 확인", - "critical": true, - "note": "토스트 성공 메시지만으로 PASS 판정 불가. 실제 데이터 변경 확인 필수!", - "description": "테이블에서 수정된 검사 확인", - "verify": { - "dataModified": true - } - }, - { - "id": "step-11", - "name": "검사 삭제 준비", - "description": "삭제할 검사 선택", - "actions": [ - { - "type": "findRow", - "contains": "{testData.inspection.worker}", - "then": { - "type": "click", - "target": "row" - } - } - ], - "expect": { - "modal": "검사 상세", - "visible": ["삭제"] - } - }, - { - "id": "step-12", - "name": "검사 삭제", - "description": "삭제 버튼 클릭하여 검사 삭제", - "actions": [ - { "type": "click", "target": "삭제" } - ], - "expect": { - "confirmDialog": true, - "dialogText": ["삭제", "하시겠습니까"] - } - }, - { - "id": "step-13", - "name": "삭제 확인", - "description": "삭제 확인 다이얼로그에서 확인 클릭", - "actions": [ - { "type": "click", "target": "확인" } - ], - "expect": { - "toast": ["삭제", "완료", "성공"], - "modalClosed": true - } - }, - { - "id": "step-14", - "name": "필수 검증 #4: 삭제 데이터 반영 확인", - "critical": true, - "note": "토스트 성공 메시지만으로 PASS 판정 불가. 실제 데이터 삭제 확인 필수!", - "description": "테이블에서 삭제된 검사가 없는지 확인", - "verify": { - "tableNotContains": "E2E 테스트", - "recordCountDecreased": true - } - } - ], - - "assertions": [ - { - "type": "url", - "expected": "/quality/inspection", - "message": "검사관리 페이지에 머물러야 함" - }, - { - "type": "elementExists", - "selector": "button:has-text('검사 등록')", - "message": "검사 등록 버튼이 표시되어야 함" - } - ], - - "mandatoryVerifications": { - "description": "E2E_TEST_CONFIG.md 기준 필수 검증 항목", - "items": [ - { - "id": 2, - "name": "등록/저장 버튼", - "trigger": "검사 등록 버튼", - "verification": "URL 유지 + 에러 페이지 없음 + 성공 토스트 + 데이터 반영", - "failCondition": "404/500 에러 페이지 이동" - }, - { - "id": 4, - "name": "모달 등록 완료", - "trigger": "검사 등록 모달", - "verification": "실제 저장 동작 + 결과 확인", - "failCondition": "열기/닫기만 테스트" - }, - { - "id": 5, - "name": "목업/미완성 페이지 감지", - "trigger": "페이지 로드 시", - "verification": "입력 필드 + 동작하는 버튼 + API 호출 확인", - "failCondition": "버튼만 있고 입력 불가, Console LOG만 출력" - } - ] - }, - - "cleanup": { - "enabled": true, - "description": "테스트 중 생성된 검사 데이터 삭제", - "actions": [ - { - "type": "deleteTestData", - "condition": "contains:E2E 테스트" - } - ] - }, - - "notes": { - "testScope": "검사 등록 → 조회 → 수정 → 삭제 전체 CRUD 테스트", - "modalFields": { - "LOT NO": "자동 생성", - "품목명": "자동 연동", - "공정명": "자동 연동", - "수량": "숫자 입력", - "작업자": "드롭다운 선택", - "특이사항": "텍스트 입력", - "가공상태": "양호/불량 선택", - "높이": "측정값 입력 (mm)", - "길이": "측정값 입력 (mm)" - }, - "prerequisites": "로그인된 사용자에게 품질검사 등록 권한 필요" - } -} diff --git a/inventory-status.json b/inventory-status.json index 2088d99..e8b83e9 100644 --- a/inventory-status.json +++ b/inventory-status.json @@ -16,7 +16,9 @@ "menuNavigation": { "level1": "자재관리", "level2": "재고현황", - "expectedUrl": "/material/inventory" + "expectedUrl": "/material/inventory", + "searchWithinParent": true, + "closeOtherMenus": true }, "menuNavigationEnhanced": { "strategy": "scroll-and-search", @@ -41,13 +43,9 @@ "timeout": 90000, "tags": ["material", "inventory", "read-only"], - "login": { - "url": "https://dev.codebridge-x.com/login", - "credentials": { - "id": "TestUser5", - "password": "password123!" - }, - "successIndicator": "대시보드" + "auth": { + "username": "TestUser5", + "password": "password123!" }, "steps": [ diff --git a/item-management.json b/item-management.json index 421cf6a..dfd8646 100644 --- a/item-management.json +++ b/item-management.json @@ -1,6 +1,6 @@ { - "scenarioId": "item-management", - "scenarioName": "품목관리 (Item Management)", + "id": "item-management", + "name": "품목관리 (Item Management)", "screenshotPolicy": { "onErrorOnly": true, "captureOn": ["error", "fail", "timeout", "404", "500", "blocked"] @@ -18,7 +18,13 @@ "menuNavigation": { "level1": "생산관리", "level2": "품목관리", - "expectedUrl": "/ko/production/screen-production" + "expectedUrl": "/ko/production/screen-production", + "searchWithinParent": true, + "closeOtherMenus": true + }, + "auth": { + "username": "TestUser5", + "password": "password123!" }, "menuNavigationEnhanced": { "strategy": "scroll-and-search", diff --git a/item-master.json b/item-master.json index 2330b9f..a50745f 100644 --- a/item-master.json +++ b/item-master.json @@ -10,7 +10,9 @@ "menuNavigation": { "level1": "품목관리", "level2": "품목기준관리", - "expectedUrl": "/master-data/item-master-data-management" + "expectedUrl": "/master-data/item-master-data-management", + "searchWithinParent": true, + "closeOtherMenus": true }, "auth": { "username": "TestUser5", diff --git a/payment-history.json b/payment-history.json index c1f5596..c58c84c 100644 --- a/payment-history.json +++ b/payment-history.json @@ -14,6 +14,17 @@ "urlPattern": "/payment-history|/ko/payment-history", "menuHints": ["결제내역", "결제 내역", "회계관리"] }, + "menuNavigation": { + "level1": "회계관리", + "level2": "결제내역", + "expectedUrl": "/payment-history", + "searchWithinParent": true, + "closeOtherMenus": true + }, + "auth": { + "username": "TestUser5", + "password": "password123!" + }, "menuNavigationEnhanced": { "strategy": "scroll-and-search", "description": "사이드바를 스크롤하며 메뉴를 찾고 클릭하여 404를 방지", diff --git a/permission-management.json b/permission-management.json index c3d79e3..017bb4e 100644 --- a/permission-management.json +++ b/permission-management.json @@ -14,7 +14,13 @@ "menuNavigation": { "level1": "설정", "level2": "권한관리", - "expectedUrl": "/ko/settings/permissions" + "expectedUrl": "/ko/settings/permissions", + "searchWithinParent": true, + "closeOtherMenus": true + }, + "auth": { + "username": "TestUser5", + "password": "password123!" }, "menuNavigationEnhanced": { "strategy": "scroll-and-search", diff --git a/popup-management.json b/popup-management.json index 102176a..424240f 100644 --- a/popup-management.json +++ b/popup-management.json @@ -16,7 +16,13 @@ "menuNavigation": { "level1": "설정", "level2": "팝업관리", - "expectedUrl": "/ko/settings/popup-management" + "expectedUrl": "/ko/settings/popup-management", + "searchWithinParent": true, + "closeOtherMenus": true + }, + "auth": { + "username": "TestUser5", + "password": "password123!" }, "menuNavigationEnhanced": { "strategy": "scroll-and-search", diff --git a/price-management.json b/price-management.json index 6c58b40..5eddcf4 100644 --- a/price-management.json +++ b/price-management.json @@ -16,7 +16,9 @@ "menuNavigation": { "level1": "판매관리", "level2": "단가관리", - "expectedUrl": "/sales/price" + "expectedUrl": "/sales/price", + "searchWithinParent": true, + "closeOtherMenus": true }, "menuNavigationEnhanced": { "strategy": "scroll-and-search", @@ -41,13 +43,9 @@ "timeout": 90000, "tags": ["sales", "price", "crud"], - "login": { - "url": "https://dev.codebridge-x.com/login", - "credentials": { - "id": "TestUser5", - "password": "password123!" - }, - "successIndicator": "대시보드" + "auth": { + "username": "TestUser5", + "password": "password123!" }, "testData": { diff --git a/quality-certification.json b/quality-certification.json index e6f97f9..345e435 100644 --- a/quality-certification.json +++ b/quality-certification.json @@ -10,7 +10,9 @@ "menuNavigation": { "level1": "품질관리", "level2": "품질인정심사 시스템", - "expectedUrl": "/quality/certification" + "expectedUrl": "/quality/certification", + "searchWithinParent": true, + "closeOtherMenus": true }, "auth": { "username": "TestUser5", diff --git a/rank-management.json b/rank-management.json index 237c763..d0fa483 100644 --- a/rank-management.json +++ b/rank-management.json @@ -14,7 +14,13 @@ "menuNavigation": { "level1": "설정", "level2": "직급관리", - "expectedUrl": "/ko/settings/ranks" + "expectedUrl": "/ko/settings/ranks", + "searchWithinParent": true, + "closeOtherMenus": true + }, + "auth": { + "username": "TestUser5", + "password": "password123!" }, "menuNavigationEnhanced": { "strategy": "scroll-and-search", diff --git a/receiving-management.json b/receiving-management.json index bf49a55..9db7e43 100644 --- a/receiving-management.json +++ b/receiving-management.json @@ -16,7 +16,9 @@ "menuNavigation": { "level1": "자재관리", "level2": "입고관리", - "expectedUrl": "/material/receiving" + "expectedUrl": "/material/receiving", + "searchWithinParent": true, + "closeOtherMenus": true }, "menuNavigationEnhanced": { "strategy": "scroll-and-search", @@ -41,13 +43,9 @@ "timeout": 90000, "tags": ["material", "receiving", "read-only"], - "login": { - "url": "https://dev.codebridge-x.com/login", - "credentials": { - "id": "TestUser5", - "password": "password123!" - }, - "successIndicator": "대시보드" + "auth": { + "username": "TestUser5", + "password": "password123!" }, "steps": [ diff --git a/reference-box.json b/reference-box.json index 560f650..e2c19ed 100644 --- a/reference-box.json +++ b/reference-box.json @@ -1,6 +1,6 @@ { - "scenarioId": "reference-box", - "scenarioName": "참조함 E2E 테스트", + "id": "reference-box", + "name": "참조함 E2E 테스트", "screenshotPolicy": { "onErrorOnly": true, "captureOn": ["error", "fail", "timeout", "404", "500", "blocked"] @@ -15,7 +15,13 @@ "menuNavigation": { "level1": "결재관리", "level2": "참조함", - "expectedUrl": "/ko/approval/reference" + "expectedUrl": "/ko/approval/reference", + "searchWithinParent": true, + "closeOtherMenus": true + }, + "auth": { + "username": "TestUser5", + "password": "password123!" }, "menuNavigationEnhanced": { "strategy": "scroll-and-search", diff --git a/report-analysis.json b/report-analysis.json deleted file mode 100644 index 07d5cb8..0000000 --- a/report-analysis.json +++ /dev/null @@ -1,178 +0,0 @@ -{ - "id": "report-analysis", - "name": "종합분석 테스트", - "screenshotPolicy": { - "onErrorOnly": true, - "captureOn": ["error", "fail", "timeout", "404", "500", "blocked"] - }, - "description": "리포트 > 종합분석 메뉴의 분석 대시보드/차트/필터 기능 테스트", - "baseUrl": "https://dev.codebridge-x.com", - "menuNavigation": { - "level1": "리포트", - "level2": "종합분석", - "expectedUrl": "/reports/comprehensive-analysis", - "searchWithinParent": true, - "closeOtherMenus": true - }, - "auth": { - "username": "TestUser5", - "password": "password123!" - }, - "steps": [ - { - "id": 1, - "name": "메뉴 진입: 리포트 > 종합분석", - "action": "menu_navigate", - "level1": "리포트", - "level2": "종합분석", - "expected": { - "url_contains": "/reports/comprehensive", - "visible": ["종합분석", "분석"] - } - }, - { - "id": 2, - "name": "필수 검증 #5: 목업 페이지 감지", - "action": "verify_not_mockup", - "checks": [ - "분석 차트 표시", - "데이터 요약 카드 존재", - "기간 필터 존재" - ], - "expected": "정상 페이지 (목업 아님)" - }, - { - "id": 3, - "name": "요약 통계 카드 확인", - "action": "verify_elements", - "checks": [ - "총 매출 카드", - "총 비용 카드", - "순이익 카드", - "전월 대비 증감" - ], - "expected": "요약 통계 카드 표시" - }, - { - "id": 4, - "name": "매출 차트 확인", - "action": "verify_elements", - "checks": [ - "매출 추이 차트 (라인/바)", - "차트 범례 표시" - ], - "expected": "매출 차트 표시" - }, - { - "id": 5, - "name": "비용 차트 확인", - "action": "verify_elements", - "checks": [ - "비용 분석 차트 (파이/도넛)", - "카테고리별 비용" - ], - "expected": "비용 차트 표시" - }, - { - "id": 6, - "phase": "FILTER", - "name": "[FILTER] 기간 필터 - 월 선택", - "action": "click", - "target": "input[type='month'], select[name*='period'], [class*='period-picker']", - "expected": "기간 선택 열림" - }, - { - "id": 7, - "phase": "FILTER", - "name": "[FILTER] 조회 적용", - "action": "click", - "target": "button:has-text('조회'), button:has-text('적용'), button:has-text('검색')", - "expected": "필터 적용됨" - }, - { - "id": 8, - "phase": "FILTER", - "name": "[FILTER] 필터 결과 확인", - "action": "verify_detail", - "checks": [ - "선택한 기간의 데이터 표시" - ], - "expected": "필터 동작 확인" - }, - { - "id": 9, - "name": "부서별 분석 확인", - "action": "verify_elements", - "checks": [ - "부서별 매출/비용 또는 통계" - ], - "expected": "부서별 분석 표시" - }, - { - "id": 10, - "name": "엑셀 다운로드 버튼 확인", - "action": "verify_elements", - "checks": [ - "엑셀 다운로드 버튼 존재" - ], - "expected": "엑셀 다운로드 기능 표시" - }, - { - "id": 11, - "name": "PDF 내보내기 확인", - "action": "verify_elements", - "checks": [ - "PDF 내보내기 버튼 존재" - ], - "expected": "PDF 내보내기 기능 표시" - }, - { - "id": 12, - "name": "인쇄 버튼 확인", - "action": "verify_elements", - "checks": [ - "인쇄 버튼 존재" - ], - "expected": "인쇄 기능 표시" - } - ], - "expectedAPIs": [ - { - "method": "GET", - "endpoint": "/api/v1/reports/comprehensive-analysis", - "description": "종합분석 데이터 조회" - }, - { - "method": "GET", - "endpoint": "/api/v1/reports/sales-summary", - "description": "매출 요약 조회" - }, - { - "method": "GET", - "endpoint": "/api/v1/reports/cost-summary", - "description": "비용 요약 조회" - }, - { - "method": "GET", - "endpoint": "/api/v1/reports/department-analysis", - "description": "부서별 분석 조회" - } - ], - "requiredVerifications": [ - { - "id": 3, - "name": "검색/필터", - "steps": [6, 7, 8], - "criteria": "기간 필터 동작" - }, - { - "id": 5, - "name": "목업 페이지 감지", - "steps": [2], - "criteria": "분석 차트, 데이터 카드, 기간 필터 존재" - } - ], - "rollbackPlan": { - "note": "조회 전용 페이지로 데이터 변경 없음" - } -} diff --git a/salary-management.json b/salary-management.json index 0b565ee..e1fd170 100644 --- a/salary-management.json +++ b/salary-management.json @@ -16,7 +16,9 @@ "menuNavigation": { "level1": "인사관리", "level2": "급여관리", - "expectedUrl": "/hr/salary-management" + "expectedUrl": "/hr/salary-management", + "searchWithinParent": true, + "closeOtherMenus": true }, "menuNavigationEnhanced": { "strategy": "scroll-and-search", @@ -41,13 +43,9 @@ "timeout": 90000, "tags": ["hr", "salary", "payroll", "management"], - "login": { - "url": "https://dev.codebridge-x.com/login", - "credentials": { - "id": "TestUser5", - "password": "password123!" - }, - "successIndicator": "대시보드" + "auth": { + "username": "TestUser5", + "password": "password123!" }, "testData": { diff --git a/sales-management.json b/sales-management.json index a0c8588..3e9b568 100644 --- a/sales-management.json +++ b/sales-management.json @@ -10,7 +10,9 @@ "menuNavigation": { "level1": "회계관리", "level2": "매출관리", - "expectedUrl": "/ko/accounting/sales" + "expectedUrl": "/ko/accounting/sales", + "searchWithinParent": true, + "closeOtherMenus": true }, "navigation": { "targetUrl": "/accounting/sales", diff --git a/subscription-management.json b/subscription-management.json index 24fc0de..f6bd906 100644 --- a/subscription-management.json +++ b/subscription-management.json @@ -16,7 +16,9 @@ "menuNavigation": { "level1": "설정", "level2": "구독관리", - "expectedUrl": "/settings/subscription" + "expectedUrl": "/settings/subscription", + "searchWithinParent": true, + "closeOtherMenus": true }, "menuNavigationEnhanced": { "strategy": "scroll-and-search", @@ -41,13 +43,9 @@ "timeout": 90000, "tags": ["settings", "subscription", "read-only"], - "login": { - "url": "https://dev.codebridge-x.com/login", - "credentials": { - "id": "TestUser5", - "password": "password123!" - }, - "successIndicator": "대시보드" + "auth": { + "username": "TestUser5", + "password": "password123!" }, "steps": [ diff --git a/vacation-management.json b/vacation-management.json index c1104f5..4fcfdf6 100644 --- a/vacation-management.json +++ b/vacation-management.json @@ -16,7 +16,9 @@ "menuNavigation": { "level1": "인사관리", "level2": "휴가관리", - "expectedUrl": "/ko/hr/vacation-management" + "expectedUrl": "/ko/hr/vacation-management", + "searchWithinParent": true, + "closeOtherMenus": true }, "menuNavigationEnhanced": { "strategy": "scroll-and-search", @@ -47,13 +49,9 @@ "timeout": 120000, "tags": ["hr", "vacation", "leave", "management"], - "login": { - "url": "https://dev.codebridge-x.com/login", - "credentials": { - "id": "TestUser5", - "password": "password123!" - }, - "successIndicator": "대시보드" + "auth": { + "username": "TestUser5", + "password": "password123!" }, "testData": { diff --git a/vehicle-management.json b/vehicle-management.json deleted file mode 100644 index fbb9cb7..0000000 --- a/vehicle-management.json +++ /dev/null @@ -1,259 +0,0 @@ -{ - "id": "vehicle-management", - "name": "차량관리 테스트", - "screenshotPolicy": { - "onErrorOnly": true, - "captureOn": ["error", "fail", "timeout", "404", "500", "blocked"] - }, - "description": "차량관리 > 차량관리 메뉴의 차량 CRUD 기능 테스트", - "baseUrl": "https://dev.codebridge-x.com", - "menuNavigation": { - "level1": "차량관리", - "level2": "차량관리", - "expectedUrl": "/vehicle/management", - "searchWithinParent": true, - "closeOtherMenus": true - }, - "auth": { - "username": "TestUser5", - "password": "password123!" - }, - "testData": { - "create": { - "vehicleNumber": "E2E_12가3456", - "vehicleType": "승용차", - "manager": "테스트 담당자" - } - }, - "steps": [ - { - "id": 1, - "name": "메뉴 진입: 차량관리 > 차량관리", - "action": "menu_navigate", - "level1": "차량관리", - "level2": "차량관리", - "expected": { - "url_contains": "/vehicle", - "visible": ["차량관리", "차량"] - } - }, - { - "id": 2, - "name": "필수 검증 #5: 목업 페이지 감지", - "action": "verify_not_mockup", - "checks": [ - "차량 목록 표시", - "차량 등록 버튼 존재", - "검색 기능 존재" - ], - "expected": "정상 페이지 (목업 아님)" - }, - { - "id": 3, - "name": "차량 테이블 구조 확인", - "action": "verify_table", - "checks": [ - "차량번호 컬럼", - "차종 컬럼", - "담당자 컬럼", - "상태 컬럼" - ], - "expected": "차량 테이블 표시" - }, - { - "id": 4, - "phase": "CREATE", - "name": "[CREATE] 차량 등록 버튼 클릭", - "action": "click", - "target": "button:has-text('등록'), button:has-text('추가'), button:has-text('신규')", - "expected": { - "modal_open": true - } - }, - { - "id": 5, - "phase": "CREATE", - "name": "[CREATE] 차량번호 입력", - "action": "fill", - "target": "input[name*='number'], input[placeholder*='차량번호']", - "value": "E2E_12가3456", - "clear": true - }, - { - "id": 6, - "phase": "CREATE", - "name": "[CREATE] 차종 선택/입력", - "action": "fill", - "target": "input[name*='type'], select[name*='type']", - "value": "승용차", - "clear": true - }, - { - "id": 7, - "phase": "CREATE", - "name": "[CREATE] 담당자 입력", - "action": "fill", - "target": "input[name*='manager'], input[placeholder*='담당']", - "value": "테스트 담당자", - "clear": true - }, - { - "id": 8, - "phase": "CREATE", - "name": "[CREATE] 필수 검증 #2: 차량 저장", - "action": "click", - "target": "button:has-text('저장'), button:has-text('등록'), button:has-text('확인')", - "critical": true, - "verify": { - "url_maintained": true, - "no_error_page": true, - "api_call": "POST /api/v1/vehicles", - "toast": "등록|저장|완료|성공" - }, - "expected": "차량 등록 완료" - }, - { - "id": 9, - "phase": "READ", - "name": "[READ] 등록된 차량 검색", - "action": "fill", - "target": "input[type='search'], input[placeholder*='검색']", - "value": "E2E_12가", - "submit": true - }, - { - "id": 10, - "phase": "READ", - "name": "[READ] 등록된 차량 확인", - "action": "verify_detail", - "checks": [ - "E2E_12가3456 목록에 표시" - ], - "expected": "등록된 차량 확인" - }, - { - "id": 11, - "phase": "READ", - "name": "[READ] 차량 상세 조회", - "action": "click", - "target": "table tbody tr:has-text('E2E_12가')", - "expected": { - "detail_view": true - } - }, - { - "id": 12, - "phase": "UPDATE", - "name": "[UPDATE] 차량 수정 모드 진입", - "action": "click", - "target": "button:has-text('수정'), button:has-text('편집')", - "expected": { - "edit_mode": true - } - }, - { - "id": 13, - "phase": "UPDATE", - "name": "[UPDATE] 담당자 수정", - "action": "fill", - "target": "input[name*='manager'], input[placeholder*='담당']", - "value": "수정된 담당자", - "clear": true - }, - { - "id": 14, - "phase": "UPDATE", - "name": "[UPDATE] 차량 저장", - "action": "click", - "target": "button:has-text('저장'), button:has-text('확인')", - "verify": { - "api_call": "PUT /api/v1/vehicles", - "toast": "수정|저장|완료|성공" - }, - "expected": "차량 수정 완료" - }, - { - "id": 15, - "phase": "DELETE", - "name": "[DELETE] 차량 삭제", - "action": "click", - "target": "button:has-text('삭제'), button:has-text('제거')", - "expected": { - "confirm_dialog": true - } - }, - { - "id": 16, - "phase": "DELETE", - "name": "[DELETE] 삭제 확인", - "action": "click", - "target": "[role='alertdialog'] button:has-text('확인'), [role='dialog'] button:has-text('삭제')", - "verify": { - "api_call": "DELETE /api/v1/vehicles", - "toast": "삭제|제거|완료|성공" - }, - "expected": "차량 삭제 완료" - }, - { - "id": 17, - "phase": "DELETE", - "name": "[DELETE] 삭제 확인", - "action": "verify_detail", - "checks": [ - "E2E_12가3456 목록에서 제거" - ], - "expected": "차량 삭제 반영" - }, - { - "id": 18, - "name": "엑셀 다운로드 확인", - "action": "verify_elements", - "checks": [ - "엑셀 다운로드 버튼 존재" - ], - "expected": "엑셀 다운로드 기능 표시" - } - ], - "expectedAPIs": [ - { - "method": "GET", - "endpoint": "/api/v1/vehicles", - "description": "차량 목록 조회" - }, - { - "method": "POST", - "endpoint": "/api/v1/vehicles", - "description": "차량 등록" - }, - { - "method": "PUT", - "endpoint": "/api/v1/vehicles/:id", - "description": "차량 수정" - }, - { - "method": "DELETE", - "endpoint": "/api/v1/vehicles/:id", - "description": "차량 삭제" - } - ], - "requiredVerifications": [ - { - "id": 2, - "name": "저장 버튼", - "steps": [8, 14], - "criteria": "API 호출 + 성공 토스트 + 데이터 반영" - }, - { - "id": 5, - "name": "목업 페이지 감지", - "steps": [2], - "criteria": "차량 목록, 등록 버튼, 검색 기능 존재" - } - ], - "rollbackPlan": { - "onCreateFail": "등록 모달 닫고 재시도", - "onUpdateFail": "페이지 새로고침 후 재시도", - "onDeleteFail": "수동 삭제 필요", - "cleanupRequired": "E2E_12가* 패턴 데이터 삭제" - } -} diff --git a/vendor-ledger.json b/vendor-ledger.json index 07e797b..28deec3 100644 --- a/vendor-ledger.json +++ b/vendor-ledger.json @@ -15,7 +15,9 @@ "menuNavigation": { "level1": "회계관리", "level2": "거래처원장", - "expectedUrl": "/ko/accounting/vendor-ledger" + "expectedUrl": "/ko/accounting/vendor-ledger", + "searchWithinParent": true, + "closeOtherMenus": true }, "menuNavigationEnhanced": { "strategy": "scroll-and-search", diff --git a/vendor-management.json b/vendor-management.json index 6917d90..0a4849f 100644 --- a/vendor-management.json +++ b/vendor-management.json @@ -15,7 +15,9 @@ "menuNavigation": { "level1": "회계관리", "level2": "거래처관리", - "expectedUrl": "/ko/accounting/vendors" + "expectedUrl": "/ko/accounting/vendors", + "searchWithinParent": true, + "closeOtherMenus": true }, "menuNavigationEnhanced": { "strategy": "scroll-and-search", diff --git a/withdrawal-management.json b/withdrawal-management.json index 39e90fb..922f888 100644 --- a/withdrawal-management.json +++ b/withdrawal-management.json @@ -16,7 +16,9 @@ "menuNavigation": { "level1": "회계관리", "level2": "출금관리", - "expectedUrl": "/ko/accounting/withdrawals" + "expectedUrl": "/ko/accounting/withdrawals", + "searchWithinParent": true, + "closeOtherMenus": true }, "menuNavigationEnhanced": { "strategy": "scroll-and-search", @@ -45,13 +47,9 @@ "timeout": 60000, "tags": ["accounting", "withdrawal", "crud"], - "login": { - "url": "https://dev.codebridge-x.com/login", - "credentials": { - "id": "TestUser5", - "password": "password123!" - }, - "successIndicator": "대시보드" + "auth": { + "username": "TestUser5", + "password": "password123!" }, "steps": [