
    [i%                        d Z ddlmZ ddlZddlZddlZddlmZ ddlZ ed      Z	e	dz  dz  Z
h dZdd	Zdd
ZddZd Zd Zd Zy)u=  tests/taskctl/test_evidence.py
Evidence 9종 파일 생성 검증 (task-2467)

벨레스(개발6팀 테스터) 작성. 스바로그의 구현 완료 전 선작성(TDD).

케이스:
    1. test_evidence_dir_created_on_init
    2. test_evidence_files_have_required_fields
    3. test_evidence_pr_open_records_pr_author
    )annotationsN)Pathz-/home/jay/workspace/.worktrees/task-2467-dev6scriptsz
taskctl.py>   actorcommand	exit_code	timestampc                   i t         j                  }t        |       |d<   | dz  dz  j                  dd       | dz  dz  j                  dd       | dz  dz  j                  dd       | dz  d	z  j                  dd       |S )
NWORKSPACE_ROOT.tasksstateT)parentsexist_okevidencememoryeventszorchestration-audit)osenvironstrmkdir)tmp_pathenvs     L/home/jay/workspace/.worktrees/task-2520-dev4/tests/taskctl/test_evidence.py_isolated_workspacer      s    
RZZ.CMC7"))$)F:%,,TD,I8#**4$*G0077t7TJ    c                Z    t        j                  dt        t              g| z   dd|d      S )Npython3T   )capture_outputtextr   timeout)
subprocessrunr   TASKCTL)argsr   s     r   _runr&   &   s-    >>	CL!D($C r   c                    | dz  dz  | dz  }|j                         s
J d|        t        j                  |j                               S )Nr   r   z.jsonu   state 파일 없음: )existsjsonloads	read_text)r   task_idps      r   _stater.   -   sM    8g%7)5(99A88:2.qc22:::akkm$$r   c                   t        |       }d}t        d|g|      }|j                  dk(  sJ d|j                          t	        | |      }|d   dk(  sJ d|v sJ d       | d	z  dz  |z  }|d
z  }|j                         rt|j                         rdt        j                  |j                               }dD ];  }|dk(  rdn|}	||v r|	|v rJ d| d|	 dt        |j                                        n|d   }t        |t              sJ d       d|gd|gd|gfD ]  }
t        |
|        |j                         rt        j                  |j                               }ddh}h d}|t        |j                               k  s!J dt        |j                                       |t        |j                               z  sJ d       yy)u.  init 후 evidence 디렉토리와 start.json이 생성되어야 한다.

    명세 §5 Table #1: start.json — command, actor, ts, branch, head_sha.
    신규 구현에서 init/run 명령이 start.json을 생성.
    MVP에서는 evidence dict가 state 파일 내에 포함되므로 soft check.
    ztask-evidence-01initr   u   init 실패: current_stateCREATEDr   u   state에 evidence 필드 없음r   z
start.json)r   r   tsr3   r	   u   start.json에 'u
   ' 또는 'u
   ' 누락: u   evidence가 dict가 아님dispatchackr#   r   r   >   r3   r	   
