{
  "issueId": "3522",
  "environment": "dev",
  "source": "local checklist",
  "sourceText": "주홍석님의 QA 요청입니다\n조지민 프로님 안녕하세요, 비스킷 링크 개발계 QA 요청드립니다\n[1] QA 요청 배경\n- https://itsm.bix.bz/issues/3522\n- 재QA 요청입니다. 프리셋 권한은 시스템메뉴 이동 > 사용자 프리셋 관리 > 사용자 프리셋 관리에서 확인합니다. 정산내역 버튼과 운영메뉴 이동 > 정산관리 > 정산내역 메뉴 접근이 정산 조회 권한 기준으로 동작하는지 재확인 부탁드립니다.\n[2] 사전 데이터\n- 개발계에서 운영메뉴 이동 > 거래관리 > 거래내역 화면에 표시되는 거래와 해당 거래에 연결된 정산내역이 존재하는 테스트 데이터 준비\n- admin, ta, co, bo 각각 로그인 가능한 계정 준비\n- admin, ta, co, bo별로 정산 조회 권한이 부여된 상태와 회수된 상태를 비교할 수 있도록 계정 또는 프리셋 상태 준비\n- 권한 회수 상태에서는 운영메뉴 이동 > 거래관리 > 거래내역 메뉴 접근 권한은 유지하고, 기능권한 탭의 정산내역 > 정산 조회 권한만 회수\n[3] 사전 작업\n- 시스템메뉴 이동 > 사용자 프리셋 관리 > 사용자 프리셋 관리 메뉴 진입\n- 프리셋 선택: admin은 USE_SYSTEM, ta는 ta, co는 부서상용버전, bo는 ㅇㅇ\n- 사용자 프리셋 관리 > 프리셋 권한 설정 카드 > 기능권한 탭 진입\n- 기능권한 탭에서 정산내역 > 정산 조회 버튼으로 권한 부여/회수 상태 설정\n- 권한 부여/회수 후 대상 계정 재로그인 또는 새로고침으로 권한 반영 상태 확인\n[4] 권한별 테스트\n- admin\n- ta\n- co\n- bo\n[5] 검증 대상\n- 시스템메뉴 이동 > 사용자 프리셋 관리 > 사용자 프리셋 관리\n- 사용자 프리셋 관리 > 프리셋 권한 설정 카드 > 기능권한 탭\n- 기능권한 탭 > 정산내역 > 정산 조회\n- 운영메뉴 이동 > 거래관리 > 거래내역\n- 운영메뉴 이동 > 거래관리 > 거래내역 화면의 정산내역 버튼/모달\n- 운영메뉴 이동 > 정산관리 > 정산내역\n- 권한 없음 안내 토스트\n[6] 체크리스트\n- 시스템메뉴 이동 > 사용자 프리셋 관리 > 사용자 프리셋 관리에서 각 프리셋 선택 확인\n- 기능권한 탭 > 정산내역 > 정산 조회 권한 부여/회수 확인\n- 권한 부여 계정은 운영메뉴 이동 > 거래관리 > 거래내역에서 정산내역 버튼 노출 확인\n- 권한 회수 계정은 같은 화면에서 정산내역 버튼 미노출 확인\n- 권한 회수 계정이 운영메뉴 이동 > 정산관리 > 정산내역 진입 시 우하단 권한이 없습니다 문구 노출 확인\n- admin도 동일하게 권한 유무 기준으로 버튼/메뉴 접근이 달라지는지 확인",
  "scope": "dev 환경에서 ADMIN/TA/CO/BO 계정의 사용자 프리셋 정산 조회 권한 부여/회수 상태에 따라 거래내역 정산내역 버튼과 정산내역 메뉴 접근이 달라지는지 재검증한다.",
  "checklist": [
    "시스템메뉴 이동 > 사용자 프리셋 관리 > 사용자 프리셋 관리에서 각 프리셋 선택 확인",
    "기능권한 탭 > 정산내역 > 정산 조회 권한 부여/회수 확인",
    "권한 부여 계정은 운영메뉴 이동 > 거래관리 > 거래내역에서 정산내역 버튼 노출 확인",
    "권한 회수 계정은 같은 화면에서 정산내역 버튼 미노출 확인",
    "권한 회수 계정이 운영메뉴 이동 > 정산관리 > 정산내역 진입 시 우하단 권한이 없습니다 문구 노출 확인",
    "admin도 동일하게 권한 유무 기준으로 버튼/메뉴 접근이 달라지는지 확인"
  ],
  "roles": [
    "TA",
    "CO",
    "BO"
  ],
  "setupSteps": [
    {
      "name": "정산 조회 권한 부여/회수 상태 준비",
      "kind": "permission-toggle",
      "role": "ADMIN",
      "application": "admin",
      "targetRoles": [
        "ADMIN",
        "TA",
        "CO",
        "BO"
      ],
      "description": "USE_SYSTEM, ta, 부서상용버전, ㅇㅇ 프리셋에서 기능권한 > 정산내역 > 정산 조회 권한을 임시로 부여/회수하고, QA 종료 후 시작 전 권한 상태로 복구한다.",
      "required": true,
      "mutation": "temporary",
      "guardEnv": "QA_3522_ALLOW_PRESET_MUTATION",
      "restore": {
        "required": true,
        "description": "권한을 변경한 경우 QA 종료 후 시작 전 권한 상태로 복구한다."
      }
    }
  ],
  "pages": [
    {
      "name": "사용자 프리셋 관리",
      "application": "admin",
      "roles": [
        "ADMIN"
      ],
      "path": "/business/member-preset",
      "tenantParam": "tenantId",
      "recordsSelector": "main, table tbody tr, [role='row']",
      "expectedVisibleTextsByRole": {
        "ADMIN": [
          "사용자 프리셋",
          "프리셋 권한 설정",
          "기능 권한"
        ]
      }
    },
    {
      "name": "거래내역",
      "application": "admin",
      "roles": [
        "TA",
        "CO",
        "BO"
      ],
      "path": "/trade-history-v2",
      "tenantParam": "tenantId",
      "recordsSelector": "table tbody tr, [role='row'], main",
      "detailOpenSelector": "button:has-text('정산내역'), a:has-text('정산내역'), [role='button']:has-text('정산내역')",
      "dataRequestUrlPattern": "transaction|trade|settlement"
    },
    {
      "name": "정산내역",
      "application": "admin",
      "roles": [
        "TA",
        "CO",
        "BO"
      ],
      "path": "/settlement-history/settlement-details",
      "tenantParam": "tenantId",
      "recordsSelector": "table tbody tr, [role='row'], main",
      "accessDeniedText": [
        "권한이 없습니다",
        "권한 없음",
        "접근 권한",
        "403",
        "Forbidden"
      ],
      "dataRequestUrlPattern": "settlement"
    }
  ],
  "scenario": "settlement-button-permission"
}
