
     jiP                       d Z ddlmZ ddlZddlZddlmZ  ee      j                         j                  j                  j                  Z
 ee
      ej                  v r!ej                  j                   ee
             ej                  j                  d ee
             ddlmZmZmZmZmZmZmZmZmZ ddlmZmZ 	 	 	 d	 	 	 	 	 	 	 	 	 ddZd Zd	 Zd
 Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z-d Z.d Z/y)u   tests/regression/test_auto_gemini_triage_2511.py — task-2511 회귀 테스트 16건.

회장 명시: PR #55/#56/#57/#61 fixture replay 포함.
모든 테스트는 100% offline — gh api / network 호출 없음.
    )annotationsN)Path)	ThreadTriageOutcomeTriageVerdictauto_resolve_threadsbuild_dismiss_commentbuild_resolve_thread_argsbuild_review_gate_statusclassify_thread	triage_prto_legacy_gemini_state)CriticalEscalationTypeto_jsonc                    | ||d|igdS )Nbody)id
isOutdated
isResolvedcomments )tidis_outdatedis_resolvedr   s       D/home/jay/workspace/tests/regression/test_auto_gemini_triage_2511.py_make_threadr   (   s!     !!d^$	     c                     t        ddd      } t        | dg g g       }|j                  t        j                  k(  sJ t        |gd      }|d	   j                  du sJ y )
NT1T   이전 코드r   r   abc123threadpr_head_shafix_commitsexpected_filesforbidden_pathsFapplyr   r   r   verdictr   OUTDATEDr   auto_resolvedr#   outcomeresolveds      r   $test_01_outdated_thread_auto_resolver1   :   si    $DGFG ??m44444#WIU;HA;$$,,,r   c                     t        dd      } dddgdg}t        | d|dgg 	      }|j                  t        j                  k(  sJ t        |gd
      }|d   j                  du sJ y )NT2u&   def foo(): 함수 구현 개선 필요r   b1eff66b1234567890abcdefu   fix: foo 함수 구현 개선utils/auto_gemini_triage.pyshamessagefilesr!   r"   Fr(   r   T)r   r   r+   r   CODE_ALREADY_FIXEDr   r-   )r#   r%   r/   r0   s       r   'test_02_code_already_fixed_auto_resolver<   M   s    5F .634	
K 56G ??m>>>>>#WIU;HA;$$,,,r   c                     t        dd      } t        | dg g g       }|j                  t        j                  k(  sJ t        |      }d|v sJ y )NT3u;   grep regex가 wrapper 패턴을 false-positive로 매칭함r4   r!   r"   FALSE_POSITIVE)r   r   r+   r   r?   r   )r#   r/   comments      r   $test_03_false_positive_regex_dismissrA   k   s_    JF G ??m:::::#G,Gw&&&r   c                     t        dd      } t        | dg g g       }|j                  t        j                  k(  sJ t        |gd      }|d   j                  d	u sJ y )
NT4z,nit: variable naming consistency improvementr4   r!   r"   Fr(   r   Tr   r   r+   r   
STYLE_ONLYr   r-   r.   s      r   test_04_style_only_dismissrF      sm    ;F G ??m66666#WIU;HA;$$,,,r   c                     t        dd      } t        | dg dgg       }|j                  t        j                  k(  sJ t        |gd      }|d	   j                  d
u sJ y )NT5u&   rename bool flag is_active → enabledr4   r!   r6   r"   Fr(   r   T)r   r   r+   r   MINOR_FIX_ALLOWEDr   r-   r.   s      r   "test_05_minor_fix_allowed_in_scoperJ      sp    5F 56G ??m=====#WIU;HA;$$,,,r   c                     t        dd      } t        | dg dgg       }|j                  t        j                  k(  sJ |j
                  t        j                  k(  sJ |j                  du sJ y )NT6zDimplement new module utils/new_feature.py for extended functionalityr4   r!   r6   r"   F)	r   r   r+   r   REAL_BUG_SCOPE_EXPANSIONescalation_typer   (GEMINI_REAL_BUG_REQUIRES_SCOPE_EXPANSIONr-   r#   r/   s     r    test_06_scope_expansion_criticalrQ      sy    SF 56G ??mDDDDD""&<&e&eeee  E)))r   c                     t        dd      } t        | dg dgdg      }|j                  t        j                  k(  sJ |j
                  t        j                  k(  sJ |j                  du sJ y )	NT7z4modify dispatch.py to add hook for new functionalityr4   r!   r6   dispatch.pyr"   F)	r   r   r+   r   rM   rN   r   FORBIDDEN_PATH_INTRUSIONr-   rP   s     r   test_07_forbidden_path_criticalrV      s{    CF 56&G ??mDDDDD""&<&U&UUUU  E)))r   c                     t        d      } t        | t              sJ d| v sJ dj                  |       }d|v sJ d|v sJ y )N
