
    ~i                       d Z ddlmZ ddlZddl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       d	dZd
dZddZy)u   
test_no_admin_override.py — admin override / bypass 차단 회귀 테스트.

1. enqueue-merge --admin 플래그 → exit code != 0, ADMIN OVERRIDE BLOCKED
2. detect_admin_override_attempt 키워드 검출 + no_admin_override=False → MergeQueueError
    )annotationsN)Path   c                >   ddl }| dz  dz  }|j                  dd       |dg dg dddi dddd	d	}dd
}|j                   ||      j                               j	                         }||d<   || dz  }|j                  t        j                  |dd      d       y)u6   테스트용 task state json 생성 (checksum 포함).r   Nz.tasksstateT)parentsexist_okHUMAN_APPROVED)	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|| }}}t        j                  |ddd      S c c}}w )N	_checksumFT),:)ensure_ascii	sort_keys
separators)itemsjsondumps)skvpayloads       X/home/jay/workspace/.worktrees/task-2481-dev4/tests/regression/test_no_admin_override.py
_canonicalz_make_state.<locals>._canonical/   sF    $%GGIBDAqk1A1a4BBzz'R\]] Cs
   AAr   z.jsonFr   )r   indentutf-8encoding)r"   dictreturnstr)hashlibmkdirsha256encode	hexdigest
write_textr    r!   )tmp_pathr   r/   	state_dirr   r'   checksum
state_paths           r&   _make_stater9      s    8#g-IOOD4O0 ) ##

	E"^ ~~j/6689CCEH!E+y..J$**UqIT[\    c           	        d}t        | |       i t        j                  dt        |       i}t        dz   }t        j                  t        j                  |d|dddgdd|d	
      }|j                  dk7  s.J d|j                   d|j                   d|j                          d|j                  v s/d|j                  v s!J d|j                   d|j                          | dz  dz  dz  }|j                         rG|j                  d      j                         j                         }t!        |      dk(  s
J d|        yy)uU   scripts/taskctl.py enqueue-merge --admin → exit code != 0 + ADMIN OVERRIDE BLOCKED.z	task-2481WORKSPACE_ROOTz/scripts/taskctl.pyzenqueue-mergez--pr99z--adminT   )capture_outputtextenvtimeoutr   z-expected non-zero exit for --admin flag, got z
stdout=z
stderr=zADMIN OVERRIDE BLOCKEDz,ADMIN OVERRIDE BLOCKED not in output
stdout=memoryorchestration-auditzadmin-override.jsonlr)   r*   z2admin-override.jsonl should not have new entries: N)r9   osenvironr.   _WORKTREE_ROOT
subprocessrunsys
executable
returncodestdoutstderrexists	read_textstrip
splitlineslen)r5   r   rA   taskctl_scriptproctmp_override_logliness          r&   %test_enqueue_merge_admin_flag_blockedrX   9   s^   G'"
9RZZ
9)3x=
9C#&;;N>>	'64QZ[D ??a 
77H I++i}	6 $t{{26NRVR]R]6] 
7}Idkk][]  (*-BBE[[  **G*<BBDOOQ5zQ 	
@H	
 !r:   c                *   |j                  dt        |              |j                  t        j                  dd       |j                  t        j                  dd       ddlm} | dz  d	z  d
z  }|j                  |d|        |j                  |d|       |j                  dg      }|J d       d|j                         v sd|j                         v s
J d|        |j                  dg      }|J d       t        j                  |j                        5 }|j                  ddd       ddd       dt        j                        j                         v s,dt        |j                        v sJ d|j                          yy# 1 sw Y   [xY w)uV   detect_admin_override_attempt 키워드 + no_admin_override=False → MergeQueueError.r<   zutils.merge_queue_clientF)raisingzutils.bot_pr_authorr   NrC   rD   zmerge-queue.jsonl	WORKSPACEMERGE_QUEUE_LOGz--force-mergez*expected non-None reason for --force-mergezforce-mergeadminzreason should mention keyword: bypassz%expected non-None reason for 'bypass'   T)no_admin_overridedry_runzadmin overrider`   z$expected admin override error, got: )setenvr.   delitemrJ   modulesutils.merge_queue_clientmerge_queue_clientsetattrdetect_admin_override_attemptlowerpytestraisesMergeQueueError
enqueue_prvalue)r5   monkeypatchmqclog_pathreason1reason2exc_infos          r&   &test_enqueue_pr_bypass_keyword_blockedru   `   s   'X7%?O%:EJ*("%::=PPH[(3.9 //0ABGL LLGMMO+w'--//I 
)'3I
 //
;GG GG 
s**	+ AxqE4@A s8>>288::#hnn"55
.x~~.>? 65 ;A As   F		F)r5   r   r   r.   r-   None)r5   r   r-   rv   )r5   r   ro   zpytest.MonkeyPatchr-   rv   )__doc__
__future__r   r    rE   rH   rJ   pathlibr   rj   r.   __file__resolver   rG   pathinsertr9   rX   ru    r:   r&   <module>r      su    #  	  
   T(^++-55a89!HHOOA~&]D$
Nr:   