{ "id": "crud-delete-vendor", "name": "거래처 CRUD 삭제 기능 테스트", "status": "BLOCKED", "blockedReason": "거래처관리 페이지에 등록 버튼이 없음 - CREATE 단계 불가", "discoveredOn": "2026-01-29", "alternative": "full-crud-board.json 사용 (자유게시판 CRUD 테스트)", "screenshotPolicy": { "onErrorOnly": true, "captureOn": ["error", "fail", "timeout", "404", "500", "blocked"] }, "description": "거래처관리에서 생성 -> 수정 -> 삭제 전체 CRUD 흐름 테스트. 테스트용 데이터를 생성하고, 수정한 후, 삭제하여 기존 데이터에 영향 없이 삭제 기능을 검증", "baseUrl": "https://dev.codebridge-x.com", "menuNavigation": { "level1": "회계관리", "level2": "거래처관리", "expectedUrl": "/accounting/vendors", "searchWithinParent": true, "closeOtherMenus": true }, "auth": { "username": "TestUser5", "password": "password123!" }, "testPolicy": { "deleteAllowed": true, "deleteCondition": "CRUD 흐름 내에서만 허용 (생성 -> 수정 -> 삭제)", "protectExistingData": true, "description": "이 시나리오에서 생성한 테스트 데이터만 삭제" }, "testData": { "newVendor": { "vendorName": "E2E테스트_삭제용_", "businessNumber": "123-45-67890", "representative": "테스트대표", "vendorType": "매출", "phone": "02-1234-5678", "email": "test@e2etest.com", "address": "서울시 테스트구 테스트동 123" }, "updateData": { "vendorName": "E2E테스트_수정완료_", "representative": "수정대표" }, "uniqueIdentifier": "timestamp를 붙여서 고유성 보장" }, "steps": [ { "id": 1, "name": "메뉴 진입: 회계관리 > 거래처관리", "action": "menu_navigate", "level1": "회계관리", "level2": "거래처관리", "expected": { "url_contains": "/accounting/vendors" } }, { "id": 2, "name": "페이지 로드 대기", "action": "wait", "timeout": 3000 }, { "id": 3, "phase": "CREATE", "name": "[CREATE] 등록 버튼 클릭", "action": "click_button", "target": "등록", "alternatives": ["추가", "신규"], "expected": { "modal": true } }, { "id": 4, "phase": "CREATE", "name": "[CREATE] 거래처명 입력", "action": "fill", "target": "input[name*='name'], input[placeholder*='거래처']", "value": "E2E테스트_삭제용_{timestamp}", "description": "고유한 거래처명 입력" }, { "id": 5, "phase": "CREATE", "name": "[CREATE] 사업자등록번호 입력", "action": "fill", "target": "input[name*='business'], input[placeholder*='사업자']", "value": "123-45-67890" }, { "id": 6, "phase": "CREATE", "name": "[CREATE] 대표자명 입력", "action": "fill", "target": "input[name*='representative'], input[placeholder*='대표']", "value": "테스트대표" }, { "id": 7, "phase": "CREATE", "name": "[CREATE] 거래처 유형 선택", "action": "select_dropdown", "target": "거래처 유형", "value": "매출" }, { "id": 8, "phase": "CREATE", "name": "[CREATE] 전화번호 입력", "action": "fill", "target": "input[name*='phone'], input[placeholder*='전화']", "value": "02-1234-5678" }, { "id": 9, "phase": "CREATE", "name": "[CREATE] 이메일 입력", "action": "fill", "target": "input[name*='email'], input[placeholder*='이메일']", "value": "test@e2etest.com" }, { "id": 10, "phase": "CREATE", "name": "[CREATE] 등록 저장", "action": "click_button", "target": "등록", "alternatives": ["저장", "확인"], "expected": { "toast": true } }, { "id": 11, "phase": "CREATE", "name": "[CREATE] 모달 닫기 확인", "action": "close_modal_if_open" }, { "id": 12, "phase": "CREATE", "name": "[CREATE] 등록 결과 확인 - 검색", "action": "fill", "target": "input[type='search'], input[placeholder*='검색']", "value": "E2E테스트_삭제용", "submit": true }, { "id": 13, "phase": "CREATE", "name": "[CREATE] 등록 결과 확인 - 테이블", "action": "verify_text", "target": "table", "contains": "E2E테스트_삭제용" }, { "id": 14, "phase": "UPDATE", "name": "[UPDATE] 생성된 거래처 행 클릭", "action": "click_row", "target": "E2E테스트_삭제용", "expected": { "detail_view": true } }, { "id": 15, "phase": "UPDATE", "name": "[UPDATE] 수정 모드 진입", "action": "click_button", "target": "수정", "expected": { "url_contains": "mode=edit" } }, { "id": 16, "phase": "UPDATE", "name": "[UPDATE] 거래처명 수정", "action": "edit_field", "target": "input[name*='name'], input[placeholder*='거래처']", "value": "E2E테스트_수정완료_{timestamp}" }, { "id": 17, "phase": "UPDATE", "name": "[UPDATE] 대표자명 수정", "action": "edit_field", "target": "input[name*='representative'], input[placeholder*='대표']", "value": "수정대표" }, { "id": 18, "phase": "UPDATE", "name": "[UPDATE] 수정 저장", "action": "click_button", "target": "저장", "expected": { "toast": true } }, { "id": 19, "phase": "UPDATE", "name": "[UPDATE] 저장 확인 다이얼로그", "action": "click_dialog_confirm" }, { "id": 20, "phase": "UPDATE", "name": "[UPDATE] 수정 결과 확인", "action": "verify_text", "target": "body", "contains": "E2E테스트_수정완료" }, { "id": 21, "phase": "DELETE", "name": "[DELETE] 삭제 버튼 클릭", "critical": true, "action": "click_button", "target": "삭제", "expected": { "dialog": true } }, { "id": 22, "phase": "DELETE", "name": "[DELETE] 삭제 확인 다이얼로그 검증", "action": "verify_dialog", "checks": ["삭제", "확인"] }, { "id": 23, "phase": "DELETE", "name": "[DELETE] 삭제 확인 클릭", "critical": true, "action": "click_dialog_confirm", "expected": { "toast": true, "url_contains": "/accounting/vendors" } }, { "id": 24, "phase": "DELETE", "name": "[DELETE] 모달/다이얼로그 닫기", "action": "close_modal_if_open" }, { "id": 25, "phase": "VERIFY", "name": "[VERIFY] 삭제 결과 확인 - 검색", "action": "fill", "target": "input[type='search'], input[placeholder*='검색']", "value": "E2E테스트_수정완료", "submit": true }, { "id": 26, "phase": "VERIFY", "name": "[VERIFY] 삭제 결과 확인 - 없음", "action": "verify_text", "target": "body", "not_contains": "E2E테스트_수정완료" }, { "id": 27, "phase": "CLEANUP", "name": "[CLEANUP] 검색 초기화", "action": "clear", "target": "input[type='search'], input[placeholder*='검색']" } ], "expectedAPIs": [ { "phase": "CREATE", "method": "POST", "endpoint": "/api/v1/clients", "description": "거래처 등록" }, { "phase": "UPDATE", "method": "PUT", "endpoint": "/api/v1/clients/{id}", "description": "거래처 수정" }, { "phase": "DELETE", "method": "DELETE", "endpoint": "/api/v1/clients/{id}", "description": "거래처 삭제" } ], "rollbackPlan": { "description": "테스트 실패 시 롤백 계획", "onCreateFail": "모달 닫기 -> 다음 테스트 영향 없음", "onUpdateFail": "테스트 데이터 수동 삭제 필요 (DB 또는 UI)", "onDeleteFail": "테스트 데이터 수동 삭제 필요", "cleanupRequired": "E2E테스트_ 로 시작하는 거래처는 테스트 데이터이므로 수동 삭제 가능" } }