THREAD_123graphql resolveReviewThread)r	   
isinstancelistjoin)argscombineds     r   test_08_resolve_thread_payloadra      sS    $\2DdD!!!xx~H H,,,8###r   c            	        t        dd      D  cg c]  } t        d|  dd       }} t        d|dg g g d	
      }|j                  dk(  sJ |j                  dk(  sJ |j
                  dk(  sJ t        dd	d      gt        dd      D  cg c]  } t        d|  dd       c} z   }t        d|dg dgg d	
      }|j
                  dk(  sJ |j                  dk(  sJ y c c} w c c} w )N      TTzold coder    c   abcF	pr_numberthreadsr$   r%   r&   r'   r)   r      TX1z)implement utils/new_module.py for featureTYoldd   r6   )ranger   r   unresolved_countauto_resolved_countblocking_thread_count)i	threads_5reportthreads_mixreport2s        r   $test_09_unresolved_count_calculationry      s6    q! 	qW$Z@I  F ""a'''%%***''1,,, 	U4_` q!	 	r!X4e<	K 56G ((A---##q(((E(	s   C
C"c            	        t        dt        j                  ddd ddi      g} t        |       }t	        |      }t        j                  |      }|d   |j                  j                  k(  sJ |d   |j                  k(  sJ |d   |j                  k(  sJ |d	   |j                  k(  sJ |d
   |j                  k(  sJ |d   |j                  k(  sJ y )Nr   Tz[AUTO-OUTDATED] okoutdated)	thread_idr+   r-   dismiss_commentrN   evidencegemini_statusunresolved_threadsfallback_review_usedfallback_review_passedreview_gate_passedreason)r   r   r,   r
   r   jsonloadsr   valuer   r   r   r   r   )outcomesstatusjson_strparseds       r   )test_10_review_gate_status_json_roundtripr     s    !**0  $'	
	H &h/FvHZZ!F/"f&:&:&@&@@@@&'6+D+DDDD()V-H-HHHH*+v/L/LLLL&'6+D+DDDD(v}},,,r   c            	        t        ddd      t        ddd      t        ddd      t        d	dd
      t        ddd      g} dddgdg}ddg}t        d| d||dgd      }|j                  dk(  sJ |j                  D ]%  }|j                  du rJ d|j
                   d        |j                  dk(  sJ |j                  du sJ |j                  dk(  sJ t        |      }|d   dk(  sJ |d   g k(  sJ |d   du sJ y)uL   PR #61 fixture: 5 unresolved → 5 auto-resolved → mergeStateStatus CLEAN.r   Tu   이전 버전 코드r    r3   zstale commentr>   zoutdated reviewrC   zold implementationrH   FuA   이미 후속 commit b1eff66b로 반영됨. 코드 수정 완료.r5   u   fix: 코드 수정 완료zutils/replacement_pr_runner.pyr7   z3tests/regression/test_replacement_pr_runner_2510.py=   rT   rh   rk   zthread z not auto_resolvedr   r   	completed
unresolvedmerge_readinessN)
r   r   rr   rj   r-   r|   rs   r   rq   r   )rj   r%   r&   rv   r/   legacys         r   )test_11_pr61_replay_5_unresolved_to_cleanr   *  st   
 	Tt2HITt/BTt2CDTt2FGT	

G .267	
K 	)=N
 .%&F %%***>> ^$$,]8I8I7JJ\.]],^ ''1,,,!!T)))""a''' $F+F({***,2%%%#$,,,r   c                     t        dd      } dddgdg}t        | d|dgg 	      }|j                  t        j                  t        j
                  fv sJ |j                  d
u sJ y)u5   PR #56 fixture: hardcoded path 제거 후 commit fix.T56u3   /home/jay/projects/foo hardcoded path 제거 필요r4   deadbeef12345678u   fix: hardcoded path 제거zutils/some_module.pyr7   deadbeefr"   TN)r   r   r+   r   r;   r?   r-   )r#   r%   r/   s      r   *test_12_pr56_replay_hardcoded_path_dismissr   d  s    BF &3,-	
K ./G ??}??A]A]^^^^  D(((r   c                 |    t        dd      } t        | dg g g       }|j                  t        j                  k(  sJ y)z*PR #57 fixture: regex grep false-positive.T57au:   grep regex가 false positive를 매칭하여 오탐 발생r4   rg   r"   Nr   r   r+   r   r?   rP   s     r   -test_13_pr57_replay_regex_grep_false_positiver     sG    IF G ??m:::::r   c                 |    t        dd      } t        | dg g g       }|j                  t        j                  k(  sJ y)z6PR #57 fixture: wrapper helper pattern false positive.T57bu9   wrapper helper pattern false positive 오탐으로 보임r4   rg   r"   Nr   rP   s     r   1test_14_pr57_replay_wrapper_helper_false_positiver     sG    HF G ??m:::::r   c                     t        ddd      } t        | dg g g       }|j                  t        j                  k(  sJ t        |gd      }|d	   j                  du sJ y
)u3   PR #56 fixture: PR head 변경 후 outdated thread.T56bTu"   이전 commit 기준 코드 리뷰r    newshar"   Fr(   r   Nr*   r.   s      r   *test_15_pr56_replay_outdated_commit_reviewr     sp    1F
 G ??m44444#WIU;HA;$$,,,r   c                     t        dd      } t        | dg g g       }|j                  t        j                  k(  sJ t        |gd      }|d   j                  d	u sJ y
)z)PR #55 fixture: style-only medium thread.T55z3nit: prefer f-string over .format() for readabilityr4   rg   r"   Fr(   r   TNrD   r.   s      r   ,test_16_pr55_replay_style_only_medium_threadr     sm    BF G ??m66666#WIU;HA;$$,,,r   c                     t        dd      } t        | dg g g       }|j                  t        j                  k(  sJ |j
                  j                  d      dk(  sJ y)	u   commit 매칭 없이 HARDCODED_PATH_PATTERN만으로 FALSE_POSITIVE 직접 분류 검증.

    Codex G1 게이트 권고: PR #56 회귀가 commit 매칭으로만 통과하지 않도록
    classifier capability 자체를 검증.
    T_HARDuN   /home/jay/projects/InsuRo/scripts/foo 경로가 절대 경로로 박혀 있음r4   rg   r"   matched_kindhardcoded_pathN)r   r   r+   r   r?   r~   getrP   s     r   ,test_17_hardcoded_path_direct_false_positiver     si     ]F G ??m:::::/3CCCCr   c            
         t        dd      } t        ddd      }t        d| |gd	g d
gg dd      }|j                  dk(  sJ |j                  dk\  sJ |j                  du sJ |j
                  j                  du sJ y)uB  REAL_BUG_IN_SCOPE 잔여 thread가 있으면 review_gate_passed=False.

    Codex G1 게이트 권고: blocking_thread_count == 0이어도 unresolved가 있으면
    후속 wiring(task-2514)이 머지하지 않도록 review_gate_passed를 False로 차단.
    merge_readiness는 별도 — blocking 기준만 유지.
    T_REALu&   실제 버그: bug crash on null inputr4   T_OUTTr   r    i  abc12345utils/foo.pyFztask-test-18)ri   rj   r$   r%   r&   r'   r)   task_idr   rc   N)r   r   rs   rq   r   review_gate_statusr   )thread_realthread_outdatedrv   s      r   3test_18_review_gate_blocked_when_unresolved_remainsr     s     x.VWK"7?SOo.&'	F ''1,,,""a'''!!T)))$$775@@@r   c                    t        dd      } t        | dg dgg       }|j                  t        j                  k(  sJ |j
                  du sJ t        dd	      }t        |dg dgg       }|j                  t        j                  k(  sJ |j
                  du sJ t        d
d      }t        |dg dgdg      }|j                  t        j                  k(  sJ |j                  t        j                  k(  sJ y)u  false-positive/style-only 코멘트가 path를 한번 언급해도 SCOPE_EXPANSION으로
    escalate되지 않아야 함.

    Codex G1 권고: 분류 우선순위는 false-positive/style/fixed 검사가
    expected_files scope expansion보다 먼저 실행되어야 함.
    T_BENIGN_FPuC   grep false-positive in docs/guide.md — 실제로는 정상 동작r4   rg   r   r"   TT_BENIGN_STYLEz>nit: rename helper variable in tests/test_x.py for readabilityT_FORBIDDEN_OVERRIDEz!nit: rename helper in dispatch.pyrT   N)r   r   r+   r   r?   r-   rE   rM   rN   r   rU   )thread_a	outcome_athread_b	outcome_bthread_c	outcome_cs         r   5test_19_benign_path_mention_not_escalated_to_criticalr     s+    RH  &'I  < <<<<""d*** MH  &'I  8 8888""d*** 0H  &'&I  F FFFF$$(>(W(WWWWr   )FF )
r   strr   boolr   r   r   r   returndict)0__doc__
__future__r   r   syspathlibr   __file__resolveparent	WORKSPACEr   pathremoveinsertutils.auto_gemini_triager   r   r   r   r	   r
   r   r   r   utils.automation_contractsr   r   r   r1   r<   rA   rF   rJ   rQ   rV   ra   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>r      s/   #  
  N""$++2299	y>SXXHHOOC	N# 3y> "
 
 
 		  	
 
$-&-<'*-,-,****$$)V-63-t):;(;(-0-.D2AH4Xr   