Files
sam-scenarios/permission-management.json

519 lines
15 KiB
JSON

{
"id": "permission-management",
"name": "설정 - 권한관리",
"screenshotPolicy": {
"onErrorOnly": true,
"captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
},
"url": "/ko/settings/permissions",
"menuNavigation": {
"level1": "설정",
"level2": "권한관리",
"expectedUrl": "/ko/settings/permissions"
},
"menuNavigationEnhanced": {
"strategy": "scroll-and-search",
"description": "사이드바를 스크롤하며 메뉴를 찾고 클릭하여 404를 방지",
"level1": "설정",
"level2": "권한관리",
"alternativeLevel1Names": ["설정", "Settings", "환경설정", "시스템설정", "관리"],
"alternativeLevel2Names": ["권한관리", "권한 관리", "Permissions", "역할관리", "Role Management"],
"scrollConfig": {
"sidebarSelector": "nav, aside, [role='navigation'], .sidebar, #sidebar",
"menuItemSelector": "a, button, [role='menuitem'], [role='treeitem']",
"scrollStep": 200,
"maxScrollAttempts": 10,
"scrollDelay": 300
}
},
"expectedAPIs": [
{
"method": "GET",
"path": "/api/roles",
"description": "역할 목록 조회"
},
{
"method": "GET",
"path": "/api/roles/stats",
"description": "역할 통계 조회"
},
{
"method": "POST",
"path": "/api/roles",
"description": "역할 생성"
},
{
"method": "GET",
"path": "/api/roles/{id}",
"description": "역할 상세 조회"
},
{
"method": "PUT",
"path": "/api/roles/{id}",
"description": "역할 수정"
},
{
"method": "DELETE",
"path": "/api/roles/{id}",
"description": "역할 삭제"
},
{
"method": "GET",
"path": "/api/roles/{id}/permissions",
"description": "역할별 권한 매트릭스 조회"
},
{
"method": "PUT",
"path": "/api/roles/{id}/permissions",
"description": "역할별 권한 저장"
}
],
"steps": [
{
"id": "step-00",
"name": "사이드바 메뉴 탐색 준비",
"description": "사이드바를 최상단으로 스크롤하고 메뉴 구조 파악",
"actions": [
{ "type": "scroll", "target": "sidebar", "direction": "top", "description": "사이드바 최상단으로 스크롤" },
{ "type": "wait", "duration": 500 }
]
},
{
"id": "step-01",
"name": "2단계 메뉴 진입: 설정 > 권한관리",
"description": "사이드바를 스크롤하며 설정 > 권한관리 메뉴를 찾아 클릭",
"actions": [
{
"type": "scrollAndFind",
"target": "설정",
"alternativeTexts": ["설정", "Settings", "환경설정", "시스템설정"],
"scrollContainer": "sidebar",
"maxAttempts": 10,
"description": "스크롤하며 설정 메뉴 찾기"
},
{ "type": "click", "target": "설정", "description": "설정 메뉴 클릭" },
{ "type": "wait", "duration": 500, "description": "서브메뉴 펼쳐지기 대기" },
{
"type": "scrollAndFind",
"target": "권한관리",
"alternativeTexts": ["권한관리", "권한 관리", "Permissions", "역할관리"],
"scrollContainer": "submenu",
"maxAttempts": 5,
"description": "서브메뉴에서 권한관리 찾기"
},
{ "type": "click", "target": "권한관리", "description": "권한관리 메뉴 클릭" },
{ "type": "wait", "target": "페이지 로드 완료", "timeout": 10000 }
],
"expected": {
"url": "/ko/settings/permissions",
"title": "권한관리",
"authenticated": true
},
"verification": [
"설정 메뉴가 펼쳐졌는지 확인",
"권한관리 서브메뉴 클릭 성공",
"페이지 타이틀 '권한관리' 확인",
"설명 '역할 기반 권한을 관리합니다' 확인",
"Shield 아이콘 표시",
"404 에러 없이 페이지 로드 완료"
]
},
{
"id": "step-02",
"name": "통계 카드 확인",
"action": "verify",
"verification": [
"통계 카드 4개 표시: 전체 역할, 공개, 숨김, 사용 중",
"각 카드에 아이콘과 숫자 표시"
]
},
{
"id": "step-03",
"name": "탭 확인",
"action": "verify",
"verification": [
"탭 3개 표시: 전체, 공개, 숨김",
"각 탭에 카운트 표시"
]
},
{
"id": "step-04",
"name": "테이블 구조 확인",
"action": "verify",
"verification": [
"테이블 컬럼 확인: 체크박스, 번호, 역할, 설명, 상태, 등록일",
"역할 등록 버튼 존재",
"검색창 존재 (placeholder: '역할명, 설명 검색...')"
]
},
{
"id": "step-05",
"name": "탭 필터 테스트 - 공개",
"action": "click",
"target": "공개 탭",
"verification": [
"공개 탭 활성화",
"공개 상태 역할만 표시",
"데이터 필터링 확인"
]
},
{
"id": "step-06",
"name": "탭 필터 테스트 - 숨김",
"action": "click",
"target": "숨김 탭",
"verification": [
"숨김 탭 활성화",
"숨김 상태 역할만 표시",
"데이터 필터링 확인"
]
},
{
"id": "step-07",
"name": "탭 필터 테스트 - 전체",
"action": "click",
"target": "전체 탭",
"verification": [
"전체 탭 활성화",
"모든 역할 표시"
]
},
{
"id": "step-08",
"name": "검색 기능 테스트",
"action": "type",
"target": "검색 입력 필드",
"value": "관리자",
"verification": [
"'관리자' 포함된 역할만 표시",
"실시간 필터링 동작"
]
},
{
"id": "step-09",
"name": "검색 초기화",
"action": "clear",
"target": "검색 입력 필드",
"verification": [
"검색어 제거됨",
"전체 목록 복원"
]
},
{
"id": "step-10",
"name": "역할 등록 페이지 이동",
"action": "click",
"target": "역할 등록 버튼",
"verification": [
"URL 변경: /settings/permissions?mode=new",
"페이지 타이틀 변경 확인"
]
},
{
"id": "step-11",
"name": "역할명 입력",
"action": "type",
"target": "권한명 입력 필드",
"value": "E2E 테스트 역할",
"verification": [
"입력 값 반영 확인"
]
},
{
"id": "step-12",
"name": "설명 입력",
"action": "type",
"target": "설명 입력 필드 (있는 경우)",
"value": "E2E 테스트를 위한 역할입니다",
"verification": [
"입력 값 반영 확인"
]
},
{
"id": "step-13",
"name": "상태 선택",
"action": "select",
"target": "상태 드롭다운",
"value": "공개",
"verification": [
"상태 선택 확인"
]
},
{
"id": "step-14",
"name": "역할 등록",
"action": "click",
"target": "등록 버튼",
"critical": true,
"verification": [
"현재 URL 저장",
"등록 버튼 클릭",
"URL 변경 여부 확인 (에러 페이지 이동 방지)",
"에러 텍스트 없음 ('페이지를 찾을 수 없습니다', '404', 'Not Found' 등)",
"API 호출 확인: POST /api/roles",
"API 응답 200 OK 확인",
"목록 페이지로 리다이렉트 또는 상세 페이지 이동",
"성공 토스트 메시지 확인"
]
},
{
"id": "step-15",
"name": "목록에서 신규 역할 확인",
"action": "verify",
"verification": [
"목록 페이지 진입 (URL: /settings/permissions)",
"'E2E 테스트 역할' 목록에 표시",
"통계 카드 숫자 증가 확인"
]
},
{
"id": "step-16",
"name": "역할 상세 페이지 이동",
"action": "click",
"target": "E2E 테스트 역할 행",
"verification": [
"URL 변경: /settings/permissions/{id}",
"페이지 타이틀 '권한 상세' 확인",
"기본 정보 섹션 표시",
"메뉴별 권한 테이블 표시"
]
},
{
"id": "step-17",
"name": "기본 정보 확인",
"action": "verify",
"verification": [
"권한명 입력 필드에 'E2E 테스트 역할' 표시",
"상태 드롭다운에 '공개' 선택됨",
"삭제 버튼 존재",
"수정 버튼 존재",
"목록으로 버튼 존재"
]
},
{
"id": "step-18",
"name": "권한 테이블 구조 확인",
"action": "verify",
"verification": [
"테이블 헤더: 메뉴, 조회, 생성, 수정, 삭제, 승인, 내보내기, 관리",
"각 헤더에 전체 선택 체크박스 존재",
"메뉴 목록 표시 (부모 메뉴 접기/펼치기 아이콘 있음)",
"각 메뉴별 권한 체크박스 존재"
]
},
{
"id": "step-19",
"name": "부모 메뉴 펼치기",
"action": "click",
"target": "첫 번째 부모 메뉴 펼치기 아이콘",
"verification": [
"자식 메뉴 목록 표시",
"아이콘이 ChevronDown으로 변경",
"자식 메뉴는 들여쓰기되어 표시"
]
},
{
"id": "step-20",
"name": "개별 권한 체크박스 토글",
"action": "click",
"target": "첫 번째 메뉴의 '조회' 체크박스",
"verification": [
"체크박스 상태 변경",
"자동 저장 동작 (API 호출 확인)"
]
},
{
"id": "step-21",
"name": "컬럼 전체 선택",
"action": "click",
"target": "'조회' 헤더 체크박스",
"verification": [
"모든 메뉴의 '조회' 권한 체크",
"자동 저장 동작 확인"
]
},
{
"id": "step-22",
"name": "권한명 수정",
"action": "type",
"target": "권한명 입력 필드",
"value": "E2E 테스트 역할 (수정됨)",
"verification": [
"입력 값 변경 확인"
]
},
{
"id": "step-23",
"name": "권한명 수정 저장 (blur)",
"action": "blur",
"target": "권한명 입력 필드",
"verification": [
"자동 저장 동작 (API 호출)",
"PUT /api/roles/{id} 확인"
]
},
{
"id": "step-24",
"name": "상태 변경",
"action": "select",
"target": "상태 드롭다운",
"value": "숨김",
"verification": [
"상태 변경 확인",
"자동 저장 동작"
]
},
{
"id": "step-25",
"name": "목록으로 이동",
"action": "click",
"target": "목록으로 버튼",
"verification": [
"URL 변경: /settings/permissions",
"목록 페이지 표시"
]
},
{
"id": "step-26",
"name": "수정된 역할 확인",
"action": "verify",
"verification": [
"'E2E 테스트 역할 (수정됨)' 목록에 표시",
"상태 Badge '숨김'으로 표시"
]
},
{
"id": "step-27",
"name": "숨김 탭으로 이동",
"action": "click",
"target": "숨김 탭",
"verification": [
"숨김 상태 역할만 표시",
"'E2E 테스트 역할 (수정됨)' 표시됨"
]
},
{
"id": "step-28",
"name": "전체 탭으로 복귀",
"action": "click",
"target": "전체 탭",
"verification": [
"모든 역할 표시"
]
},
{
"id": "step-29",
"name": "체크박스 선택",
"action": "click",
"target": "E2E 테스트 역할 체크박스",
"verification": [
"체크박스 선택됨",
"'1개 항목 선택됨' 표시",
"'선택 삭제 (1)' 버튼 표시",
"작업 컬럼 추가 (권한 설정, 수정, 삭제 버튼)"
]
},
{
"id": "step-30",
"name": "단일 삭제 - 작업 컬럼 삭제 버튼",
"action": "click",
"target": "작업 컬럼의 삭제 버튼",
"verification": [
"삭제 확인 다이얼로그 표시",
"다이얼로그 제목: '역할 삭제'",
"경고 메시지: '이 역할을 사용 중인 사원이 있으면 해당 사원의 역할이 초기화됩니다.'"
]
},
{
"id": "step-31",
"name": "삭제 취소",
"action": "click",
"target": "다이얼로그 취소 버튼",
"verification": [
"다이얼로그 닫힘",
"역할 삭제되지 않음"
]
},
{
"id": "step-32",
"name": "일괄 삭제 버튼 클릭",
"action": "click",
"target": "선택 삭제 버튼",
"verification": [
"삭제 확인 다이얼로그 표시",
"'선택한 1개의 역할을 삭제하시겠습니까?' 메시지"
]
},
{
"id": "step-33",
"name": "일괄 삭제 실행",
"action": "click",
"target": "다이얼로그 삭제 버튼",
"critical": true,
"verification": [
"삭제 중 로딩 표시 ('삭제 중...')",
"API 호출: DELETE /api/roles/{id}",
"API 응답 200 OK 확인",
"다이얼로그 닫힘",
"성공 토스트 메시지 확인",
"목록에서 삭제된 역할 제거됨",
"통계 카드 숫자 감소 확인"
]
},
{
"id": "step-34",
"name": "체크박스 전체 선택",
"action": "click",
"target": "테이블 헤더 체크박스",
"verification": [
"현재 페이지의 모든 항목 선택",
"'N개 항목 선택됨' 표시",
"'선택 삭제 (N)' 버튼 표시"
]
},
{
"id": "step-35",
"name": "전체 선택 해제",
"action": "click",
"target": "테이블 헤더 체크박스",
"verification": [
"모든 선택 해제",
"'선택 삭제' 버튼 숨김",
"작업 컬럼 제거"
]
},
{
"id": "step-36",
"name": "페이지네이션 테스트 (데이터 충분 시)",
"action": "verify",
"verification": [
"페이지네이션 컨트롤 존재 여부 확인",
"페이지당 20개 항목 표시",
"총 페이지 수 표시"
]
},
{
"id": "step-37",
"name": "반응형 테스트 - 모바일",
"action": "resize",
"width": 375,
"height": 667,
"verification": [
"모바일 카드 레이아웃으로 변경",
"각 카드에 역할명, 상태, 설명, 등록일 표시",
"카드에 권한 설정, 수정 버튼 존재"
]
}
],
"testData": {
"role": {
"name": "E2E 테스트 역할",
"description": "E2E 테스트를 위한 역할입니다",
"status": "active"
}
},
"cleanup": {
"description": "Step-33에서 테스트 데이터 삭제 완료"
}
}