{"numFailedTestSuites":0,"numFailedTests":0,"numPassedTestSuites":3,"numPassedTests":67,"numPendingTestSuites":0,"numPendingTests":0,"numRuntimeErrorTestSuites":0,"numTodoTests":0,"numTotalTestSuites":3,"numTotalTests":67,"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":1792572226285,"success":true,"testResults":[{"assertionResults":[{"ancestorTitles":["강제 ON · 조직 쓰기의 영업 판정 (Task 6 다)"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"강제 ON · 조직 쓰기의 영업 판정 (Task 6 다) 수정: 담당 영업 행을 잠근 뒤 판정하고, 판정이 맞으면 같은 트랜잭션에서 쓴다","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"수정: 담당 영업 행을 잠근 뒤 판정하고, 판정이 맞으면 같은 트랜잭션에서 쓴다"},{"ancestorTitles":["강제 ON · 조직 쓰기의 영업 판정 (Task 6 다)"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"강제 ON · 조직 쓰기의 영업 판정 (Task 6 다) 수정: 잠근 뒤 담당이 바뀌었으면 (sagId 5) 403 이고 쓰기 0회다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"수정: 잠근 뒤 담당이 바뀌었으면 (sagId 5) 403 이고 쓰기 0회다"},{"ancestorTitles":["강제 ON · 조직 쓰기의 영업 판정 (Task 6 다)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"강제 ON · 조직 쓰기의 영업 판정 (Task 6 다) 수정: 담당 영업이 없는 기업 (sagId null) 은 403 이고 쓰기 0회다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"수정: 담당 영업이 없는 기업 (sagId null) 은 403 이고 쓰기 0회다"},{"ancestorTitles":["강제 ON · 조직 쓰기의 영업 판정 (Task 6 다)"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"강제 ON · 조직 쓰기의 영업 판정 (Task 6 다) 강제 OFF: 영업 신원이어도 트랜잭션과 잠금을 타지 않는다 (현행 경로)","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"강제 OFF: 영업 신원이어도 트랜잭션과 잠금을 타지 않는다 (현행 경로)"},{"ancestorTitles":["강제 ON · 조직 쓰기의 읽기도 쓰기 트랜잭션을 탄다 (M6b 보완 · 풀 두 번째 연결 방지)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"강제 ON · 조직 쓰기의 읽기도 쓰기 트랜잭션을 탄다 (M6b 보완 · 풀 두 번째 연결 방지) 등록: 이름 중복 검사와 등록 뒤 상세 조회를 같은 트랜잭션에서 한다","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"등록: 이름 중복 검사와 등록 뒤 상세 조회를 같은 트랜잭션에서 한다"},{"ancestorTitles":["강제 ON · 조직 쓰기의 읽기도 쓰기 트랜잭션을 탄다 (M6b 보완 · 풀 두 번째 연결 방지)"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"강제 ON · 조직 쓰기의 읽기도 쓰기 트랜잭션을 탄다 (M6b 보완 · 풀 두 번째 연결 방지) 수정: 상세 응답 조회를 같은 트랜잭션에서 한다 (쓰기 전 값이 아니라 쓰기 뒤 값을 준다)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"수정: 상세 응답 조회를 같은 트랜잭션에서 한다 (쓰기 전 값이 아니라 쓰기 뒤 값을 준다)"},{"ancestorTitles":["강제 ON · 조직 쓰기의 읽기도 쓰기 트랜잭션을 탄다 (M6b 보완 · 풀 두 번째 연결 방지)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"강제 ON · 조직 쓰기의 읽기도 쓰기 트랜잭션을 탄다 (M6b 보완 · 풀 두 번째 연결 방지) 이동: 대상 조회 · 이동 · 상세 조회가 모두 같은 트랜잭션이다","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"이동: 대상 조회 · 이동 · 상세 조회가 모두 같은 트랜잭션이다"},{"ancestorTitles":["강제 ON · 조직 쓰기의 읽기도 쓰기 트랜잭션을 탄다 (M6b 보완 · 풀 두 번째 연결 방지)"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"강제 ON · 조직 쓰기의 읽기도 쓰기 트랜잭션을 탄다 (M6b 보완 · 풀 두 번째 연결 방지) 삭제: 하위 조직 조회 · 활성 계약 가드 · 삭제가 모두 같은 트랜잭션이다","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"삭제: 하위 조직 조회 · 활성 계약 가드 · 삭제가 모두 같은 트랜잭션이다"},{"ancestorTitles":["강제 ON · 조직 쓰기의 읽기도 쓰기 트랜잭션을 탄다 (M6b 보완 · 풀 두 번째 연결 방지)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"강제 ON · 조직 쓰기의 읽기도 쓰기 트랜잭션을 탄다 (M6b 보완 · 풀 두 번째 연결 방지) 삭제: 기업 행 잠금이 트랜잭션 안의 첫 작업이다 (잠금 앞 일관 읽기로 스냅샷을 먼저 고정하지 않는다)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"삭제: 기업 행 잠금이 트랜잭션 안의 첫 작업이다 (잠금 앞 일관 읽기로 스냅샷을 먼저 고정하지 않는다)"}],"endTime":1792572226956,"message":"","name":"/home/madsc/work/insuniverse-temp/.worktrees/admin-rbac/insuniverse-server/apps/api/src/modules/agency/organization/organization.service.sales-write.spec.ts","startTime":1792572226598,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["강제 ON · 소속 쓰기 (영업 범위)"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"강제 ON · 소속 쓰기 (영업 범위) 일괄 전건 거부: 영업 범위 밖 회원이 하나라도 있으면 403 이고 쓰기 0회다","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"일괄 전건 거부: 영업 범위 밖 회원이 하나라도 있으면 403 이고 쓰기 0회다"},{"ancestorTitles":["강제 ON · 소속 쓰기 (영업 범위)"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"강제 ON · 소속 쓰기 (영업 범위) 일괄 전건 거부: 조직관리자 지정도 범위 밖 회원이 섞이면 쓰기 0회다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"일괄 전건 거부: 조직관리자 지정도 범위 밖 회원이 섞이면 쓰기 0회다"},{"ancestorTitles":["강제 ON · 소속 쓰기 (영업 범위)"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"강제 ON · 소속 쓰기 (영업 범위) 정상 경로: 담당 범위 회원만이면 같은 트랜잭션 tx 로 잠그고 판정하고 바꾼다","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"정상 경로: 담당 범위 회원만이면 같은 트랜잭션 tx 로 잠그고 판정하고 바꾼다"},{"ancestorTitles":["강제 ON · 소속 쓰기 (영업 범위)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"강제 ON · 소속 쓰기 (영업 범위) 잠금 순서: 회원 → 담당 기업 → 회원 현재 소속 조직 → 목적지 조직 (판정 전에 끝난다)","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"잠금 순서: 회원 → 담당 기업 → 회원 현재 소속 조직 → 목적지 조직 (판정 전에 끝난다)"},{"ancestorTitles":["강제 ON · 소속 쓰기 (영업 범위)"],"duration":1,"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":2,"failureDetails":[],"failureMessages":[],"fullName":"강제 ON · 소속 쓰기 (영업 범위) 사전 판정 (corp): 담당 기업 밖 회원이 섞이면 트랜잭션도 잠금도 열기 전에 거부한다","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"사전 판정 (corp): 담당 기업 밖 회원이 섞이면 트랜잭션도 잠금도 열기 전에 거부한다"},{"ancestorTitles":["강제 ON · 소속 쓰기 (영업 범위)"],"duration":1,"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":1792572227592,"message":"","name":"/home/madsc/work/insuniverse-temp/.worktrees/admin-rbac/insuniverse-server/apps/api/src/modules/auth/access-control/scope-enforce.spec.ts","startTime":1792572226598,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["핸들러 범위 절 · 목록 (I1 · I4)"],"duration":3,"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":1,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 목록 (I1 · I4) OFF: 같은 요청도 저장소 인자는 현행과 같이 비어 있다 (응답 불변)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"OFF: 같은 요청도 저장소 인자는 현행과 같이 비어 있다 (응답 불변)"},{"ancestorTitles":["핸들러 범위 절 · 목록 (I1 · I4)"],"duration":0,"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":1,"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":0,"failureDetails":[],"failureMessages":[],"fullName":"단건 3의미 (분리 함수) 3의미는 이름별 함수로 나뉘고 같은 입력에 서로 다른 의미를 합치지 않는다","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"3의미는 이름별 함수로 나뉘고 같은 입력에 서로 다른 의미를 합치지 않는다"},{"ancestorTitles":["핸들러 범위 절 · 머니 목록 (I5 · I6 목록 · 엑셀)"],"duration":1,"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":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 목록 · 엑셀) OFF: 머니 내역 목록의 저장소 인자는 null 이다 (응답 불변)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"OFF: 머니 내역 목록의 저장소 인자는 null 이다 (응답 불변)"},{"ancestorTitles":["핸들러 범위 절 · 머니 목록 (I5 · I6 목록 · 엑셀)"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 머니 목록 (I5 · I6 목록 · 엑셀) ON: 담당 영업 키가 없는 영업 신원은 머니 목록에서 403 이고 서비스를 부르지 않는다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"ON: 담당 영업 키가 없는 영업 신원은 머니 목록에서 403 이고 서비스를 부르지 않는다"},{"ancestorTitles":["핸들러 범위 절 · 머니 적립 · 기업 이력 (I7 · I5 목록)"],"duration":1,"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":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 머니 적립 · 기업 이력 (I7 · I5 목록) 타 기업 누출 0: 담당이 아닌 기업의 기업머니 내역은 403 이고 이력 · 요약을 읽지 않는다","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"타 기업 누출 0: 담당이 아닌 기업의 기업머니 내역은 403 이고 이력 · 요약을 읽지 않는다"},{"ancestorTitles":["핸들러 범위 절 · 머니 적립 · 기업 이력 (I7 · I5 목록)"],"duration":1,"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":0,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 머니 단건 · 조직 단건 (I2 · I5 · I6 · I7) 담당 기업의 다른 회원 허용: 회원 기업의 담당 영업이 요청 영업이면 회원 내역을 서비스가 준다","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"담당 기업의 다른 회원 허용: 회원 기업의 담당 영업이 요청 영업이면 회원 내역을 서비스가 준다"},{"ancestorTitles":["핸들러 범위 절 · 머니 단건 · 조직 단건 (I2 · I5 · I6 · I7)"],"duration":1,"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":0,"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":1,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 머니 단건 · 조직 단건 (I2 · I5 · I6 · I7) OFF: 회원 내역 단건은 소유 기업 조회 (getMemberAgcId · getSagIdOfAgc) 를 하지 않는다 (응답 불변)","invocations":1,"location":null,"numPassingAsserts":3,"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":1,"failureDetails":[],"failureMessages":[],"fullName":"핸들러 범위 절 · 분석 상세 단건 (I8) 담당 기업의 분석 상세는 허용되고 서비스가 상세를 준다","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"담당 기업의 분석 상세는 허용되고 서비스가 상세를 준다"},{"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 보완) 타 기업 거부 (기본 · 처방): 분석 원장의 소유 기업이 담당 영업 것이 아니면 403 이고 기본 · 처방을 읽지 않는다","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"타 기업 거부 (기본 · 처방): 분석 원장의 소유 기업이 담당 영업 것이 아니면 403 이고 기본 · 처방을 읽지 않는다"},{"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 보완) 담당 기업의 집계 · 내보내기는 허용되고 서비스가 준다","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":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":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":1,"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":0,"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":"잠금 뒤 판정: 담당이 같으면 통과하고, 판정 인자가 없으면 저장소를 읽지 않는다"}],"endTime":1792572227691,"message":"","name":"/home/madsc/work/insuniverse-temp/.worktrees/admin-rbac/insuniverse-server/apps/api/src/modules/auth/access-control/scope-handlers.spec.ts","startTime":1792572226597,"status":"passed","summary":""}],"wasInterrupted":false}
