
    i                         d Z ddlZddlZej                  j	                  dd       ej                  j	                  dd       ddlZddlZ G d d      Z	 G d d      Z
 G d	 d
      Zy)ut   
test_1921b_team_scope.py — task-1921_b 검증 테스트
V-4: g3 팀 범위 검증 + V-6: scope_check SKIP→WARN
    Nz/home/jay/workspace/scriptsz*/home/jay/workspace/teams/shared/verifiersc                   .    e Zd ZdZd Zd Zd Zd Zd Zy)TestCheckTeamScopeu;   g3_independent_verifier.check_team_scope() 유닛 테스트c                 b    ddiddig}t        j                  |d      \  }}|dk(  sJ |g k(  sJ y)u#   자기 팀 파일만 있으면 PASS	file_pathteams/dev4/qc/qc_verify.pyzteams/dev4/CLAUDE.md	dev4-teamPASSNg3vcheck_team_scopeselfentriesstatuswarningss       L/home/jay/workspace/.worktrees/task-2116-dev1/tests/test_1921b_team_scope.pytest_pass_own_team_filesz+TestCheckTeamScope.test_pass_own_team_files   sP     6701
 //E2~~    c                 t    ddiddiddiddiddig}t        j                  |d      \  }}|dk(  sJ |g k(  sJ y	)
uA   공용 파일(teams/shared, scripts, utils 등)만 있으면 PASSr   %teams/shared/verifiers/scope_check.py"scripts/g3_independent_verifier.pyzutils/helper.pyzmemory/reports/test.mdztests/test_example.pyr   r	   Nr
   r   s       r   test_pass_shared_filesz)TestCheckTeamScope.test_pass_shared_files#   sk     AB>?+,2312
 //E2~~r   c                     ddiddig}t        j                  |d      \  }}|dk(  sJ t        |      dk(  sJ d|d   v sJ y	)
u#   다른 팀 파일이 있으면 WARNr   teams/dev1/CLAUDE.mdr   r   WARN   dev1r   Nr   r   lenr   s       r   test_warn_other_team_filesz-TestCheckTeamScope.test_warn_other_team_files0   sh     01>?
 //E8}!!!!$$$r   c                 h    ddiddiddig}t        j                  |d      \  }}|dk(  sJ |g k(  sJ y)u*   자기 팀 + 공용 파일 혼합 → PASSr   zteams/dev2/qc/qc_verify.pyr   r   z	dev2-teamr	   Nr
   r   s       r   test_pass_mixed_own_and_sharedz1TestCheckTeamScope.test_pass_mixed_own_and_shared;   sY     67AB>?

 //E2~~r   c                 n    ddig}t        j                  |d      \  }}|dk(  sJ t        |      dk(  sJ y)u7   파일경로:라인번호 형식도 올바르게 처리r   zteams/dev1/qc/qc_verify.py:42z	dev3-teamr   r   Nr   r   s       r   !test_warn_with_line_number_suffixz4TestCheckTeamScope.test_warn_with_line_number_suffixF   sM     9:
 //E8}!!!r   N)	__name__
