Files
sam-scenarios/leave-policy.json

608 lines
16 KiB
JSON
Raw Normal View History

{
"id": "leave-policy",
"name": "설정 - 휴가정책",
"screenshotPolicy": {
"onErrorOnly": true,
"captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
},
"url": "/ko/settings/leave-policy",
"menuNavigation": {
"level1": "설정",
"level2": "휴가정책",
"expectedUrl": "/ko/settings/leave-policy"
},
"menuNavigationEnhanced": {
"strategy": "scroll-and-search",
"level1": {
"text": "설정",
"alternativeNames": ["설정", "Settings", "환경설정"],
"scrollConfig": {
"maxScrollAttempts": 5,
"scrollAmount": 200,
"waitAfterScroll": 300
}
},
"level2": {
"text": "휴가관리",
"alternativeNames": ["휴가관리", "Leave Management", "휴가정책"],
"scrollConfig": {
"maxScrollAttempts": 3,
"scrollAmount": 150,
"waitAfterScroll": 300
}
},
"expectedUrl": "/ko/settings/leave-policy",
"fallbackUrl": "/ko/settings/leave-policy"
},
"expectedAPIs": [
{
"method": "GET",
"path": "/api/v1/leave-policy",
"description": "휴가 정책 조회"
},
{
"method": "PUT",
"path": "/api/v1/leave-policy",
"description": "휴가 정책 저장"
}
],
"steps": [
{
"id": 0,
"name": "사이드바 준비",
"description": "사이드바를 최상단으로 스크롤하여 메뉴 탐색 준비",
"actions": [
{
"type": "execute",
"script": "document.querySelector('.sidebar-scroll, [class*=\"sidebar\"], nav')?.scrollTo({top: 0, behavior: 'instant'})"
},
{ "type": "wait", "duration": 500 }
],
"expected": {
"sidebarReady": true
}
},
{
"id": 1,
"name": "2단계 메뉴 진입: 설정 > 휴가관리",
"description": "설정 > 휴가관리 메뉴로 이동하여 페이지 로드 확인 (scrollAndFind 패턴 사용)",
"actions": [
{
"type": "scrollAndFind",
"target": "설정",
"scrollContainer": ".sidebar-scroll, [class*='sidebar'], nav",
"maxAttempts": 5,
"scrollAmount": 200,
"waitAfterScroll": 300,
"alternativeNames": ["설정", "Settings", "환경설정"]
},
{ "type": "click", "target": "설정" },
{ "type": "wait", "duration": 500 },
{
"type": "scrollAndFind",
"target": "휴가관리",
"scrollContainer": ".sidebar-scroll, [class*='sidebar'], nav",
"maxAttempts": 3,
"scrollAmount": 150,
"waitAfterScroll": 300,
"alternativeNames": ["휴가관리", "Leave Management", "휴가정책"]
},
{ "type": "click", "target": "휴가관리" },
{ "type": "wait", "target": "페이지 로드 완료" }
],
"expected": {
"url": "/ko/settings/leave-policy",
"title": "휴가관리",
"authenticated": true
}
},
{
"id": 2,
"name": "로딩 스피너 표시 확인",
"action": "verify",
"target": "loading",
"expected": "'휴가 정책을 불러오는 중...' 표시"
},
{
"id": 3,
"name": "페이지 제목 확인",
"action": "verify",
"target": "heading",
"expected": "'휴가관리' 텍스트 표시"
},
{
"id": 4,
"name": "설명 텍스트 확인",
"action": "verify",
"target": "description",
"expected": "'휴가 정책을 관리합니다' 텍스트 표시"
},
{
"id": 5,
"name": "저장 버튼 확인",
"action": "verify",
"target": "button",
"expected": "'저장' 버튼 표시"
},
{
"id": 6,
"name": "기준 설정 카드 확인",
"action": "verify",
"target": "card",
"expected": "'기준 설정' 카드 표시"
},
{
"id": 7,
"name": "연차 설정 카드 확인",
"action": "verify",
"target": "card",
"expected": "'연차 설정' 카드 표시"
},
{
"id": 8,
"name": "이월 설정 카드 확인",
"action": "verify",
"target": "card",
"expected": "'이월 설정' 카드 표시"
},
{
"id": 9,
"name": "초기 기준 타입 확인",
"action": "verify",
"target": "combobox",
"expected": "'회계연도' 선택 상태"
},
{
"id": 10,
"name": "초기 기준일 - 월 확인",
"action": "verify",
"target": "combobox",
"expected": "'1월' 선택 상태, 활성화됨"
},
{
"id": 11,
"name": "초기 기준일 - 일 확인",
"action": "verify",
"target": "combobox",
"expected": "'1일' 선택 상태, 활성화됨"
},
{
"id": 12,
"name": "기준 셀렉트 클릭",
"action": "click",
"target": "기준 셀렉트",
"expected": "옵션 리스트 열림",
"critical": true
},
{
"id": 13,
"name": "기준 옵션 개수 확인",
"action": "verify",
"target": "options",
"expected": "회계연도, 입사일 2개 옵션 표시"
},
{
"id": 14,
"name": "입사일 기준 선택",
"action": "select",
"target": "입사일 옵션",
"expected": "'입사일' 선택됨",
"critical": true
},
{
"id": 15,
"name": "입사일 선택 후 - 기준일 월 비활성화 확인",
"action": "verify",
"target": "combobox",
"expected": "기준일 '월' 셀렉트 비활성화 (disabled)"
},
{
"id": 16,
"name": "입사일 선택 후 - 기준일 일 비활성화 확인",
"action": "verify",
"target": "combobox",
"expected": "기준일 '일' 셀렉트 비활성화 (disabled)"
},
{
"id": 17,
"name": "회계연도로 다시 변경",
"action": "select",
"target": "회계연도 옵션",
"expected": "'회계연도' 선택됨"
},
{
"id": 18,
"name": "회계연도 선택 후 - 기준일 월 활성화 확인",
"action": "verify",
"target": "combobox",
"expected": "기준일 '월' 셀렉트 활성화됨"
},
{
"id": 19,
"name": "회계연도 선택 후 - 기준일 일 활성화 확인",
"action": "verify",
"target": "combobox",
"expected": "기준일 '일' 셀렉트 활성화됨"
},
{
"id": 20,
"name": "기준일 월 셀렉트 클릭",
"action": "click",
"target": "기준일 월 셀렉트",
"expected": "월 옵션 리스트 열림"
},
{
"id": 21,
"name": "기준일 월 옵션 개수 확인",
"action": "verify",
"target": "options",
"expected": "1월~12월, 12개 옵션 표시"
},
{
"id": 22,
"name": "기준일 월 변경 (6월)",
"action": "select",
"target": "6월 옵션",
"expected": "'6월' 선택됨",
"critical": true
},
{
"id": 23,
"name": "기준일 일 셀렉트 클릭",
"action": "click",
"target": "기준일 일 셀렉트",
"expected": "일 옵션 리스트 열림"
},
{
"id": 24,
"name": "기준일 일 옵션 개수 확인",
"action": "verify",
"target": "options",
"expected": "1일~31일, 31개 옵션 표시"
},
{
"id": 25,
"name": "기준일 일 변경 (15일)",
"action": "select",
"target": "15일 옵션",
"expected": "'15일' 선택됨",
"critical": true
},
{
"id": 26,
"name": "기본 연차 일수 초기값 확인",
"action": "verify",
"target": "spinbutton",
"expected": "15일 표시"
},
{
"id": 27,
"name": "기본 연차 일수 변경",
"action": "input",
"target": "기본 연차 일수 입력 필드",
"value": "20",
"expected": "20 입력됨",
"critical": true
},
{
"id": 28,
"name": "근속년수당 추가 연차 초기값 확인",
"action": "verify",
"target": "spinbutton",
"expected": "1일 표시"
},
{
"id": 29,
"name": "근속년수당 추가 연차 변경",
"action": "input",
"target": "근속년수당 추가 연차 입력 필드",
"value": "2",
"expected": "2 입력됨",
"critical": true
},
{
"id": 30,
"name": "최대 연차 일수 초기값 확인",
"action": "verify",
"target": "spinbutton",
"expected": "25일 표시"
},
{
"id": 31,
"name": "최대 연차 일수 변경",
"action": "input",
"target": "최대 연차 일수 입력 필드",
"value": "30",
"expected": "30 입력됨",
"critical": true
},
{
"id": 32,
"name": "연차 이월 허용 스위치 초기 상태 확인",
"action": "verify",
"target": "switch",
"expected": "스위치 ON (checked) 상태"
},
{
"id": 33,
"name": "이월 설정 필드 표시 확인",
"action": "verify",
"target": "fields",
"expected": "'최대 이월 일수', '이월 연차 소멸 기간' 필드 표시됨"
},
{
"id": 34,
"name": "최대 이월 일수 초기값 확인",
"action": "verify",
"target": "spinbutton",
"expected": "10일 표시"
},
{
"id": 35,
"name": "이월 연차 소멸 기간 초기값 확인",
"action": "verify",
"target": "spinbutton",
"expected": "3개월 표시"
},
{
"id": 36,
"name": "최대 이월 일수 변경",
"action": "input",
"target": "최대 이월 일수 입력 필드",
"value": "15",
"expected": "15 입력됨",
"critical": true
},
{
"id": 37,
"name": "이월 연차 소멸 기간 변경",
"action": "input",
"target": "이월 연차 소멸 기간 입력 필드",
"value": "6",
"expected": "6 입력됨",
"critical": true
},
{
"id": 38,
"name": "저장 버튼 클릭",
"action": "click",
"target": "저장 버튼",
"expected": "저장 API 호출, 로딩 상태 표시",
"critical": true
},
{
"id": 39,
"name": "저장 완료 토스트 확인",
"action": "verify",
"target": "toast",
"expected": "'휴가 정책이 저장되었습니다.' 토스트 표시"
},
{
"id": 40,
"name": "URL 유지 확인",
"action": "verify",
"target": "url",
"expected": "URL이 /settings/leave-policy 유지 (에러 페이지 이동 없음)"
},
{
"id": 41,
"name": "페이지 새로고침",
"action": "reload",
"target": "page",
"expected": "페이지 새로고침 후 GET API 재호출"
},
{
"id": 42,
"name": "설정 지속성 - 기준 타입",
"action": "verify",
"target": "combobox",
"expected": "'회계연도' 선택 상태 유지"
},
{
"id": 43,
"name": "설정 지속성 - 기준일 월",
"action": "verify",
"target": "combobox",
"expected": "'6월' 선택 상태 유지"
},
{
"id": 44,
"name": "설정 지속성 - 기준일 일",
"action": "verify",
"target": "combobox",
"expected": "'15일' 선택 상태 유지"
},
{
"id": 45,
"name": "설정 지속성 - 기본 연차 일수",
"action": "verify",
"target": "spinbutton",
"expected": "20일 유지"
},
{
"id": 46,
"name": "설정 지속성 - 근속년수당 추가 연차",
"action": "verify",
"target": "spinbutton",
"expected": "2일 유지"
},
{
"id": 47,
"name": "설정 지속성 - 최대 연차 일수",
"action": "verify",
"target": "spinbutton",
"expected": "30일 유지"
},
{
"id": 48,
"name": "설정 지속성 - 이월 허용",
"action": "verify",
"target": "switch",
"expected": "스위치 ON 상태 유지"
},
{
"id": 49,
"name": "설정 지속성 - 최대 이월 일수",
"action": "verify",
"target": "spinbutton",
"expected": "15일 유지"
},
{
"id": 50,
"name": "설정 지속성 - 이월 소멸 기간",
"action": "verify",
"target": "spinbutton",
"expected": "6개월 유지"
},
{
"id": 51,
"name": "연차 이월 허용 스위치 OFF",
"action": "click",
"target": "연차 이월 허용 스위치",
"expected": "스위치 OFF 상태",
"critical": true
},
{
"id": 52,
"name": "이월 OFF 후 - 하위 필드 숨김 확인",
"action": "verify",
"target": "fields",
"expected": "'최대 이월 일수', '이월 연차 소멸 기간' 필드 숨겨짐"
},
{
"id": 53,
"name": "이월 OFF 후 - 안내 문구 숨김 확인",
"action": "verify",
"target": "paragraph",
"expected": "'이월된 연차는...' 안내 문구 숨겨짐"
},
{
"id": 54,
"name": "연차 이월 허용 스위치 다시 ON",
"action": "click",
"target": "연차 이월 허용 스위치",
"expected": "스위치 ON 상태"
},
{
"id": 55,
"name": "이월 ON 후 - 하위 필드 표시 확인",
"action": "verify",
"target": "fields",
"expected": "'최대 이월 일수', '이월 연차 소멸 기간' 필드 표시됨"
},
{
"id": 56,
"name": "이월 ON 후 - 이전 값 유지 확인",
"action": "verify",
"target": "spinbutton",
"expected": "최대 이월 15일, 소멸 기간 6개월 유지"
},
{
"id": 57,
"name": "기준 타입 변경 (입사일)",
"action": "select",
"target": "입사일 옵션",
"expected": "'입사일' 선택됨"
},
{
"id": 58,
"name": "입사일 선택 후 저장",
"action": "click",
"target": "저장 버튼",
"expected": "저장 성공 토스트 표시"
},
{
"id": 59,
"name": "입사일 저장 후 새로고침",
"action": "reload",
"target": "page",
"expected": "페이지 새로고침"
},
{
"id": 60,
"name": "입사일 설정 지속성 확인",
"action": "verify",
"target": "combobox",
"expected": "'입사일' 선택 상태 유지"
},
{
"id": 61,
"name": "입사일 유지 시 - 기준일 비활성화 확인",
"action": "verify",
"target": "combobox",
"expected": "기준일 월/일 셀렉트 비활성화 (disabled)"
},
{
"id": 62,
"name": "숫자 입력 유효성 - 음수 테스트",
"action": "input",
"target": "기본 연차 일수 입력 필드",
"value": "-5",
"expected": "음수 입력 불가 또는 0으로 변환"
},
{
"id": 63,
"name": "숫자 입력 유효성 - 최대값 초과 테스트",
"action": "input",
"target": "기본 연차 일수 입력 필드",
"value": "150",
"expected": "최대값(100) 제한 적용"
},
{
"id": 64,
"name": "숫자 입력 유효성 - 문자 입력 테스트",
"action": "input",
"target": "기본 연차 일수 입력 필드",
"value": "abc",
"expected": "숫자 이외 입력 불가 또는 0으로 변환"
},
{
"id": 65,
"name": "콘솔 에러 확인",
"action": "verify",
"target": "console",
"expected": "콘솔에 에러 로그 없음"
},
{
"id": 66,
"name": "안내 문구 개수 확인",
"action": "verify",
"target": "help-text",
"expected": "3개 카드별 안내 문구 표시"
},
{
"id": 67,
"name": "최종 상태 확인",
"action": "verify",
"target": "page",
"expected": "페이지 정상 동작, 모든 설정 저장됨"
}
],
"testData": {
"settings": {
"fiscal": {
"standardType": "fiscal",
"fiscalStartMonth": 6,
"fiscalStartDay": 15,
"defaultAnnualLeave": 20,
"additionalLeavePerYear": 2,
"maxAnnualLeave": 30,
"carryOverEnabled": true,
"carryOverMaxDays": 15,
"carryOverExpiryMonths": 6
},
"hire": {
"standardType": "hire",
"defaultAnnualLeave": 20,
"additionalLeavePerYear": 2,
"maxAnnualLeave": 30,
"carryOverEnabled": true,
"carryOverMaxDays": 15,
"carryOverExpiryMonths": 6
}
},
"monthOptions": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
"dayOptions": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]
}
}