chore: 미구현 메뉴 시나리오 6건 삭제

- accounting-cost (원가관리): 사이드바 메뉴 미존재
- accounting-financial (재무제표): 사이드바 메뉴 미존재
- inspection-management (검사관리): 사이드바 메뉴 미존재
- vehicle-management (차량관리): 1차 메뉴 미존재
- comprehensive-analysis (종합분석): 리포트 메뉴 미존재
- report-analysis (종합분석): 리포트 메뉴 미존재

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
김보곤
2026-02-04 21:59:56 +09:00
parent 40146d7ba1
commit aa078458a4
33 changed files with 178 additions and 1592 deletions

View File

@@ -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": "조회 전용 페이지로 데이터 변경 없음"
}
}

View File

@@ -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": "조회 전용 페이지로 데이터 변경 없음"
}
}

View File

@@ -1,5 +1,5 @@
{ {
"scenarioId": "approval-box", "id": "approval-box",
"name": "결재함 E2E 테스트", "name": "결재함 E2E 테스트",
"screenshotPolicy": { "screenshotPolicy": {
"onErrorOnly": true, "onErrorOnly": true,
@@ -7,6 +7,17 @@
}, },
"description": "결재함 페이지의 전체 기능을 검증합니다 (탭 전환, 검색, 필터, 승인/반려, 모달)", "description": "결재함 페이지의 전체 기능을 검증합니다 (탭 전환, 검색, 필터, 승인/반려, 모달)",
"baseUrl": "https://dev.codebridge-x.com", "baseUrl": "https://dev.codebridge-x.com",
"menuNavigation": {
"level1": "결재관리",
"level2": "결재함",
"expectedUrl": "/ko/approval/inbox",
"searchWithinParent": true,
"closeOtherMenus": true
},
"auth": {
"username": "TestUser5",
"password": "password123!"
},
"navigation": { "navigation": {
"targetUrl": "/approval/inbox", "targetUrl": "/approval/inbox",

View File

@@ -14,6 +14,13 @@
"urlPattern": "/hr/attendance|/ko/hr/attendance", "urlPattern": "/hr/attendance|/ko/hr/attendance",
"menuHints": ["근태현황", "근태 현황", "출퇴근", "인사관리"] "menuHints": ["근태현황", "근태 현황", "출퇴근", "인사관리"]
}, },
"menuNavigation": {
"level1": "인사관리",
"level2": "근태현황",
"expectedUrl": "/hr/attendance",
"searchWithinParent": true,
"closeOtherMenus": true
},
"menuNavigationEnhanced": { "menuNavigationEnhanced": {
"strategy": "scroll-and-search", "strategy": "scroll-and-search",
"description": "사이드바를 스크롤하며 메뉴를 찾고 클릭하여 404를 방지", "description": "사이드바를 스크롤하며 메뉴를 찾고 클릭하여 404를 방지",
@@ -40,14 +47,10 @@
"timeout": 120000, "timeout": 120000,
"tags": ["hr", "attendance", "geolocation", "checkin", "checkout"], "tags": ["hr", "attendance", "geolocation", "checkin", "checkout"],
"login": { "auth": {
"url": "https://dev.codebridge-x.com/login", "username": "TestUser5",
"credentials": {
"id": "TestUser5",
"password": "password123!" "password": "password123!"
}, },
"successIndicator": "대시보드"
},
"browserConfig": { "browserConfig": {
"permissions": { "permissions": {

View File

@@ -11,7 +11,9 @@
"menuNavigation": { "menuNavigation": {
"level1": "인사관리", "level1": "인사관리",
"level2": "근태관리", "level2": "근태관리",
"expectedUrl": "/ko/hr/attendance-management" "expectedUrl": "/ko/hr/attendance-management",
"searchWithinParent": true,
"closeOtherMenus": true
}, },
"navigation": { "navigation": {
"targetUrl": "/hr/attendance-management", "targetUrl": "/hr/attendance-management",
@@ -51,14 +53,10 @@
"timeout": 90000, "timeout": 90000,
"tags": ["hr", "attendance", "management", "crud"], "tags": ["hr", "attendance", "management", "crud"],
"login": { "auth": {
"url": "https://dev.codebridge-x.com/login", "username": "TestUser5",
"credentials": {
"id": "TestUser5",
"password": "password123!" "password": "password123!"
}, },
"successIndicator": "대시보드"
},
"testData": { "testData": {
"attendance": { "attendance": {

View File

@@ -13,6 +13,17 @@
"urlPattern": "/company-info|/ko/company-info|/settings/company-info", "urlPattern": "/company-info|/ko/company-info|/settings/company-info",
"menuHints": ["회사정보", "회사 정보", "설정"] "menuHints": ["회사정보", "회사 정보", "설정"]
}, },
"menuNavigation": {
"level1": "설정",
"level2": "회사정보",
"expectedUrl": "/company-info",
"searchWithinParent": true,
"closeOtherMenus": true
},
"auth": {
"username": "TestUser5",
"password": "password123!"
},
"menuNavigationEnhanced": { "menuNavigationEnhanced": {
"strategy": "scroll-and-search", "strategy": "scroll-and-search",
"description": "사이드바를 스크롤하며 메뉴를 찾고 클릭하여 404를 방지", "description": "사이드바를 스크롤하며 메뉴를 찾고 클릭하여 404를 방지",

View File

@@ -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": "조회 전용 대시보드로 데이터 변경 없음"
}
}

View File

@@ -16,7 +16,9 @@
"menuNavigation": { "menuNavigation": {
"level1": "인사관리", "level1": "인사관리",
"level2": "부서관리", "level2": "부서관리",
"expectedUrl": "/ko/hr/department-management" "expectedUrl": "/ko/hr/department-management",
"searchWithinParent": true,
"closeOtherMenus": true
}, },
"menuNavigationEnhanced": { "menuNavigationEnhanced": {
"strategy": "scroll-and-search", "strategy": "scroll-and-search",
@@ -48,14 +50,10 @@
"timeout": 90000, "timeout": 90000,
"tags": ["hr", "department", "crud", "random", "hierarchy"], "tags": ["hr", "department", "crud", "random", "hierarchy"],
"login": { "auth": {
"url": "https://dev.codebridge-x.com/login", "username": "TestUser5",
"credentials": {
"id": "TestUser5",
"password": "password123!" "password": "password123!"
}, },
"successIndicator": "대시보드"
},
"randomData": { "randomData": {
"parentDepartment": { "parentDepartment": {

View File

@@ -16,7 +16,9 @@
"menuNavigation": { "menuNavigation": {
"level1": "회계관리", "level1": "회계관리",
"level2": "입금관리", "level2": "입금관리",
"expectedUrl": "/ko/accounting/deposits" "expectedUrl": "/ko/accounting/deposits",
"searchWithinParent": true,
"closeOtherMenus": true
}, },
"menuNavigationEnhanced": { "menuNavigationEnhanced": {
"strategy": "scroll-and-search", "strategy": "scroll-and-search",
@@ -36,14 +38,10 @@
"timeout": 60000, "timeout": 60000,
"tags": ["accounting", "deposit", "crud"], "tags": ["accounting", "deposit", "crud"],
"login": { "auth": {
"url": "https://dev.codebridge-x.com/login", "username": "TestUser5",
"credentials": {
"id": "TestUser5",
"password": "password123!" "password": "password123!"
}, },
"successIndicator": "대시보드"
},
"steps": [ "steps": [
{ {

View File

@@ -19,7 +19,13 @@
"menuNavigation": { "menuNavigation": {
"level1": "결재관리", "level1": "결재관리",
"level2": "기안함", "level2": "기안함",
"expectedUrl": "/ko/approval/draft" "expectedUrl": "/ko/approval/draft",
"searchWithinParent": true,
"closeOtherMenus": true
},
"auth": {
"username": "TestUser5",
"password": "password123!"
}, },
"menuNavigationEnhanced": { "menuNavigationEnhanced": {
"strategy": "scroll-and-search", "strategy": "scroll-and-search",

View File

@@ -16,7 +16,9 @@
"menuNavigation": { "menuNavigation": {
"level1": "인사관리", "level1": "인사관리",
"level2": "사원관리", "level2": "사원관리",
"expectedUrl": "/ko/hr/employee-management" "expectedUrl": "/ko/hr/employee-management",
"searchWithinParent": true,
"closeOtherMenus": true
}, },
"menuNavigationEnhanced": { "menuNavigationEnhanced": {
"strategy": "scroll-and-search", "strategy": "scroll-and-search",
@@ -36,14 +38,10 @@
"timeout": 60000, "timeout": 60000,
"tags": ["hr", "employee", "crud"], "tags": ["hr", "employee", "crud"],
"login": { "auth": {
"url": "https://dev.codebridge-x.com/login", "username": "TestUser5",
"credentials": {
"id": "TestUser5",
"password": "password123!" "password": "password123!"
}, },
"successIndicator": "대시보드"
},
"steps": [ "steps": [
{ {

View File

@@ -15,7 +15,13 @@
"menuNavigation": { "menuNavigation": {
"level1": "게시판", "level1": "게시판",
"level2": "자유게시판", "level2": "자유게시판",
"expectedUrl": "/ko/boards/free" "expectedUrl": "/ko/boards/free",
"searchWithinParent": true,
"closeOtherMenus": true
},
"auth": {
"username": "TestUser5",
"password": "password123!"
}, },
"menuNavigationEnhanced": { "menuNavigationEnhanced": {
"strategy": "scroll-and-search", "strategy": "scroll-and-search",

View File

@@ -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": "로그인된 사용자에게 품질검사 등록 권한 필요"
}
}

View File

@@ -16,7 +16,9 @@
"menuNavigation": { "menuNavigation": {
"level1": "자재관리", "level1": "자재관리",
"level2": "재고현황", "level2": "재고현황",
"expectedUrl": "/material/inventory" "expectedUrl": "/material/inventory",
"searchWithinParent": true,
"closeOtherMenus": true
}, },
"menuNavigationEnhanced": { "menuNavigationEnhanced": {
"strategy": "scroll-and-search", "strategy": "scroll-and-search",
@@ -41,14 +43,10 @@
"timeout": 90000, "timeout": 90000,
"tags": ["material", "inventory", "read-only"], "tags": ["material", "inventory", "read-only"],
"login": { "auth": {
"url": "https://dev.codebridge-x.com/login", "username": "TestUser5",
"credentials": {
"id": "TestUser5",
"password": "password123!" "password": "password123!"
}, },
"successIndicator": "대시보드"
},
"steps": [ "steps": [
{ {

View File

@@ -1,6 +1,6 @@
{ {
"scenarioId": "item-management", "id": "item-management",
"scenarioName": "품목관리 (Item Management)", "name": "품목관리 (Item Management)",
"screenshotPolicy": { "screenshotPolicy": {
"onErrorOnly": true, "onErrorOnly": true,
"captureOn": ["error", "fail", "timeout", "404", "500", "blocked"] "captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
@@ -18,7 +18,13 @@
"menuNavigation": { "menuNavigation": {
"level1": "생산관리", "level1": "생산관리",
"level2": "품목관리", "level2": "품목관리",
"expectedUrl": "/ko/production/screen-production" "expectedUrl": "/ko/production/screen-production",
"searchWithinParent": true,
"closeOtherMenus": true
},
"auth": {
"username": "TestUser5",
"password": "password123!"
}, },
"menuNavigationEnhanced": { "menuNavigationEnhanced": {
"strategy": "scroll-and-search", "strategy": "scroll-and-search",

View File

@@ -10,7 +10,9 @@
"menuNavigation": { "menuNavigation": {
"level1": "품목관리", "level1": "품목관리",
"level2": "품목기준관리", "level2": "품목기준관리",
"expectedUrl": "/master-data/item-master-data-management" "expectedUrl": "/master-data/item-master-data-management",
"searchWithinParent": true,
"closeOtherMenus": true
}, },
"auth": { "auth": {
"username": "TestUser5", "username": "TestUser5",

View File

@@ -14,6 +14,17 @@
"urlPattern": "/payment-history|/ko/payment-history", "urlPattern": "/payment-history|/ko/payment-history",
"menuHints": ["결제내역", "결제 내역", "회계관리"] "menuHints": ["결제내역", "결제 내역", "회계관리"]
}, },
"menuNavigation": {
"level1": "회계관리",
"level2": "결제내역",
"expectedUrl": "/payment-history",
"searchWithinParent": true,
"closeOtherMenus": true
},
"auth": {
"username": "TestUser5",
"password": "password123!"
},
"menuNavigationEnhanced": { "menuNavigationEnhanced": {
"strategy": "scroll-and-search", "strategy": "scroll-and-search",
"description": "사이드바를 스크롤하며 메뉴를 찾고 클릭하여 404를 방지", "description": "사이드바를 스크롤하며 메뉴를 찾고 클릭하여 404를 방지",

View File

@@ -14,7 +14,13 @@
"menuNavigation": { "menuNavigation": {
"level1": "설정", "level1": "설정",
"level2": "권한관리", "level2": "권한관리",
"expectedUrl": "/ko/settings/permissions" "expectedUrl": "/ko/settings/permissions",
"searchWithinParent": true,
"closeOtherMenus": true
},
"auth": {
"username": "TestUser5",
"password": "password123!"
}, },
"menuNavigationEnhanced": { "menuNavigationEnhanced": {
"strategy": "scroll-and-search", "strategy": "scroll-and-search",

View File

@@ -16,7 +16,13 @@
"menuNavigation": { "menuNavigation": {
"level1": "설정", "level1": "설정",
"level2": "팝업관리", "level2": "팝업관리",
"expectedUrl": "/ko/settings/popup-management" "expectedUrl": "/ko/settings/popup-management",
"searchWithinParent": true,
"closeOtherMenus": true
},
"auth": {
"username": "TestUser5",
"password": "password123!"
}, },
"menuNavigationEnhanced": { "menuNavigationEnhanced": {
"strategy": "scroll-and-search", "strategy": "scroll-and-search",

View File

@@ -16,7 +16,9 @@
"menuNavigation": { "menuNavigation": {
"level1": "판매관리", "level1": "판매관리",
"level2": "단가관리", "level2": "단가관리",
"expectedUrl": "/sales/price" "expectedUrl": "/sales/price",
"searchWithinParent": true,
"closeOtherMenus": true
}, },
"menuNavigationEnhanced": { "menuNavigationEnhanced": {
"strategy": "scroll-and-search", "strategy": "scroll-and-search",
@@ -41,14 +43,10 @@
"timeout": 90000, "timeout": 90000,
"tags": ["sales", "price", "crud"], "tags": ["sales", "price", "crud"],
"login": { "auth": {
"url": "https://dev.codebridge-x.com/login", "username": "TestUser5",
"credentials": {
"id": "TestUser5",
"password": "password123!" "password": "password123!"
}, },
"successIndicator": "대시보드"
},
"testData": { "testData": {
"price": { "price": {

View File

@@ -10,7 +10,9 @@
"menuNavigation": { "menuNavigation": {
"level1": "품질관리", "level1": "품질관리",
"level2": "품질인정심사 시스템", "level2": "품질인정심사 시스템",
"expectedUrl": "/quality/certification" "expectedUrl": "/quality/certification",
"searchWithinParent": true,
"closeOtherMenus": true
}, },
"auth": { "auth": {
"username": "TestUser5", "username": "TestUser5",

View File

@@ -14,7 +14,13 @@
"menuNavigation": { "menuNavigation": {
"level1": "설정", "level1": "설정",
"level2": "직급관리", "level2": "직급관리",
"expectedUrl": "/ko/settings/ranks" "expectedUrl": "/ko/settings/ranks",
"searchWithinParent": true,
"closeOtherMenus": true
},
"auth": {
"username": "TestUser5",
"password": "password123!"
}, },
"menuNavigationEnhanced": { "menuNavigationEnhanced": {
"strategy": "scroll-and-search", "strategy": "scroll-and-search",

View File

@@ -16,7 +16,9 @@
"menuNavigation": { "menuNavigation": {
"level1": "자재관리", "level1": "자재관리",
"level2": "입고관리", "level2": "입고관리",
"expectedUrl": "/material/receiving" "expectedUrl": "/material/receiving",
"searchWithinParent": true,
"closeOtherMenus": true
}, },
"menuNavigationEnhanced": { "menuNavigationEnhanced": {
"strategy": "scroll-and-search", "strategy": "scroll-and-search",
@@ -41,14 +43,10 @@
"timeout": 90000, "timeout": 90000,
"tags": ["material", "receiving", "read-only"], "tags": ["material", "receiving", "read-only"],
"login": { "auth": {
"url": "https://dev.codebridge-x.com/login", "username": "TestUser5",
"credentials": {
"id": "TestUser5",
"password": "password123!" "password": "password123!"
}, },
"successIndicator": "대시보드"
},
"steps": [ "steps": [
{ {

View File

@@ -1,6 +1,6 @@
{ {
"scenarioId": "reference-box", "id": "reference-box",
"scenarioName": "참조함 E2E 테스트", "name": "참조함 E2E 테스트",
"screenshotPolicy": { "screenshotPolicy": {
"onErrorOnly": true, "onErrorOnly": true,
"captureOn": ["error", "fail", "timeout", "404", "500", "blocked"] "captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
@@ -15,7 +15,13 @@
"menuNavigation": { "menuNavigation": {
"level1": "결재관리", "level1": "결재관리",
"level2": "참조함", "level2": "참조함",
"expectedUrl": "/ko/approval/reference" "expectedUrl": "/ko/approval/reference",
"searchWithinParent": true,
"closeOtherMenus": true
},
"auth": {
"username": "TestUser5",
"password": "password123!"
}, },
"menuNavigationEnhanced": { "menuNavigationEnhanced": {
"strategy": "scroll-and-search", "strategy": "scroll-and-search",

View File

@@ -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": "조회 전용 페이지로 데이터 변경 없음"
}
}

View File

@@ -16,7 +16,9 @@
"menuNavigation": { "menuNavigation": {
"level1": "인사관리", "level1": "인사관리",
"level2": "급여관리", "level2": "급여관리",
"expectedUrl": "/hr/salary-management" "expectedUrl": "/hr/salary-management",
"searchWithinParent": true,
"closeOtherMenus": true
}, },
"menuNavigationEnhanced": { "menuNavigationEnhanced": {
"strategy": "scroll-and-search", "strategy": "scroll-and-search",
@@ -41,14 +43,10 @@
"timeout": 90000, "timeout": 90000,
"tags": ["hr", "salary", "payroll", "management"], "tags": ["hr", "salary", "payroll", "management"],
"login": { "auth": {
"url": "https://dev.codebridge-x.com/login", "username": "TestUser5",
"credentials": {
"id": "TestUser5",
"password": "password123!" "password": "password123!"
}, },
"successIndicator": "대시보드"
},
"testData": { "testData": {
"searchKeyword": "홍", "searchKeyword": "홍",

View File

@@ -10,7 +10,9 @@
"menuNavigation": { "menuNavigation": {
"level1": "회계관리", "level1": "회계관리",
"level2": "매출관리", "level2": "매출관리",
"expectedUrl": "/ko/accounting/sales" "expectedUrl": "/ko/accounting/sales",
"searchWithinParent": true,
"closeOtherMenus": true
}, },
"navigation": { "navigation": {
"targetUrl": "/accounting/sales", "targetUrl": "/accounting/sales",

View File

@@ -16,7 +16,9 @@
"menuNavigation": { "menuNavigation": {
"level1": "설정", "level1": "설정",
"level2": "구독관리", "level2": "구독관리",
"expectedUrl": "/settings/subscription" "expectedUrl": "/settings/subscription",
"searchWithinParent": true,
"closeOtherMenus": true
}, },
"menuNavigationEnhanced": { "menuNavigationEnhanced": {
"strategy": "scroll-and-search", "strategy": "scroll-and-search",
@@ -41,14 +43,10 @@
"timeout": 90000, "timeout": 90000,
"tags": ["settings", "subscription", "read-only"], "tags": ["settings", "subscription", "read-only"],
"login": { "auth": {
"url": "https://dev.codebridge-x.com/login", "username": "TestUser5",
"credentials": {
"id": "TestUser5",
"password": "password123!" "password": "password123!"
}, },
"successIndicator": "대시보드"
},
"steps": [ "steps": [
{ {

View File

@@ -16,7 +16,9 @@
"menuNavigation": { "menuNavigation": {
"level1": "인사관리", "level1": "인사관리",
"level2": "휴가관리", "level2": "휴가관리",
"expectedUrl": "/ko/hr/vacation-management" "expectedUrl": "/ko/hr/vacation-management",
"searchWithinParent": true,
"closeOtherMenus": true
}, },
"menuNavigationEnhanced": { "menuNavigationEnhanced": {
"strategy": "scroll-and-search", "strategy": "scroll-and-search",
@@ -47,14 +49,10 @@
"timeout": 120000, "timeout": 120000,
"tags": ["hr", "vacation", "leave", "management"], "tags": ["hr", "vacation", "leave", "management"],
"login": { "auth": {
"url": "https://dev.codebridge-x.com/login", "username": "TestUser5",
"credentials": {
"id": "TestUser5",
"password": "password123!" "password": "password123!"
}, },
"successIndicator": "대시보드"
},
"testData": { "testData": {
"searchKeyword": "홍", "searchKeyword": "홍",

View File

@@ -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가* 패턴 데이터 삭제"
}
}

View File

@@ -15,7 +15,9 @@
"menuNavigation": { "menuNavigation": {
"level1": "회계관리", "level1": "회계관리",
"level2": "거래처원장", "level2": "거래처원장",
"expectedUrl": "/ko/accounting/vendor-ledger" "expectedUrl": "/ko/accounting/vendor-ledger",
"searchWithinParent": true,
"closeOtherMenus": true
}, },
"menuNavigationEnhanced": { "menuNavigationEnhanced": {
"strategy": "scroll-and-search", "strategy": "scroll-and-search",

View File

@@ -15,7 +15,9 @@
"menuNavigation": { "menuNavigation": {
"level1": "회계관리", "level1": "회계관리",
"level2": "거래처관리", "level2": "거래처관리",
"expectedUrl": "/ko/accounting/vendors" "expectedUrl": "/ko/accounting/vendors",
"searchWithinParent": true,
"closeOtherMenus": true
}, },
"menuNavigationEnhanced": { "menuNavigationEnhanced": {
"strategy": "scroll-and-search", "strategy": "scroll-and-search",

View File

@@ -16,7 +16,9 @@
"menuNavigation": { "menuNavigation": {
"level1": "회계관리", "level1": "회계관리",
"level2": "출금관리", "level2": "출금관리",
"expectedUrl": "/ko/accounting/withdrawals" "expectedUrl": "/ko/accounting/withdrawals",
"searchWithinParent": true,
"closeOtherMenus": true
}, },
"menuNavigationEnhanced": { "menuNavigationEnhanced": {
"strategy": "scroll-and-search", "strategy": "scroll-and-search",
@@ -45,14 +47,10 @@
"timeout": 60000, "timeout": 60000,
"tags": ["accounting", "withdrawal", "crud"], "tags": ["accounting", "withdrawal", "crud"],
"login": { "auth": {
"url": "https://dev.codebridge-x.com/login", "username": "TestUser5",
"credentials": {
"id": "TestUser5",
"password": "password123!" "password": "password123!"
}, },
"successIndicator": "대시보드"
},
"steps": [ "steps": [
{ {