From 59bf6c48dea41115da07411b2090dff865c84f78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Tue, 3 Feb 2026 13:40:06 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20=EC=95=8C=EB=A6=BC=EC=84=A4?= =?UTF-8?q?=EC=A0=95,=20=EA=B3=84=EC=A0=95=EC=A0=95=EB=B3=B4,=20=ED=9A=8C?= =?UTF-8?q?=EC=82=AC=EC=A0=95=EB=B3=B4=20=EC=8B=9C=EB=82=98=EB=A6=AC?= =?UTF-8?q?=EC=98=A4=20B=EB=93=B1=EA=B8=89=EC=9C=BC=EB=A1=9C=20=EA=B0=9C?= =?UTF-8?q?=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 개선된 시나리오: - settings-notification.json: C→B (4→12 steps, 알림 토글/저장) - settings-account.json: C→B (4→13 steps, 프로필/비밀번호) - settings-company.json: C→B (4→12 steps, 회사정보 수정) 공통 개선: - searchWithinParent, closeOtherMenus 플래그 추가 - testData, expectedAPIs, requiredVerifications 추가 - UPDATE phase 추가 (설정 수정 및 저장 검증) --- settings-account.json | 154 +++++++++++++++++++++++++++++++++--- settings-company.json | 146 +++++++++++++++++++++++++++++++--- settings-notification.json | 155 +++++++++++++++++++++++++++++++++---- 3 files changed, 420 insertions(+), 35 deletions(-) diff --git a/settings-account.json b/settings-account.json index 3325f4e..8be773e 100644 --- a/settings-account.json +++ b/settings-account.json @@ -5,17 +5,25 @@ "onErrorOnly": true, "captureOn": ["error", "fail", "timeout", "404", "500", "blocked"] }, - "description": "설정 > 계정정보 메뉴의 계정 정보 조회/수정 기능 테스트", + "description": "설정 > 계정정보 메뉴의 계정 정보 조회/수정/비밀번호 변경 기능 테스트", "baseUrl": "https://dev.codebridge-x.com", "menuNavigation": { "level1": "설정", "level2": "계정정보", - "expectedUrl": "/settings/account" + "expectedUrl": "/settings/account", + "searchWithinParent": true, + "closeOtherMenus": true }, "auth": { "username": "TestUser5", "password": "password123!" }, + "testData": { + "update": { + "displayName": "E2E 테스트 사용자", + "phone": "010-1234-5678" + } + }, "steps": [ { "id": 1, @@ -24,7 +32,7 @@ "level1": "설정", "level2": "계정정보", "expected": { - "url_contains": "/settings", + "url_contains": "/settings/account", "visible": ["계정정보", "프로필"] } }, @@ -33,38 +41,164 @@ "name": "필수 검증 #5: 목업 페이지 감지", "action": "verify_not_mockup", "checks": [ - "계정 정보 표시", - "수정 기능 존재" + "계정 정보 폼 표시", + "프로필 이미지 영역 존재", + "수정 버튼 존재" ], "expected": "정상 페이지 (목업 아님)" }, { "id": 3, - "name": "계정 정보 확인", + "name": "계정 정보 폼 구조 확인", "action": "verify_elements", "checks": [ "사용자명 표시", "이메일 표시", - "프로필 이미지" + "연락처 표시", + "프로필 이미지 영역" ], - "expected": "계정 정보 표시" + "expected": "계정 정보 폼 정상 표시" }, { "id": 4, + "phase": "READ", + "name": "[READ] 현재 계정 정보 확인", + "action": "verify_detail", + "checks": [ + "사용자명: TestUser5", + "이메일 표시됨", + "연락처 표시됨" + ], + "expected": "현재 계정 정보 정상 표시" + }, + { + "id": 5, + "phase": "UPDATE", + "name": "[UPDATE] 프로필 수정 모드 진입", + "action": "click", + "target": "button:has-text('수정'), button:has-text('편집')", + "expected": { + "edit_mode": true, + "fields_editable": true + } + }, + { + "id": 6, + "phase": "UPDATE", + "name": "[UPDATE] 표시 이름 수정", + "action": "fill", + "target": "input[name*='displayName'], input[name*='name'], input[placeholder*='이름']", + "value": "E2E 테스트 사용자", + "clear": true + }, + { + "id": 7, + "phase": "UPDATE", + "name": "[UPDATE] 연락처 수정", + "action": "fill", + "target": "input[name*='phone'], input[type='tel']", + "value": "010-1234-5678", + "clear": true + }, + { + "id": 8, + "phase": "UPDATE", + "name": "[UPDATE] 필수 검증 #2: 프로필 저장", + "action": "click", + "target": "button:has-text('저장'), button:has-text('확인')", + "critical": true, + "verify": { + "url_maintained": true, + "no_error_page": true, + "api_call": "PUT /api/v1/users/profile", + "toast": "저장|수정|완료|성공" + }, + "expected": "프로필 저장 완료" + }, + { + "id": 9, + "phase": "UPDATE", + "name": "[UPDATE] 저장 결과 확인", + "action": "verify_detail", + "checks": [ + "표시 이름: E2E 테스트", + "연락처: 010-1234" + ], + "expected": "수정된 정보 반영" + }, + { + "id": 10, "name": "비밀번호 변경 버튼 확인", "action": "verify_elements", "checks": [ "비밀번호 변경 버튼 존재" ], "expected": "비밀번호 변경 버튼 표시" + }, + { + "id": 11, + "name": "비밀번호 변경 모달 열기", + "action": "click", + "target": "button:has-text('비밀번호 변경'), button:has-text('비밀번호')", + "expected": { + "modal_open": true, + "visible": ["현재 비밀번호", "새 비밀번호", "비밀번호 확인"] + } + }, + { + "id": 12, + "name": "비밀번호 변경 모달 닫기", + "action": "close_modal_if_open", + "expected": "모달 닫힘" + }, + { + "id": 13, + "name": "프로필 이미지 변경 확인", + "action": "verify_elements", + "checks": [ + "프로필 이미지 변경 버튼" + ], + "expected": "이미지 변경 기능 표시" + } + ], + "expectedAPIs": [ + { + "method": "GET", + "endpoint": "/api/v1/users/profile", + "description": "프로필 정보 조회" + }, + { + "method": "PUT", + "endpoint": "/api/v1/users/profile", + "description": "프로필 정보 수정" + }, + { + "method": "PUT", + "endpoint": "/api/v1/users/password", + "description": "비밀번호 변경" + }, + { + "method": "POST", + "endpoint": "/api/v1/users/profile/image", + "description": "프로필 이미지 업로드" } ], "requiredVerifications": [ + { + "id": 2, + "name": "저장 버튼", + "steps": [8], + "criteria": "API 호출 + 성공 토스트 + 정보 반영" + }, { "id": 5, "name": "목업 페이지 감지", "steps": [2], - "criteria": "계정 정보, 수정 기능 확인" + "criteria": "계정 정보 폼, 수정 버튼 존재" } - ] + ], + "rollbackPlan": { + "onUpdateFail": "페이지 새로고침으로 원래 값 복원", + "note": "프로필 수정은 실제 데이터에 영향을 줄 수 있으므로 주의" + } } diff --git a/settings-company.json b/settings-company.json index d533ad6..9a2a920 100644 --- a/settings-company.json +++ b/settings-company.json @@ -10,12 +10,20 @@ "menuNavigation": { "level1": "설정", "level2": "회사정보", - "expectedUrl": "/company-info" + "expectedUrl": "/company-info", + "searchWithinParent": true, + "closeOtherMenus": true }, "auth": { "username": "TestUser5", "password": "password123!" }, + "testData": { + "update": { + "companyPhone": "02-1234-5678", + "companyFax": "02-1234-5679" + } + }, "steps": [ { "id": 1, @@ -33,39 +41,155 @@ "name": "필수 검증 #5: 목업 페이지 감지", "action": "verify_not_mockup", "checks": [ - "회사 정보 표시", - "수정 기능 존재" + "회사 정보 폼 표시", + "사업자등록번호 표시", + "수정 버튼 존재" ], "expected": "정상 페이지 (목업 아님)" }, { "id": 3, - "name": "회사 정보 확인", + "name": "회사 정보 폼 구조 확인", "action": "verify_elements", "checks": [ "회사명 표시", "사업자등록번호 표시", + "대표자명 표시", "주소 표시", - "대표자명 표시" + "연락처 표시" ], - "expected": "회사 정보 표시" + "expected": "회사 정보 폼 정상 표시" }, { "id": 4, - "name": "수정 버튼 확인", + "phase": "READ", + "name": "[READ] 현재 회사 정보 확인", + "action": "verify_detail", + "checks": [ + "회사명 표시됨", + "사업자등록번호 표시됨", + "대표자명 표시됨" + ], + "expected": "현재 회사 정보 정상 표시" + }, + { + "id": 5, + "phase": "UPDATE", + "name": "[UPDATE] 회사 정보 수정 모드 진입", + "action": "click", + "target": "button:has-text('수정'), button:has-text('편집')", + "expected": { + "edit_mode": true, + "fields_editable": true + } + }, + { + "id": 6, + "phase": "UPDATE", + "name": "[UPDATE] 회사 전화번호 수정", + "action": "fill", + "target": "input[name*='phone'], input[placeholder*='전화']", + "value": "02-1234-5678", + "clear": true + }, + { + "id": 7, + "phase": "UPDATE", + "name": "[UPDATE] 팩스번호 수정", + "action": "fill", + "target": "input[name*='fax'], input[placeholder*='팩스']", + "value": "02-1234-5679", + "clear": true + }, + { + "id": 8, + "phase": "UPDATE", + "name": "[UPDATE] 필수 검증 #2: 회사 정보 저장", + "action": "click", + "target": "button:has-text('저장'), button:has-text('확인')", + "critical": true, + "verify": { + "url_maintained": true, + "no_error_page": true, + "api_call": "PUT /api/v1/company", + "toast": "저장|수정|완료|성공" + }, + "expected": "회사 정보 저장 완료" + }, + { + "id": 9, + "phase": "UPDATE", + "name": "[UPDATE] 저장 결과 확인", + "action": "verify_detail", + "checks": [ + "전화번호: 02-1234-5678", + "팩스: 02-1234-5679" + ], + "expected": "수정된 정보 반영" + }, + { + "id": 10, + "name": "로고 이미지 영역 확인", "action": "verify_elements", "checks": [ - "수정 버튼 존재" + "회사 로고 표시", + "로고 변경 버튼" ], - "expected": "수정 버튼 표시" + "expected": "로고 영역 표시" + }, + { + "id": 11, + "name": "사업자등록증 영역 확인", + "action": "verify_elements", + "checks": [ + "사업자등록증 첨부", + "파일 업로드 버튼" + ], + "expected": "첨부 영역 표시" + }, + { + "id": 12, + "name": "법인등록번호 확인", + "action": "verify_elements", + "checks": [ + "법인등록번호 표시" + ], + "expected": "법인등록번호 표시" + } + ], + "expectedAPIs": [ + { + "method": "GET", + "endpoint": "/api/v1/company", + "description": "회사 정보 조회" + }, + { + "method": "PUT", + "endpoint": "/api/v1/company", + "description": "회사 정보 수정" + }, + { + "method": "POST", + "endpoint": "/api/v1/company/logo", + "description": "회사 로고 업로드" } ], "requiredVerifications": [ + { + "id": 2, + "name": "저장 버튼", + "steps": [8], + "criteria": "API 호출 + 성공 토스트 + 정보 반영" + }, { "id": 5, "name": "목업 페이지 감지", "steps": [2], - "criteria": "회사 정보, 수정 기능 확인" + "criteria": "회사 정보 폼, 수정 버튼 존재" } - ] + ], + "rollbackPlan": { + "onUpdateFail": "페이지 새로고침으로 원래 값 복원", + "note": "회사 정보 수정은 관리자 권한이 필요할 수 있음" + } } diff --git a/settings-notification.json b/settings-notification.json index 2902c71..79a1665 100644 --- a/settings-notification.json +++ b/settings-notification.json @@ -5,17 +5,27 @@ "onErrorOnly": true, "captureOn": ["error", "fail", "timeout", "404", "500", "blocked"] }, - "description": "설정 > 알림설정 메뉴의 알림 설정 기능 테스트", + "description": "설정 > 알림설정 메뉴의 알림 설정 조회/수정/저장 기능 테스트", "baseUrl": "https://dev.codebridge-x.com", "menuNavigation": { "level1": "설정", "level2": "알림설정", - "expectedUrl": "/settings/notifications" + "expectedUrl": "/settings/notifications", + "searchWithinParent": true, + "closeOtherMenus": true }, "auth": { "username": "TestUser5", "password": "password123!" }, + "testData": { + "update": { + "emailNotification": true, + "pushNotification": true, + "approvalNotification": true, + "attendanceNotification": false + } + }, "steps": [ { "id": 1, @@ -33,38 +43,155 @@ "name": "필수 검증 #5: 목업 페이지 감지", "action": "verify_not_mockup", "checks": [ - "알림 설정 옵션 표시", - "알림 ON/OFF 토글 존재" + "알림 설정 폼 표시", + "알림 ON/OFF 토글 존재", + "저장 버튼 존재" ], "expected": "정상 페이지 (목업 아님)" }, { "id": 3, - "name": "알림 설정 항목 확인", + "name": "알림 설정 폼 구조 확인", "action": "verify_elements", "checks": [ - "이메일 알림 설정", - "푸시 알림 설정", - "알림 유형별 설정" + "이메일 알림 토글", + "푸시 알림 토글", + "결재 알림 설정", + "근태 알림 설정" ], - "expected": "알림 설정 항목 표시" + "expected": "알림 설정 폼 정상 표시" }, { "id": 4, - "name": "저장 버튼 확인", + "phase": "READ", + "name": "[READ] 현재 알림 설정 확인", + "action": "verify_detail", + "checks": [ + "이메일 알림 상태 표시", + "푸시 알림 상태 표시", + "결재 알림 상태 표시" + ], + "expected": "현재 알림 설정 정상 표시" + }, + { + "id": 5, + "phase": "UPDATE", + "name": "[UPDATE] 이메일 알림 토글", + "action": "click", + "target": "input[name*='email'], label:has-text('이메일') input[type='checkbox']", + "expected": { + "toggle_changed": true + } + }, + { + "id": 6, + "phase": "UPDATE", + "name": "[UPDATE] 푸시 알림 토글", + "action": "click", + "target": "input[name*='push'], label:has-text('푸시') input[type='checkbox']", + "expected": { + "toggle_changed": true + } + }, + { + "id": 7, + "phase": "UPDATE", + "name": "[UPDATE] 결재 알림 설정", + "action": "click", + "target": "input[name*='approval'], label:has-text('결재') input[type='checkbox']", + "expected": { + "toggle_changed": true + } + }, + { + "id": 8, + "phase": "UPDATE", + "name": "[UPDATE] 필수 검증 #2: 알림 설정 저장", + "action": "click", + "target": "button:has-text('저장'), button:has-text('적용')", + "critical": true, + "verify": { + "url_maintained": true, + "no_error_page": true, + "api_call": "PUT /api/v1/settings/notifications", + "toast": "저장|적용|완료|성공" + }, + "expected": "알림 설정 저장 완료" + }, + { + "id": 9, + "phase": "UPDATE", + "name": "[UPDATE] 저장 결과 확인", + "action": "verify_detail", + "checks": [ + "변경된 알림 설정 반영" + ], + "expected": "수정된 설정 반영" + }, + { + "id": 10, + "name": "알림 유형별 설정 확인", "action": "verify_elements", "checks": [ - "저장 버튼 존재" + "시스템 알림 설정", + "업무 알림 설정", + "일정 알림 설정" ], - "expected": "저장 버튼 표시" + "expected": "알림 유형별 설정 표시" + }, + { + "id": 11, + "name": "알림 수신 시간 설정 확인", + "action": "verify_elements", + "checks": [ + "수신 시간대 설정", + "방해금지 시간 설정" + ], + "expected": "시간 설정 표시" + }, + { + "id": 12, + "name": "알림 테스트 전송 확인", + "action": "verify_elements", + "checks": [ + "테스트 알림 전송 버튼" + ], + "expected": "테스트 버튼 표시" + } + ], + "expectedAPIs": [ + { + "method": "GET", + "endpoint": "/api/v1/settings/notifications", + "description": "알림 설정 조회" + }, + { + "method": "PUT", + "endpoint": "/api/v1/settings/notifications", + "description": "알림 설정 수정" + }, + { + "method": "POST", + "endpoint": "/api/v1/settings/notifications/test", + "description": "테스트 알림 전송" } ], "requiredVerifications": [ + { + "id": 2, + "name": "저장 버튼", + "steps": [8], + "criteria": "API 호출 + 성공 토스트 + 설정 반영" + }, { "id": 5, "name": "목업 페이지 감지", "steps": [2], - "criteria": "알림 설정, 저장 기능 확인" + "criteria": "알림 설정 폼, 저장 버튼 존재" } - ] + ], + "rollbackPlan": { + "onUpdateFail": "페이지 새로고침으로 원래 값 복원", + "note": "설정 페이지는 수정 후 원복 테스트 권장" + } }