
    ~iA                       d Z ddlmZ ddlZddlZddlmZ ddlZ e ee	      j                         j                  d         Zeej                  vrej                  j                  de        e ee	      j                         j                  d   dz        Zeej                  vrej                  j                  de       d	dZd
dZy)u   
test_bot_authored_pr.py — PR author bot 검증 회귀 테스트.

--bot-author 플래그 지정 시 PR author가 사람이면 즉시 차단(fail-closed) 검증.
    )annotationsN)Path   scriptsc                F   ddl }ddl| dz  dz  }|j                  dd       |dg dg dddi dddd	d	}dfd
}|j                   ||      j	                               j                         }||d<   || dz  }|j                  j                  |dd      d       |S )u$   테스트용 task state json 생성.r   N.tasksstateT)parentsexist_ok	COMMITTED)	git_diff_shachanged_pathsbranch	pr_numberpr_state	ci_checksguard_sh_resultgemini_evidence	qc_report)task_idcurrent_statetransitionsevidencec                    | j                         D ci c]  \  }}|dk7  s|| }}}j                  |ddd      S c c}}w )N	_checksumFT),:)ensure_ascii	sort_keys
separators)itemsdumps)skvpayload_jsons       S/home/jay/workspace/.worktrees/task-2481-dev4/tests/scripts/test_bot_authored_pr.py
_canonicalz_make_state.<locals>._canonical0   sI    $%GGIBDAqk1A1a4BB{{7$S]{^^ Cs
   A A r   .jsonFr   )r   indentzutf-8)encoding)r#   dictreturnstr)hashlibjsonmkdirsha256encode	hexdigest
write_textr"   )	tmp_pathr   r0   	state_dirr	   r)   checksum
state_pathr'   s	           @r(   _make_stater;      s    !8#g-IOOD4O0 $ ##

	E"_ ~~j/6689CCEH!E+y..J%++e%+JU\]L    c                   ddl }d}|j                  dt        |              |j                  dd       |j                  dd       t        | |       ddl}t        t              d	z  d
z  }|j                  j                  dt        |            }|j                  j                  |      }|j                  j                  |       |j                  |d|        |j                  |d| dz  dz         |j                  |d| dz  dz         |j                  |ddd      }t        j                  t               5 }	|j#                  |       ddd       	j$                  j&                  dk7  sJ d|	j$                  j&                          | dz  dz  | dz  }
|
j)                         rSt+        j,                  |
j/                               }|j1                  dg       }t3        d |D              }|s
J d|        | dz  dz  |z  }|j)                         rt5        |j7                  d            }|rt+        j,                  |d   j/                               }|j1                  d      dk(  xsA |j1                  d      dk(  xs+ d t        |      v xs d!t        |      v xs dt        |      v }|s
J d"|        yyy# 1 sw Y   uxY w)#uU   --bot-author 지정 + human PR author → 종료코드 != 0, ESCALATED / FAIL 기록.r   Nz	task-2481WORKSPACE_ROOTTASKCTL_TEST_MODE1TASKCTL_PR_AUTHOR_OVERRIDEz
human-userr   z
taskctl.py_taskctl_scripts	WORKSPACE	STATE_DIRr   r	   EVIDENCE_DIRr   i  FT)r   prauto
bot_authorzexpected non-zero exit, got r*   r   c              3  D   K   | ]  }|j                  d       dk(    yw)to	ESCALATEDN)get).0ts     r(   	<genexpr>z@test_pr_open_bot_author_flag_rejects_human_pr.<locals>.<genexpr>h   s     Hqd{2Hs    z)ESCALATED transition not found in state: z*.jsonbot_author_checkFAILresultrK   znon-botzFAIL evidence not found: )argparsesetenvr/   r;   importlib.utilr   _WORKTREE_ROOTutilspec_from_file_locationmodule_from_specloaderexec_modulesetattr	Namespacepytestraises
SystemExitcmd_pr_openvaluecodeexistsr1   loads	read_textrL   anylistglob)r7   monkeypatchrT   r   	importlibtaskctl_pathspectcargsexc_info
state_file
state_datar   	escalatedevidence_direv_filesev_data
fail_founds                     r(   -test_pr_open_bot_author_flag_rejects_human_prry   <   s   G'X7*C03\B'" ')3lBL>>112Dc,FWXD		(	(	.BKKB K2KH)<w)FGNHx,?*,LM	  D 
z	" h
t >>!#Y'CHNNDWDWCX%YY# H$w.G9E1BBJZZ
 4 4 67
 nn]B7HKHH	SEk]SSy h&3g=L))(34jj"!7!7!9:G ./69 *;;x(F2*#g,.* G,* S\)  D!:7)DD:  # s   9J>>K)r7   r   r   r/   r.   r-   )r7   r   rk   zpytest.MonkeyPatchr.   None)__doc__
__future__r   r1   syspathlibr   r_   r/   __file__resolver
   rW   pathinsert_SCRIPTS_DIRr;   ry    r<   r(   <module>r      s   
 #  
   T(^++-55a89!HHOOA~&4>))+33A6BCsxxHHOOA|$!H=Er<   