
    i                        d Z ddlZddlZddlZej
                  j                  dd       ej
                  j                  dd       ddlmZ dddd	d
gZ	 ej                  g ddd      Z G d d      Z G d d      Z G d d      Zy)uW  
test_worktree_auto_fix_1993.py — _auto_fix_high_comments 수정사항 검증 (task-1993)

수정사항:
1. _auto_fix_high_comments(): ["claude", "--print", "-p", ...] →
   ["claude", "-p", ..., "--dangerously-skip-permissions"] 으로 변경
2. cmd_finish(): 타임아웃 시 60초 추가 대기 후 Gemini 리뷰 재확인 로직 추가
    Nz/home/jay/workspacez/home/jay/workspace/scripts)_auto_fix_high_commentshighzsrc/main.py10zSQL injection vulnerability)severitypathlinebody )args
returncodestdoutstderrc                   "    e Zd ZdZd Zd Zd Zy)TestAutoFixClaudeCommanduS   TC-1: _auto_fix_high_comments가 올바른 claude 인자로 호출되는지 검증.c                    t         j                  j                  dt              5 }t	        t
        dd       ddd       j                  sJ d       g }|j                  D ]J  }|j                  r|j                  d   n|j                  j                  d	g       }|j                  |       L d
|vs
J d|        y# 1 sw Y   xY w)uF   --print 플래그가 subprocess.run 호출 인자에 없어야 한다.worktree_manager.subprocess.runreturn_value/tmp/wtFcollect_modeN/   subprocess.run이 호출되지 않았습니다.r   r   z--printuH   --print 플래그가 subprocess.run 인자에서 발견되었습니다: )unittestmockpatchFAKE_COMPLETEDr   SAMPLE_COMMENTScalledcall_args_listr   kwargsgetextend)selfmock_runall_argscallcmds        R/home/jay/workspace/.worktrees/task-2116-dev1/tests/test_worktree_auto_fix_1993.py%test_no_print_flag_in_subprocess_callz>TestAutoFixClaudeCommand.test_no_print_flag_in_subprocess_call.   s    ]]  -N ! 
 	T#OYUS	T Q QQ !++ 	!D"&))$))A,1LCOOC 	! ( 	