started_atu!   start.json 필수 필드 누락: u,   start.json에 timestamp 관련 필드 없음N)r   r&   
returncodestderrr.   r(   r)   r*   r+   listkeys
isinstancedictset)r   r   r,   procr   evidence_dir
start_jsonevfieldaltcmdrequiredts_variantss                r   !test_evidence_dir_created_on_initrG   7   s    h
'C G!3'D??a>=!>> 8W%E!Y...A AA h&3g=L,J!2!2!4ZZ
,,.// 	E!&$+ECB;#) !%
3%z$rwwy/ARS+	 : "d#A%AA# W%w'7%9IJ S# ZZ
,,./w'73rwwy>)_-NsSUSZSZS\~N^+__)S^+\/[\+ r   c                   t        |       }d}d|gd|gd|gd|gd|ddgfD ]4  }t        ||      }|j                  d	k(  rJ d
| d|j                           | dz  dz  |z  }|j	                         rt        |j                  d            }|r|D ]  }t        j                  |j                               }h d}	ddh}
|	t        |j                               z  s-J |j                   dt        |j                                       |
t        |j                               z  rJ |j                   dt        |j                                        nt        j                  d       nrt        | |      }|j!                  di       }|j!                  d      dk(  sJ d|j!                  d              t#        |j!                  di       t$              sJ d       t        d|g|       t        | |      }|j!                  di       }d|v sJ d       d|v sJ d       t#        |j!                  di       t$              sJ d       y )!u   생성된 evidence 파일에 명세 §5 공통 필수 필드가 존재해야 함.

    공통 필수 필드: command, actor, timestamp(또는 ts), exit_code
    pr-open 이후 생성되는 evidence 파일을 샘플 검증.
    ztask-evidence-02r0   r4   r5   r#   pr-open--pr200r   u   명령 실패: u    → r   r   z*.json>   r3   r	   
created_atr6   r   r7   u$   에 timestamp 관련 필드 없음: u$   에 exit_code 관련 필드 없음: uF   evidence 디렉토리 존재하나 파일 없음 (스바로그 대기)	pr_number   u   pr_number 미기록: 
exit_codesu   exit_codes가 dict가 아님verifyguard_sh_resultu$   verify 후 guard_sh_result 미기록qc_report_guard_resultu+   verify 후 qc_report_guard_result 미기록u   exit_codes 구조 이상N)r   r&   r7   r8   r(   r9   globr)   r*   r+   r=   r:   namepytestxfailr.   getr;   r<   )r   r   r,   rD   r>   r?   
json_filesev_filerA   rF   exit_variantsr   s               r   (test_evidence_files_have_required_fieldsr[   m   sl    h
'C G !J#8 5'"2GVU35 O C~!#Nse5%NN#	O h&3g=L ,++H56
% 
ZZ 1 1 34M!,l ;"S^3 ||n$HbggiHYZ3 %s2779~5 ||n$HbggiHYZ5
 LLab x)YYz2&vvk"c) 	
#BFF;$7#89	
) "&&r2D9Y;YY9 	(G	c"8W%E	:r	"B"J$JJ"#r)X+XX)bff\2.5Q7QQ5r   c                J   t        |       }d}d}d|gd|gd|gd|gfD ]  }t        ||      j                  dk(  rJ  t        d|d	t        |      g|      }|j                  dk(  sJ d
|j                          | dz  dz  |z  dz  }|j                         rt        j                  |j                               }|j                  d      |k(  sJ d|j                  d       d|        d|v s!J dt        |j                                       |d   |d   dk7  sJ d|d           d|v r|d   dv sJ d|d           h d}|t        |j                               z  s!J dt        |j                                       y| dz  dz  |z  j                         rt        j                  d       yt        | |      }	|	j                  di       }|j                  d      |k(  sJ d|j                  d              d|vrt        j                  d       y|d   J d       y)u  pr-open 후 evidence/pr-open.json에 pr_author 및 pr_number가 박제.

    명세 §5 Table #3: pr-open.json 핵심 필드 — pr_number, pr_author, base_sha, head_sha.
    bot token 없는 환경에서 pr_author는 current_user로 기록됨 (pr-lifecycle-spec §2.2).
    ztask-evidence-03i,  r0   r4   r5   r#   r   rI   rJ   u   pr-open 실패: r   r   zpr-open.jsonrM   u"   pr-open.json pr_number 불일치: z != 	pr_authoru"   pr-open.json에 pr_author 누락: N u   pr_author가 비어있음: 
created_by>   bothumanmanualtaskctlcurrent_useru   created_by 값 이상: >   r3   r	   rL   u0   pr-open.json에 timestamp 관련 필드 없음: uL   evidence 디렉토리 존재하나 pr-open.json 없음 (스바로그 대기)u"   MVP evidence.pr_number 불일치: uY   MVP에서 pr_author 미기록 — 신규 구현에서 추가 예정 (스바로그 대기)u   pr_author가 None)r   r&   r7   r   r8   r(   r)   r*   r+   rW   r9   r:   r=   rU   rV   r.   )
r   r   r,   rM   rD   r>   
pr_open_evrA   rF   r   s
             r   'test_evidence_pr_open_records_pr_authorrf      s    h
'C GI!J#8 5'"24 .C~((A---. GVS^<cBD??aA#3DKK=!AA H$z1G;nLJZZ
,,./ vvk"i/ 	
01D0ET)U	
/
 b X$FtBGGIFW"XX +*r+"/D 	
)"[/):;	
D
 2l#'\\ )"\*:);<\
 8S^+ 	
>tBGGI>OP	
+ X


*W
4	<	<	>cd x)YYz2&vvk"i/ 	
01D0EF	
/ b LLk k?.C0CC.r   )r   r   returnr<   )r%   z	list[str]r   r<   rg   zsubprocess.CompletedProcess)r   r   r,   r   rg   r<   )__doc__
__future__r   r)   r   r"   pathlibr   rU   	WORKSPACEr$   EVIDENCE_REQUIRED_FIELDSr   r&   r.   rG   r[   rf    r   r   <module>rn      sd   	 #  	   @A	
i
,
. J %/]l5Rx>Dr   