__module____qualname____doc__r   r   r    r"   r$    r   r   r   r      s    E	%	"r   r   c                   "    e Zd ZdZd Zd Zd Zy)TestScopeCheckAuditTrailAbsenceuD   scope_check.verify()에서 audit-trail 부재 시 WARN 반환 확인c                     t        |dz  dz        }t        j                  dgd|      }|d   dk(  sJ d|d           t        d	 |d
   D              sJ y)u1   audit-trail.jsonl이 없으면 WARN (SKIP 아님)nonexistentzaudit-trail.jsonlsrc/main.py	test-taskexpected_filestask_idaudit_trail_pathr   r   zExpected WARN, got c              3   0   K   | ]  }d |v xs d|v   yw)u   부재u   범위 검증 불가Nr)   ).0ds     r   	<genexpr>zWTestScopeCheckAuditTrailAbsence.test_warn_when_audit_trail_not_found.<locals>.<genexpr>`   s"     [A8q=?$:a$??[s   detailsN)strscverifyany)r   tmp_pathr-   results       r   $test_warn_when_audit_trail_not_foundzDTestScopeCheckAuditTrailAbsence.test_warn_when_audit_trail_not_foundW   sr    (]25HHI)?(

 h6)S-@AQ@R+SS)[PYIZ[[[[r   c                     t        |dz        }t        j                  dgd|      }|d   dk(  sJ dj                  |d         }d|v sJ y	)
u.   WARN 메시지에 audit-trail 경로가 포함zno-file.jsonlr.   r/   r0   r   r    r8   N)r9   r:   r;   join)r   r=   r-   r>   details_texts        r   test_warn_message_contains_pathz?TestScopeCheckAuditTrailAbsence.test_warn_message_contains_pathb   s`    (_45)?(

 h6)))xxy 12,...r   c                 H    t        j                  g dd      }|d   dk(  sJ y)u0   expected_files가 비어있으면 여전히 SKIPr/   z/nonexistent/pathr0   r   SKIPN)r:   r;   )r   r>   s     r    test_skip_when_no_expected_filesz@TestScopeCheckAuditTrailAbsence.test_skip_when_no_expected_filesn   s.    0

 h6)))r   N)r%   r&   r'   r(   r?   rD   rG   r)   r   r   r+   r+   T   s    N	\
/*r   r+   c                   8    e Zd ZdZd	dZd Zd
dZd Zd Zd Z	y)TestG3TeamScopeIntegrationuF   g3_independent_verifier main()에서 --team-id 동작 통합 테스트Nc                 ~   |j                  t        dt        |             dd|g}|r|j                  d|g       |j                  t        d|       t        j                  t              5 }t        j                          d d d        |j                  j                  S # 1 sw Y   j                  j                  S xY w)NWORKSPACE_ROOTzg3_independent_verifier.pyz	--task-idz	--team-idargv)setattrr   r9   extendsyspytestraises
SystemExitmainvaluecode)r   monkeypatchr=   r2   team_idrL   exc_infos          r   	_run_mainz$TestG3TeamScopeIntegration._run_main   s    C!13x=A,k7CKKg./C.]]:& 	(HHJ	~~"""	~~"""s   +BB<c                 l    |dz  dz  }|j                  dd       || dz  j                  |d       y )NmemoryreportsTparentsexist_okz.mdutf-8encoding)mkdir
write_text)r   r=   r2   contentreports_dirs        r   _make_reportz'TestG3TeamScopeIntegration._make_report   sB    )I5$6	'#	&227W2Mr   c                 n    ||z  }|j                   j                  dd       |j                  |d       y )NTr]   r`   ra   )parentrc   rd   )r   r=   rel_pathre   targets        r   
_make_filez%TestG3TeamScopeIntegration._make_file   s6    H$D48'G4r   c                     d}d}| j                  |||       | j                  |dd       | j                  |dd       | j                  |||d      }|dk(  sJ y	)
u?   --team-id dev4-team + dev4 파일만 verified → PASS (exit 0)ztask-v4-001u1  # task-v4-001 보고서

## 수정 파일별 검증 상태

| 파일 | 변경 내용 | grep 검증 | 상태 |
|------|-----------|-----------|------|
| teams/dev4/qc/qc_verify.py | 수정 | grep "VERIFY_OK" OK | verified |
| scripts/g3_independent_verifier.py | 수정 | grep "team_scope" OK | verified |
r   zVERIFY_OK = True
r   zteam_scope = True
r   r   Nrg   rl   rY   r   r=   rV   r2   report	exit_codes         r   !test_pass_own_team_verified_filesz<TestG3TeamScopeIntegration.test_pass_own_team_verified_files   sf    	 	(GV4">@TU"FH]^NN;';O	A~~r   c                     d}d}| j                  |||       | j                  |dd       | j                  |||d      }|dk(  sJ y)uQ   --team-id dev4-team + dev1 파일 verified → WARN이지만 exit 0 (FAIL 아님)ztask-v4-002u   # task-v4-002 보고서

## 수정 파일별 검증 상태

| 파일 | 변경 내용 | grep 검증 | 상태 |
|------|-----------|-----------|------|
| teams/dev1/CLAUDE.md | 수정 | grep "MODIFIED" OK | verified |
r   zMODIFIED = True
r   r   Nrn   ro   s         r   'test_warn_other_team_files_still_passeszBTestG3TeamScopeIntegration.test_warn_other_team_files_still_passes   sT     	(GV4"8:MNNN;';O	A~~r   c                     d}d}| j                  |||       | j                  |dd       | j                  |||      }|dk(  sJ y)u*   --team-id 없으면 team_scope 검증 SKIPztask-v4-003u   # task-v4-003 보고서

## 수정 파일별 검증 상태

| 파일 | 변경 내용 | grep 검증 | 상태 |
|------|-----------|-----------|------|
| scripts/g3_independent_verifier.py | 수정 | grep "OK_KEY" OK | verified |
r   zOK_KEY = True
r   Nrn   ro   s         r   !test_no_team_id_skips_scope_checkz<TestG3TeamScopeIntegration.test_no_team_id_skips_scope_check   sR     	(GV4"FHYZNN;'B	A~~r   )N)z# placeholder)
r%   r&   r'   r(   rY   rg   rl   rr   rt   rv   r)   r   r   rI   rI   |   s$    P#N
5
($r   rI   )r(   rO   rP   pathinsertg3_independent_verifierr   scope_checkr:   r   r+   rI   r)   r   r   <module>r{      sb   
   0 1 ? @ % 7" 7"|!* !*PM Mr   