VW_V`a	
(	T 	Ts   B>>Cc                    t         j                  j                  dt              5 }t	        t
        dd       ddd       j                  sJ d       g }|j                  D ]H  }|j                  r|j                  d   n|j                  j                  d	g       }|s=|d   d
k(  sF|} n |sJ d       d|v s
J d|        y# 1 sw Y   xY w)uU   --dangerously-skip-permissions 플래그가 claude 호출 인자에 있어야 한다.r   r   r   Fr   Nr   r   r   claudeH   claude를 실행하는 subprocess.run 호출을 찾을 수 없습니다.z--dangerously-skip-permissionsuH   --dangerously-skip-permissions가 claude 호출 인자에 없습니다: r   r   r   r   r   r   r   r   r   r    r!   r#   r$   claude_argsr&   r'   s        r(   0test_dangerously_skip_permissions_in_claude_callzITestAutoFixClaudeCommand.test_dangerously_skip_permissions_in_claude_callB   s    ]]  -N ! 
 	T#OYUS	T
 Q QQ "$++ 	D"&))$))A,1LCs1v)!		 fff{/;> 	
VWbVcd	
>!	T 	T   CCc                    t         j                  j                  dt              5 }t	        t
        dd       ddd       j                  sJ d       g }|j                  D ]H  }|j                  r|j                  d   n|j                  j                  d	g       }|s=|d   d
k(  sF|} n |sJ d       d|v s
J d|        y# 1 sw Y   xY w)u9   -p 플래그가 claude 호출 인자에 있어야 한다.r   r   r   Fr   Nr   r   r   r+   r,   z-pu6   -p 플래그가 claude 호출 인자에 없습니다: r-   r.   s        r(   test_p_flag_in_claude_callz3TestAutoFixClaudeCommand.test_p_flag_in_claude_callX   s    ]]  -N ! 
 	T#OYUS	T
 Q QQ!#++ 	D"&))$))A,1LCs1v)!		 fff{{" 	
D[MR	
"	T 	Tr1   N)__name__
__module____qualname____doc__r)   r0   r3        r(   r   r   +   s    ]
(
,
r9   r   c                       e Zd ZdZd Zd Zy)TestAutoFixCollectModeuA   TC-2: collect_mode=True 일 때 실행을 건너뛰는지 검증.c                    t         j                  j                  dt              5 }t	        t
        dd       ddd       j                  D cg c]B  }|j                  r|j                  d   n|j                  j                  dg       dd	 d
gk(  r|D }}t        |      dk(  s
J d|        y# 1 sw Y   yxY wc c}w )uQ   collect_mode=True 이면 subprocess.run(claude)이 호출되지 않아야 한다.r   r   r   Tr   Nr   r      r+   uH   collect_mode=True 임에도 claude subprocess가 호출되었습니다: )r   r   r   r   r   r   r   r   r    r!   len)r#   r$   r&   claude_callss       r(   *test_subprocess_not_called_in_collect_modezATestAutoFixCollectMode.test_subprocess_not_called_in_collect_modev   s    ]]  -N ! 
 	S#OYTR	S !//
 $				!t{{vr/JAaPU]T^^ 
 

 < A% 	
VWcVde	
%	S 	S
s   B1AB=1B:c                     t         j                  j                  dt              5  t	        t
        dd      }ddd       d   du sJ d	|d    d
       y# 1 sw Y   xY w)uI   collect_mode=True 이면 반환값의 executed가 False 이어야 한다.r   r   r   Tr   NexecutedFu"   collect_mode=True 에서 executed=u    — False여야 합니다.)r   r   r   r   r   r   )r#   results     r(   #test_executed_false_in_collect_modez:TestAutoFixCollectMode.test_executed_false_in_collect_mode   su    ]]  -N ! 
 	 -F	 j!U* 	
0
1C0DD_`	
*	 	s   AA N)r4   r5   r6   r7   r@   rD   r8   r9   r(   r;   r;   s   s    K
"
r9   r;   c                   ,    e Zd ZdZdZdefdZd Zd Zy)TestGeminiRetryCodePresenceuV   TC-3: worktree_manager.py 에 gemini-retry 재시도 로직이 존재하는지 검증.z//home/jay/workspace/scripts/worktree_manager.pyreturnc                 |    t        | j                  d      5 }|j                         cd d d        S # 1 sw Y   y xY w)Nzutf-8)encoding)openSOURCE_PATHread)r#   fs     r(   _read_sourcez(TestGeminiRetryCodePresence._read_source   s2    $""W5 	668	 	 	s   2;c                 :    | j                         }d|v sJ d       y)u@   소스코드에 'gemini-retry' 문자열이 존재해야 한다.zgemini-retryu   worktree_manager.py 에 'gemini-retry' 키워드가 없습니다. 타임아웃 재시도 로직이 추가되지 않은 것 같습니다.NrN   r#   sources     r(    test_gemini_retry_keyword_existsz<TestGeminiRetryCodePresence.test_gemini_retry_keyword_exists   s+    ""$' 	
U	
'r9   c                 :    | j                         }d|v sJ d       y)uV   소스코드에 'not gemini_found and pr_number' 조건 패턴이 존재해야 한다.znot gemini_found and pr_numberu   worktree_manager.py 에 'not gemini_found and pr_number' 조건 패턴이 없습니다. 타임아웃 후 재확인 분기 로직이 없는 것 같습니다.NrP   rQ   s     r(   4test_not_gemini_found_and_pr_number_condition_existszPTestGeminiRetryCodePresence.test_not_gemini_found_and_pr_number_condition_exists   s+    ""$/69 	
S	
9r9   N)	r4   r5   r6   r7   rK   strrN   rS   rU   r8   r9   r(   rF   rF      s     `CKc 

r9   rF   )r7   
subprocesssysunittest.mockr   r   insertworktree_managerr   r   CompletedProcessr   r   r;   rF   r8   r9   r(   <module>r]      s     
  ( ) 0 1 4 -	 -,,	"R@
 @
P
 
N
 
r9   