{"numFailedTestSuites":0,"numFailedTests":0,"numPassedTestSuites":3,"numPassedTests":96,"numPendingTestSuites":0,"numPendingTests":0,"numRuntimeErrorTestSuites":0,"numTodoTests":0,"numTotalTestSuites":3,"numTotalTests":96,"openHandles":[],"snapshot":{"added":0,"didUpdate":false,"failure":false,"filesAdded":0,"filesRemoved":0,"filesRemovedList":[],"filesUnmatched":0,"filesUpdated":0,"matched":0,"total":0,"unchecked":0,"uncheckedKeysByFile":[],"unmatched":0,"updated":0},"startTime":1792648727702,"success":true,"testResults":[{"assertionResults":[{"ancestorTitles":["범위 감시 함수"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"범위 감시 함수 목록 조건은 범위 키를 절 목록으로 싣는다","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"목록 조건은 범위 키를 절 목록으로 싣는다"},{"ancestorTitles":["범위 감시 함수"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"범위 감시 함수 범위 키가 없으면 목록 조건을 만들지 않고 던진다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"범위 키가 없으면 목록 조건을 만들지 않고 던진다"},{"ancestorTitles":["범위 감시 함수"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"범위 감시 함수 목록 조건도 종류의 필수 키가 빠지면 던진다 (기업 경계 키 누락)","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"목록 조건도 종류의 필수 키가 빠지면 던진다 (기업 경계 키 누락)"},{"ancestorTitles":["범위 감시 함수"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"범위 감시 함수 단건 판정은 원천이 같으면 allow 다","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"단건 판정은 원천이 같으면 allow 다"},{"ancestorTitles":["범위 감시 함수"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"범위 감시 함수 단건 판정은 원천이 다르면 deny 다","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"단건 판정은 원천이 다르면 deny 다"},{"ancestorTitles":["범위 감시 함수"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"범위 감시 함수 ORG 신원에 orgPath 가 없으면 deny 다 (orgPath 누락 거부)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"ORG 신원에 orgPath 가 없으면 deny 다 (orgPath 누락 거부)"},{"ancestorTitles":["범위 감시 함수"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"범위 감시 함수 자동 칸 행은 판정하지 않고 undeclared 다","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"자동 칸 행은 판정하지 않고 undeclared 다"},{"ancestorTitles":["범위 감시 함수 · 조직 경로 (구분자 경계)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"범위 감시 함수 · 조직 경로 (구분자 경계) 구분자 경계: 실제 ULID 세 단계 경로의 상위 조회는 하위 행을 허용한다","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"구분자 경계: 실제 ULID 세 단계 경로의 상위 조회는 하위 행을 허용한다"},{"ancestorTitles":["범위 감시 함수 · 조직 경로 (구분자 경계)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"범위 감시 함수 · 조직 경로 (구분자 경계) 구분자 경계: 형제 세그먼트 (/A/B/ 대 /A/BC/) 는 차단한다","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"구분자 경계: 형제 세그먼트 (/A/B/ 대 /A/BC/) 는 차단한다"},{"ancestorTitles":["범위 감시 함수 · 조직 경로 (구분자 경계)"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"범위 감시 함수 · 조직 경로 (구분자 경계) 구분자 경계: 1/2 는 1/23 과 다르다 (1/23 행은 차단한다)","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"구분자 경계: 1/2 는 1/23 과 다르다 (1/23 행은 차단한다)"},{"ancestorTitles":["범위 감시 함수 · 조직 경로 (구분자 경계)"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"범위 감시 함수 · 조직 경로 (구분자 경계) 빈 orgPath 와 루트 / 는 정규화 뒤에도 던진다","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"빈 orgPath 와 루트 / 는 정규화 뒤에도 던진다"},{"ancestorTitles":["범위 감시 함수 · 조직 경로 (구분자 경계)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"범위 감시 함수 · 조직 경로 (구분자 경계) 행의 orgPath 가 형식에 맞지 않으면 deny 다 (LIKE 와일드카드 행을 허용하지 않는다)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"행의 orgPath 가 형식에 맞지 않으면 deny 다 (LIKE 와일드카드 행을 허용하지 않는다)"},{"ancestorTitles":["범위 감시 함수 · 단건 3의미 (합치지 않는다)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"범위 감시 함수 · 단건 3의미 (합치지 않는다) memId 동일: 소유 회원이 같을 때만 allow, 관리자도 이 의미로는 allow 하지 않는다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"memId 동일: 소유 회원이 같을 때만 allow, 관리자도 이 의미로는 allow 하지 않는다"},{"ancestorTitles":["범위 감시 함수 · 단건 3의미 (합치지 않는다)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"범위 감시 함수 · 단건 3의미 (합치지 않는다) 주문 소유자만: 소유 회원 일치만 allow, 관리자 신원은 주문 판정을 열지 않는다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"주문 소유자만: 소유 회원 일치만 allow, 관리자 신원은 주문 판정을 열지 않는다"},{"ancestorTitles":["범위 감시 함수 · 단건 3의미 (합치지 않는다)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"범위 감시 함수 · 단건 3의미 (합치지 않는다) 소유자 또는 관리자 열람: 관리자는 allow, 그 밖은 소유 회원 일치","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"소유자 또는 관리자 열람: 관리자는 allow, 그 밖은 소유 회원 일치"},{"ancestorTitles":["범위 감시 함수 · 단건 3의미 (합치지 않는다)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"범위 감시 함수 · 단건 3의미 (합치지 않는다) 자동 칸 행은 단건 3의미 모두 undeclared 다","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"자동 칸 행은 단건 3의미 모두 undeclared 다"},{"ancestorTitles":["범위 감시 함수 · ORG 쌍 키"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"범위 감시 함수 · ORG 쌍 키 ORG 신원은 자동 칸이어도 orgPath 누락을 먼저 거부한다","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"ORG 신원은 자동 칸이어도 orgPath 누락을 먼저 거부한다"},{"ancestorTitles":["범위 감시 함수 · ORG 쌍 키"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"범위 감시 함수 · ORG 쌍 키 ORG 판정은 agcId · orgPath 쌍 키가 없으면 던진다","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"ORG 판정은 agcId · orgPath 쌍 키가 없으면 던진다"},{"ancestorTitles":["범위 감시 함수 · 범위 키 누락 (R2)"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"범위 감시 함수 · 범위 키 누락 (R2) 범위 키 목록이 비면 단건 판정도 던진다 (allow 를 내지 않는다)","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"범위 키 목록이 비면 단건 판정도 던진다 (allow 를 내지 않는다)"},{"ancestorTitles":["범위 감시 함수 · 범위 키 누락 (R2)"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"범위 감시 함수 · 범위 키 누락 (R2) 종류의 필수 키가 빠진 호출은 던진다 (고른 키만 비교하지 않는다)","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"종류의 필수 키가 빠진 호출은 던진다 (고른 키만 비교하지 않는다)"},{"ancestorTitles":["범위 감시 함수 · 범위 키 누락 (R2)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"범위 감시 함수 · 범위 키 누락 (R2) 필수 키를 다 넘기면 추가 키가 있어도 판정한다","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"필수 키를 다 넘기면 추가 키가 있어도 판정한다"},{"ancestorTitles":["범위 감시 함수 · M6c 단건 신원별 키"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"범위 감시 함수 · M6c 단건 신원별 키 단건 영업 sagId: 행 sagId 가 신원 sagId 와 같을 때만 allow 다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"단건 영업 sagId: 행 sagId 가 신원 sagId 와 같을 때만 allow 다"},{"ancestorTitles":["범위 감시 함수 · M6c 단건 신원별 키"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"범위 감시 함수 · M6c 단건 신원별 키 단건 기업 agcId: 기업 최고는 행 agcId 가 같을 때만 allow 다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"단건 기업 agcId: 기업 최고는 행 agcId 가 같을 때만 allow 다"},{"ancestorTitles":["범위 감시 함수 · M6c 단건 신원별 키"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"범위 감시 함수 · M6c 단건 신원별 키 단건 조직관리자 orgPath: 기업이 같고 행 경로가 신원 경로 아래일 때만 allow 다","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"단건 조직관리자 orgPath: 기업이 같고 행 경로가 신원 경로 아래일 때만 allow 다"},{"ancestorTitles":["범위 감시 함수 · M6c 단건 신원별 키"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"범위 감시 함수 · M6c 단건 신원별 키 조직 접두 경계 (단건): 신원 /A/B/ 는 /A/B/C/ 를 덮고 /A/BC/ 는 덮지 않는다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"조직 접두 경계 (단건): 신원 /A/B/ 는 /A/B/C/ 를 덮고 /A/BC/ 는 덮지 않는다"},{"ancestorTitles":["범위 감시 함수 · M6c 단건 신원별 키"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"범위 감시 함수 · M6c 단건 신원별 키 기업 행 조직관리자 거부: 행 orgPath 가 없으면 조직관리자는 deny 다 (정책 3)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"기업 행 조직관리자 거부: 행 orgPath 가 없으면 조직관리자는 deny 다 (정책 3)"},{"ancestorTitles":["범위 감시 함수 · M6c 단건 신원별 키"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"범위 감시 함수 · M6c 단건 신원별 키 키 부재 deny: 행이나 신원에 키가 없으면 던지지 않고 deny 를 낸다","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"키 부재 deny: 행이나 신원에 키가 없으면 던지지 않고 deny 를 낸다"},{"ancestorTitles":["범위 감시 함수 · M6c 단건 신원별 키"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"범위 감시 함수 · M6c 단건 신원별 키 관리자 memId 거부: 관리자 신원은 memId 동일 · 주문 소유자만 의미에서 deny 다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"관리자 memId 거부: 관리자 신원은 memId 동일 · 주문 소유자만 의미에서 deny 다"},{"ancestorTitles":["범위 감시 함수 · M6c 단건 신원별 키"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"범위 감시 함수 · M6c 단건 신원별 키 3의미 동일 키: 영업 · 기업 · 조직관리자의 판정은 의미 이름과 무관하다","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"status":"passed","title":"3의미 동일 키: 영업 · 기업 · 조직관리자의 판정은 의미 이름과 무관하다"},{"ancestorTitles":["범위 감시 함수 · M6c 단건 신원별 키"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"범위 감시 함수 · M6c 단건 신원별 키 memId 경로 보존: 회원 신원은 M6b 와 같은 memId 비교 결과를 낸다","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"memId 경로 보존: 회원 신원은 M6b 와 같은 memId 비교 결과를 낸다"},{"ancestorTitles":["범위 감시 함수 · M6c 단건 신원별 키"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"범위 감시 함수 · M6c 단건 신원별 키 corpScope 미지값 deny: 기업 신원의 알 수 없는 corpScope 는 판정 신원이 없다 (null)","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"corpScope 미지값 deny: 기업 신원의 알 수 없는 corpScope 는 판정 신원이 없다 (null)"},{"ancestorTitles":["범위 감시 함수 · M6c 단건 신원별 키"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"범위 감시 함수 · M6c 단건 신원별 키 빈 신원 orgPath deny: 조직관리자 신원의 orgPath 가 비면 행과 무관하게 deny 다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"빈 신원 orgPath deny: 조직관리자 신원의 orgPath 가 비면 행과 무관하게 deny 다"}],"endTime":1792648728182,"message":"","name":"/home/madsc/work/insuniverse-temp/.worktrees/admin-rbac/insuniverse-server/apps/api/src/modules/auth/access-control/scope-monitor.spec.ts","startTime":1792648728012,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["강제 ON · 소속 쓰기 (영업 범위)"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"강제 ON · 소속 쓰기 (영업 범위) 일괄 전건 거부: 영업 범위 밖 회원이 하나라도 있으면 403 이고 쓰기 0회다","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"일괄 전건 거부: 영업 범위 밖 회원이 하나라도 있으면 403 이고 쓰기 0회다"},{"ancestorTitles":["강제 ON · 소속 쓰기 (영업 범위)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"강제 ON · 소속 쓰기 (영업 범위) 일괄 전건 거부: 조직관리자 지정도 범위 밖 회원이 섞이면 쓰기 0회다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"일괄 전건 거부: 조직관리자 지정도 범위 밖 회원이 섞이면 쓰기 0회다"},{"ancestorTitles":["강제 ON · 소속 쓰기 (영업 범위)"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"강제 ON · 소속 쓰기 (영업 범위) 정상 경로: 담당 범위 회원만이면 같은 트랜잭션 tx 로 잠그고 판정하고 바꾼다","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"정상 경로: 담당 범위 회원만이면 같은 트랜잭션 tx 로 잠그고 판정하고 바꾼다"},{"ancestorTitles":["강제 ON · 소속 쓰기 (영업 범위)"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"강제 ON · 소속 쓰기 (영업 범위) 잠금 순서: 회원 → 담당 기업 → 회원 현재 소속 조직 → 목적지 조직 (판정 전에 끝난다)","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"잠금 순서: 회원 → 담당 기업 → 회원 현재 소속 조직 → 목적지 조직 (판정 전에 끝난다)"},{"ancestorTitles":["강제 ON · 소속 쓰기 (영업 범위)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"강제 ON · 소속 쓰기 (영업 범위) 음성: 범위 인자를 빼면 (담당 sagId 없음) 판정 대상 수가 어긋나 거부한다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"음성: 범위 인자를 빼면 (담당 sagId 없음) 판정 대상 수가 어긋나 거부한다"},{"ancestorTitles":["강제 ON · 소속 쓰기 (영업 범위)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"강제 ON · 소속 쓰기 (영업 범위) 사전 판정: 범위 밖이면 트랜잭션을 열기 전에 거부한다 (잠금 0회)","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"사전 판정: 범위 밖이면 트랜잭션을 열기 전에 거부한다 (잠금 0회)"},{"ancestorTitles":["강제 ON · 소속 쓰기 (영업 범위)"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"강제 ON · 소속 쓰기 (영업 범위) 연결 1개: 영업 배정의 판정 조회 (목적지 조직 · 회원 기업) 는 모두 같은 tx 를 받는다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"연결 1개: 영업 배정의 판정 조회 (목적지 조직 · 회원 기업) 는 모두 같은 tx 를 받는다"},{"ancestorTitles":["강제 ON · 소속 쓰기 (영업 범위)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"강제 ON · 소속 쓰기 (영업 범위) 연결 1개: 기업 배정의 현행 판정 (회원 기업 · 목적지 조직) 도 같은 tx 를 받는다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"연결 1개: 기업 배정의 현행 판정 (회원 기업 · 목적지 조직) 도 같은 tx 를 받는다"},{"ancestorTitles":["강제 ON · 소속 쓰기 (영업 범위)"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"강제 ON · 소속 쓰기 (영업 범위) 사전 판정 (corp): 담당 기업 밖 회원이 섞이면 트랜잭션도 잠금도 열기 전에 거부한다","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"사전 판정 (corp): 담당 기업 밖 회원이 섞이면 트랜잭션도 잠금도 열기 전에 거부한다"},{"ancestorTitles":["강제 ON · 소속 쓰기 (영업 범위)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"강제 ON · 소속 쓰기 (영업 범위) 신원 없음: 판정 신원이 없으면 판정 없이 통과하지 않고 거부한다 (쓰기 0회)","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"신원 없음: 판정 신원이 없으면 판정 없이 통과하지 않고 거부한다 (쓰기 0회)"},{"ancestorTitles":["강제 ON · 소속 쓰기 (영업 범위)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"강제 ON · 소속 쓰기 (영업 범위) 숫자가 아닌 sagId: 판정 조회 (SQL) 전에 403 이다","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"숫자가 아닌 sagId: 판정 조회 (SQL) 전에 403 이다"}],"endTime":1792648728923,"message":"","name":"/home/madsc/work/insuniverse-temp/.worktrees/admin-rbac/insuniverse-server/apps/api/src/modules/auth/access-control/scope-enforce.spec.ts","startTime":1792648728011,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["핸들러 범위 절 · 목록 (I1 · I4)"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 목록 (I1 · I4) ON: 영업 전 기업 목록(I1)은 담당 sagId 절을 저장소에 넘긴다","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"ON: 영업 전 기업 목록(I1)은 담당 sagId 절을 저장소에 넘긴다"},{"ancestorTitles":["핸들러 범위 절 · 목록 (I1 · I4)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 목록 (I1 · I4) OFF: 같은 요청도 저장소 인자는 현행과 같이 비어 있다 (응답 불변)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"OFF: 같은 요청도 저장소 인자는 현행과 같이 비어 있다 (응답 불변)"},{"ancestorTitles":["핸들러 범위 절 · 목록 (I1 · I4)"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 목록 (I1 · I4) OFF: 구독 실패 목록(I4)도 저장소 인자가 null 이다 (응답 불변)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"OFF: 구독 실패 목록(I4)도 저장소 인자가 null 이다 (응답 불변)"},{"ancestorTitles":["핸들러 범위 절 · 목록 (I1 · I4)"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 목록 (I1 · I4) ON: 담당 영업 키가 없는 영업 신원은 500 이 아니라 403 으로 거부된다 (목록 호출 0회)","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"ON: 담당 영업 키가 없는 영업 신원은 500 이 아니라 403 으로 거부된다 (목록 호출 0회)"},{"ancestorTitles":["핸들러 범위 절 · 목록 (I1 · I4)"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 목록 (I1 · I4) ON: 구독 실패 목록(I4)은 절을 서비스에 넘기고, 목록과 count 는 같은 범위 조건을 쓴다","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"ON: 구독 실패 목록(I4)은 절을 서비스에 넘기고, 목록과 count 는 같은 범위 조건을 쓴다"},{"ancestorTitles":["핸들러 범위 절 · 목록 (I1 · I4)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 목록 (I1 · I4) 범위 절 생성기는 같은 입력에 같은 절 목록을 돌려준다 (집계·내보내기 경로는 이 시험이 보지 않는다)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"범위 절 생성기는 같은 입력에 같은 절 목록을 돌려준다 (집계·내보내기 경로는 이 시험이 보지 않는다)"},{"ancestorTitles":["단건 3의미 (분리 함수)"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"단건 3의미 (분리 함수) 3의미는 이름별 함수로 나뉘고 같은 입력에 서로 다른 의미를 합치지 않는다","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"3의미는 이름별 함수로 나뉘고 같은 입력에 서로 다른 의미를 합치지 않는다"},{"ancestorTitles":["핸들러 범위 절 · 머니 목록 (I5 · I6 목록 · 엑셀)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 머니 목록 (I5 · I6 목록 · 엑셀) ON: 영업 머니 내역 목록은 담당 sagId 절을 서비스에 넘긴다","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"ON: 영업 머니 내역 목록은 담당 sagId 절을 서비스에 넘긴다"},{"ancestorTitles":["핸들러 범위 절 · 머니 목록 (I5 · I6 목록 · 엑셀)"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 머니 목록 (I5 · I6 목록 · 엑셀) 범위 인자 동일: 머니 내역 목록과 count 는 같은 범위 절 객체를 저장소에 넘긴다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"범위 인자 동일: 머니 내역 목록과 count 는 같은 범위 절 객체를 저장소에 넘긴다"},{"ancestorTitles":["핸들러 범위 절 · 머니 목록 (I5 · I6 목록 · 엑셀)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 머니 목록 (I5 · I6 목록 · 엑셀) 범위 인자 동일: 결제 목록과 count 도 같은 범위 절을 받는다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"범위 인자 동일: 결제 목록과 count 도 같은 범위 절을 받는다"},{"ancestorTitles":["핸들러 범위 절 · 머니 목록 (I5 · I6 목록 · 엑셀)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 머니 목록 (I5 · I6 목록 · 엑셀) OFF: 머니 내역 목록의 저장소 인자는 null 이다 (응답 불변)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"OFF: 머니 내역 목록의 저장소 인자는 null 이다 (응답 불변)"},{"ancestorTitles":["핸들러 범위 절 · 머니 목록 (I5 · I6 목록 · 엑셀)"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 머니 목록 (I5 · I6 목록 · 엑셀) ON: 담당 영업 키가 없는 영업 신원은 머니 목록에서 403 이고 서비스를 부르지 않는다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"ON: 담당 영업 키가 없는 영업 신원은 머니 목록에서 403 이고 서비스를 부르지 않는다"},{"ancestorTitles":["핸들러 범위 절 · 머니 적립 · 기업 이력 (I7 · I5 목록)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 머니 적립 · 기업 이력 (I7 · I5 목록) 범위 인자 동일: 적립 목록과 count 는 같은 범위 절 객체를 저장소에 넘긴다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"범위 인자 동일: 적립 목록과 count 는 같은 범위 절 객체를 저장소에 넘긴다"},{"ancestorTitles":["핸들러 범위 절 · 머니 적립 · 기업 이력 (I7 · I5 목록)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 머니 적립 · 기업 이력 (I7 · I5 목록) ON: 영업 적립 목록 컨트롤러는 담당 sagId 절을 서비스에 넘긴다","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"ON: 영업 적립 목록 컨트롤러는 담당 sagId 절을 서비스에 넘긴다"},{"ancestorTitles":["핸들러 범위 절 · 머니 적립 · 기업 이력 (I7 · I5 목록)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 머니 적립 · 기업 이력 (I7 · I5 목록) OFF: 적립 목록의 범위 인자는 null 이다 (응답 불변)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"OFF: 적립 목록의 범위 인자는 null 이다 (응답 불변)"},{"ancestorTitles":["핸들러 범위 절 · 머니 적립 · 기업 이력 (I7 · I5 목록)"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 머니 적립 · 기업 이력 (I7 · I5 목록) 타 기업 누출 0: 담당이 아닌 기업의 기업머니 내역은 403 이고 이력 · 요약을 읽지 않는다","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"타 기업 누출 0: 담당이 아닌 기업의 기업머니 내역은 403 이고 이력 · 요약을 읽지 않는다"},{"ancestorTitles":["핸들러 범위 절 · 머니 적립 · 기업 이력 (I7 · I5 목록)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 머니 적립 · 기업 이력 (I7 · I5 목록) 범위 인자 동일: 담당 기업의 이력 목록과 count 는 같은 범위 절을 받는다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"범위 인자 동일: 담당 기업의 이력 목록과 count 는 같은 범위 절을 받는다"},{"ancestorTitles":["핸들러 범위 절 · 머니 적립 · 기업 이력 (I7 · I5 목록)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 머니 적립 · 기업 이력 (I7 · I5 목록) OFF: 기업머니 내역은 범위 검사 없이 저장소 인자 null 이다 (응답 불변)","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"OFF: 기업머니 내역은 범위 검사 없이 저장소 인자 null 이다 (응답 불변)"},{"ancestorTitles":["핸들러 범위 절 · 머니 적립 · 기업 이력 (I7 · I5 목록)"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 머니 적립 · 기업 이력 (I7 · I5 목록) 타 기업 누출 0 (질의 형상): 영업 담당 조건은 그 영업의 sagId 만 인자로 갖는다","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"타 기업 누출 0 (질의 형상): 영업 담당 조건은 그 영업의 sagId 만 인자로 갖는다"},{"ancestorTitles":["핸들러 범위 절 · 머니 단건 · 조직 단건 (I2 · I5 · I6 · I7)"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 머니 단건 · 조직 단건 (I2 · I5 · I6 · I7) 담당 기업의 다른 회원 허용: 회원 기업의 담당 영업이 요청 영업이면 회원 내역을 서비스가 준다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"담당 기업의 다른 회원 허용: 회원 기업의 담당 영업이 요청 영업이면 회원 내역을 서비스가 준다"},{"ancestorTitles":["핸들러 범위 절 · 머니 단건 · 조직 단건 (I2 · I5 · I6 · I7)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 머니 단건 · 조직 단건 (I2 · I5 · I6 · I7) 타 기업 거부: 회원 기업의 담당 영업이 다르면 403 이고 회원 내역을 읽지 않는다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"타 기업 거부: 회원 기업의 담당 영업이 다르면 403 이고 회원 내역을 읽지 않는다"},{"ancestorTitles":["핸들러 범위 절 · 머니 단건 · 조직 단건 (I2 · I5 · I6 · I7)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 머니 단건 · 조직 단건 (I2 · I5 · I6 · I7) 미선언 403: 담당 영업 키가 없는 영업 신원은 소유 기업이 맞아도 적립 단건에서 403 이다","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"미선언 403: 담당 영업 키가 없는 영업 신원은 소유 기업이 맞아도 적립 단건에서 403 이다"},{"ancestorTitles":["핸들러 범위 절 · 머니 단건 · 조직 단건 (I2 · I5 · I6 · I7)"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 머니 단건 · 조직 단건 (I2 · I5 · I6 · I7) 타 기업 거부 (적립 단건): 담당이 아닌 기업의 지급건은 403 이다","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"타 기업 거부 (적립 단건): 담당이 아닌 기업의 지급건은 403 이다"},{"ancestorTitles":["핸들러 범위 절 · 머니 단건 · 조직 단건 (I2 · I5 · I6 · I7)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 머니 단건 · 조직 단건 (I2 · I5 · I6 · I7) 타 기업 거부 (결제 단건): 결제 회원 기업의 담당 영업이 다르면 상세와 이용내역 모두 403 이다","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"타 기업 거부 (결제 단건): 결제 회원 기업의 담당 영업이 다르면 상세와 이용내역 모두 403 이다"},{"ancestorTitles":["핸들러 범위 절 · 머니 단건 · 조직 단건 (I2 · I5 · I6 · I7)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 머니 단건 · 조직 단건 (I2 · I5 · I6 · I7) OFF: 회원 내역 단건은 소유 기업 조회 (getMemberAgcId · getSagIdOfAgc) 를 하지 않는다 (응답 불변)","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"OFF: 회원 내역 단건은 소유 기업 조회 (getMemberAgcId · getSagIdOfAgc) 를 하지 않는다 (응답 불변)"},{"ancestorTitles":["핸들러 범위 절 · 머니 단건 · 조직 단건 (I2 · I5 · I6 · I7)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 머니 단건 · 조직 단건 (I2 · I5 · I6 · I7) 범위 밖 조직 거부: 영업 신원이 담당이 아닌 기업의 조직 상세를 보면 403 이고 상세를 읽지 않는다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"범위 밖 조직 거부: 영업 신원이 담당이 아닌 기업의 조직 상세를 보면 403 이고 상세를 읽지 않는다"},{"ancestorTitles":["핸들러 범위 절 · 분석 상세 단건 (I8)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 분석 상세 단건 (I8) 타 기업 거부 (분석 상세): 분석 행의 소유 기업이 담당 영업 것이 아니면 403 이고 상세를 읽지 않는다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"타 기업 거부 (분석 상세): 분석 행의 소유 기업이 담당 영업 것이 아니면 403 이고 상세를 읽지 않는다"},{"ancestorTitles":["핸들러 범위 절 · 분석 상세 단건 (I8)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 분석 상세 단건 (I8) 담당 기업의 분석 상세는 허용되고 서비스가 상세를 준다","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"담당 기업의 분석 상세는 허용되고 서비스가 상세를 준다"},{"ancestorTitles":["핸들러 범위 판정 · 분석 집계 · 내보내기 (I8, M6b 보완)"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 판정 · 분석 집계 · 내보내기 (I8, M6b 보완) 타 기업 거부 (집계 · 내보내기): 분석 원장의 소유 기업이 담당 영업 것이 아니면 403 이고 집계 · 원자료를 읽지 않는다","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"타 기업 거부 (집계 · 내보내기): 분석 원장의 소유 기업이 담당 영업 것이 아니면 403 이고 집계 · 원자료를 읽지 않는다"},{"ancestorTitles":["핸들러 범위 판정 · 분석 집계 · 내보내기 (I8, M6b 보완)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 판정 · 분석 집계 · 내보내기 (I8, M6b 보완) 타 기업 거부 (기본 · 처방): 분석 원장의 소유 기업이 담당 영업 것이 아니면 403 이고 기본 · 처방을 읽지 않는다","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"타 기업 거부 (기본 · 처방): 분석 원장의 소유 기업이 담당 영업 것이 아니면 403 이고 기본 · 처방을 읽지 않는다"},{"ancestorTitles":["핸들러 범위 판정 · 분석 집계 · 내보내기 (I8, M6b 보완)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 판정 · 분석 집계 · 내보내기 (I8, M6b 보완) 담당 기업의 기본 · 처방은 허용되고 서비스가 준다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"담당 기업의 기본 · 처방은 허용되고 서비스가 준다"},{"ancestorTitles":["핸들러 범위 판정 · 분석 집계 · 내보내기 (I8, M6b 보완)"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 판정 · 분석 집계 · 내보내기 (I8, M6b 보완) 담당 기업의 집계 · 내보내기는 허용되고 서비스가 준다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"담당 기업의 집계 · 내보내기는 허용되고 서비스가 준다"},{"ancestorTitles":["핸들러 범위 판정 · 분석 집계 · 내보내기 (I8, M6b 보완)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 판정 · 분석 집계 · 내보내기 (I8, M6b 보완) OFF: 집계 · 내보내기는 소유 조회를 하지 않는다 (응답 불변)","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"OFF: 집계 · 내보내기는 소유 조회를 하지 않는다 (응답 불변)"},{"ancestorTitles":["핸들러 범위 판정 · 머니 쓰기 (기업 지정 지급 · 충전 · 결제 취소, M6b 보완)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 판정 · 머니 쓰기 (기업 지정 지급 · 충전 · 결제 취소, M6b 보완) 타 기업 거부 (기업 지급 · 개별 지급): 대상 기업의 담당 영업이 다르면 403 이고 지급 서비스를 부르지 않는다","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"타 기업 거부 (기업 지급 · 개별 지급): 대상 기업의 담당 영업이 다르면 403 이고 지급 서비스를 부르지 않는다"},{"ancestorTitles":["핸들러 범위 판정 · 머니 쓰기 (기업 지정 지급 · 충전 · 결제 취소, M6b 보완)"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 판정 · 머니 쓰기 (기업 지정 지급 · 충전 · 결제 취소, M6b 보완) 타 기업 거부 (기업 엑셀 지급 · 기업 충전): 대상 기업이 다르면 403 이고 서비스를 부르지 않는다","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"타 기업 거부 (기업 엑셀 지급 · 기업 충전): 대상 기업이 다르면 403 이고 서비스를 부르지 않는다"},{"ancestorTitles":["핸들러 범위 판정 · 머니 쓰기 (기업 지정 지급 · 충전 · 결제 취소, M6b 보완)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 판정 · 머니 쓰기 (기업 지정 지급 · 충전 · 결제 취소, M6b 보완) 타 기업 거부 (결제 취소): 결제 회원 기업의 담당 영업이 다르면 403 이고 취소를 부르지 않는다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"타 기업 거부 (결제 취소): 결제 회원 기업의 담당 영업이 다르면 403 이고 취소를 부르지 않는다"},{"ancestorTitles":["핸들러 범위 판정 · 머니 쓰기 (기업 지정 지급 · 충전 · 결제 취소, M6b 보완)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 판정 · 머니 쓰기 (기업 지정 지급 · 충전 · 결제 취소, M6b 보완) 담당 기업의 지급은 허용되고 서비스가 받는다 (정상 경로)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"담당 기업의 지급은 허용되고 서비스가 받는다 (정상 경로)"},{"ancestorTitles":["핸들러 범위 판정 · 머니 쓰기 (기업 지정 지급 · 충전 · 결제 취소, M6b 보완)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 판정 · 머니 쓰기 (기업 지정 지급 · 충전 · 결제 취소, M6b 보완) OFF: 기업 지급은 대상 기업 소유 조회를 하지 않는다 (응답 불변)","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"OFF: 기업 지급은 대상 기업 소유 조회를 하지 않는다 (응답 불변)"},{"ancestorTitles":["핸들러 범위 절 · 환불 목록 · 단건 (M6b 보완 · R2)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 환불 목록 · 단건 (M6b 보완 · R2) ON: 영업 환불 목록은 담당 sagId 절을 서비스에 넘긴다","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"ON: 영업 환불 목록은 담당 sagId 절을 서비스에 넘긴다"},{"ancestorTitles":["핸들러 범위 절 · 환불 목록 · 단건 (M6b 보완 · R2)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 환불 목록 · 단건 (M6b 보완 · R2) OFF: 환불 목록은 범위 인자가 null 이다 (응답 불변)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"OFF: 환불 목록은 범위 인자가 null 이다 (응답 불변)"},{"ancestorTitles":["핸들러 범위 절 · 환불 목록 · 단건 (M6b 보완 · R2)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 환불 목록 · 단건 (M6b 보완 · R2) 범위 인자 동일: 환불 목록과 count 는 같은 범위 절 객체를 저장소에 넘긴다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"범위 인자 동일: 환불 목록과 count 는 같은 범위 절 객체를 저장소에 넘긴다"},{"ancestorTitles":["핸들러 범위 절 · 환불 목록 · 단건 (M6b 보완 · R2)"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 환불 목록 · 단건 (M6b 보완 · R2) 타 기업 거부 (환불 단건): 환불 회원 기업의 담당 영업이 다르면 403 이고 환불을 읽지 않는다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"타 기업 거부 (환불 단건): 환불 회원 기업의 담당 영업이 다르면 403 이고 환불을 읽지 않는다"},{"ancestorTitles":["핸들러 범위 절 · 환불 목록 · 단건 (M6b 보완 · R2)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 환불 목록 · 단건 (M6b 보완 · R2) 담당 기업의 환불 단건은 허용되고 서비스가 준다","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"담당 기업의 환불 단건은 허용되고 서비스가 준다"},{"ancestorTitles":["핸들러 범위 판정 · 머니 쓰기 잠금 뒤 판정 (M6b 보완 R1)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 판정 · 머니 쓰기 잠금 뒤 판정 (M6b 보완 R1) 잠금 뒤 판정 인자: 담당 영업의 쓰기 4종은 담당 번호를 서비스에 넘긴다 (충전 · 지급 · 개별 · 엑셀)","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"잠금 뒤 판정 인자: 담당 영업의 쓰기 4종은 담당 번호를 서비스에 넘긴다 (충전 · 지급 · 개별 · 엑셀)"},{"ancestorTitles":["핸들러 범위 판정 · 머니 쓰기 잠금 뒤 판정 (M6b 보완 R1)"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 판정 · 머니 쓰기 잠금 뒤 판정 (M6b 보완 R1) 잠금 뒤 판정 인자: 상수 OFF 면 판정 인자가 undefined 다 (응답 불변)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"잠금 뒤 판정 인자: 상수 OFF 면 판정 인자가 undefined 다 (응답 불변)"},{"ancestorTitles":["핸들러 범위 판정 · 머니 쓰기 잠금 뒤 판정 (M6b 보완 R1)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 판정 · 머니 쓰기 잠금 뒤 판정 (M6b 보완 R1) 잠금 뒤 판정: 잠근 기업의 담당이 신원과 다르면 (사전 판정 뒤 재배정 경합) 403 으로 되돌린다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"잠금 뒤 판정: 잠근 기업의 담당이 신원과 다르면 (사전 판정 뒤 재배정 경합) 403 으로 되돌린다"},{"ancestorTitles":["핸들러 범위 판정 · 머니 쓰기 잠금 뒤 판정 (M6b 보완 R1)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 판정 · 머니 쓰기 잠금 뒤 판정 (M6b 보완 R1) 잠금 뒤 판정: 담당이 같으면 통과하고, 판정 인자가 없으면 저장소를 읽지 않는다","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"잠금 뒤 판정: 담당이 같으면 통과하고, 판정 인자가 없으면 저장소를 읽지 않는다"},{"ancestorTitles":["핸들러 범위 판정 · M6c 단건 래퍼 (신원별 키 · 의미 고정 · 통과 경로)"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 판정 · M6c 단건 래퍼 (신원별 키 · 의미 고정 · 통과 경로) 호출처 의미 고정: 단건 읽기 호출처는 표의 의미 이름을 judgeSingleScope 에 넘긴다","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"호출처 의미 고정: 단건 읽기 호출처는 표의 의미 이름을 judgeSingleScope 에 넘긴다"},{"ancestorTitles":["핸들러 범위 판정 · M6c 단건 래퍼 (신원별 키 · 의미 고정 · 통과 경로)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 판정 · M6c 단건 래퍼 (신원별 키 · 의미 고정 · 통과 경로) 호출처 의미 고정: 조직 상세와 분석 기본 · 상세는 소유자 또는 관리자 열람 의미다","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"호출처 의미 고정: 조직 상세와 분석 기본 · 상세는 소유자 또는 관리자 열람 의미다"},{"ancestorTitles":["핸들러 범위 판정 · M6c 단건 래퍼 (신원별 키 · 의미 고정 · 통과 경로)"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 판정 · M6c 단건 래퍼 (신원별 키 · 의미 고정 · 통과 경로) 상수 OFF 단건 통과: 강제 상수가 꺼져 있으면 단건 키를 읽지도 판정하지도 않는다","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"상수 OFF 단건 통과: 강제 상수가 꺼져 있으면 단건 키를 읽지도 판정하지도 않는다"},{"ancestorTitles":["핸들러 범위 판정 · M6c 단건 래퍼 (신원별 키 · 의미 고정 · 통과 경로)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 판정 · M6c 단건 래퍼 (신원별 키 · 의미 고정 · 통과 경로) 관리자 래퍼 통과: admin 역할은 단건 키를 읽지 않고 판정 없이 통과한다 (현행 가드와 같다)","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"관리자 래퍼 통과: admin 역할은 단건 키를 읽지 않고 판정 없이 통과한다 (현행 가드와 같다)"},{"ancestorTitles":["핸들러 범위 판정 · M6c 단건 래퍼 (신원별 키 · 의미 고정 · 통과 경로)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 판정 · M6c 단건 래퍼 (신원별 키 · 의미 고정 · 통과 경로) corpScope 미지값 래퍼 deny: 기업 신원의 알 수 없는 corpScope 는 단건 조직 상세에서 403 이다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"corpScope 미지값 래퍼 deny: 기업 신원의 알 수 없는 corpScope 는 단건 조직 상세에서 403 이다"},{"ancestorTitles":["핸들러 범위 판정 · M6c 단건 래퍼 (신원별 키 · 의미 고정 · 통과 경로)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 판정 · M6c 단건 래퍼 (신원별 키 · 의미 고정 · 통과 경로) 단건 기업 agcId 래퍼: 기업 최고는 자기 기업 회원 내역을 보고 다른 기업은 403 이다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"단건 기업 agcId 래퍼: 기업 최고는 자기 기업 회원 내역을 보고 다른 기업은 403 이다"}],"endTime":1792648729038,"message":"","name":"/home/madsc/work/insuniverse-temp/.worktrees/admin-rbac/insuniverse-server/apps/api/src/modules/auth/access-control/scope-handlers.spec.ts","startTime":1792648728013,"status":"passed","summary":""}],"wasInterrupted":false}
