
    ib                    .   d Z ddlmZ ddlZddlZddlZddlmZ  ee      j                         j                  d   Z ee      ej                  vr"ej                  j                  d ee             ddlmZ ddlmZmZ  G d d	      Z G d
 d      Zy)u   tests/regression/test_g3_fail_classification.py — T9: g3_fail 분류 + enum 4종.

헤임달 (개발2팀 테스트 엔지니어) 작성.
    )annotationsN)Path   )classify_g3_fail)RECONCILE_CLASSIFICATIONSSUPPORTED_CLASSIFICATIONSc                  4    e Zd ZddZddZddZddZddZy)TestClassifyG3Failc                J   |dz  }|j                  t        j                  ddgi      d       d}t        j                  t        |      ||f       |dz  }|j                  dd       t        j                  t        |      |d	z   |d	z   f       t        ||      }|d
k(  sJ y)uU   report mtime > g3-fail mtime + fail_reasons에 'report not found'만 → false_alert.task-x.g3-failfail_reasonsreport not foundutf-8encoding   @TA	task-x.md# task-x report
<   #false_alert_resolved_by_late_reportN
write_textjsondumpsosutimestrr   selftmp_pathg3_fail_path	base_timereport_pathresults         _/home/jay/workspace/.worktrees/task-2472+1-dev2/tests/regression/test_g3_fail_classification.py(test_false_alert_resolved_by_late_reportz;TestClassifyG3Fail.test_false_alert_resolved_by_late_report   s    "22JJ);(<=> 	  	

 !	
\"Y	$:;,2WE
[!ININ#CD!,<>>>>    c                    |dz  }|j                  t        j                  ddgi      d       |dz  }t        ||      }|dk(  sJ y)	u$   report 파일 없음 → unresolved.r   r   r   r   r   r   
unresolvedN)r   r   r   r   r   r    r!   r#   r$   s        r%   #test_unresolved_when_report_missingz6TestClassifyG3Fail.test_unresolved_when_report_missing1   s^    "22JJ);(<=> 	  	

 ,!,<%%%r'   c                J   |dz  }|j                  t        j                  ddgi      d       d}|dz  }|j                  dd       t        j                  t        |      ||f       t        j                  t        |      |d	z   |d	z   f       t        ||      }|d
k(  sJ y)u,   report mtime < g3-fail mtime → unresolved.r   r   r   r   r   r   r   r   x   r)   Nr   r   s         r%   -test_unresolved_when_report_older_than_g3failz@TestClassifyG3Fail.test_unresolved_when_report_older_than_g3fail>   s    "22JJ);(<=> 	  	
 !	,2WE
[!Iy#9:
\"Y_i#o$FG!,<%%%r'   c                J   |dz  }|j                  t        j                  ddgi      d       d}t        j                  t        |      ||f       |dz  }|j                  dd       t        j                  t        |      |d	z   |d	z   f       t        ||      }|d
k(  sJ y)uD   fail_reasons에 'report not found' 외 다른 이유 → unresolved.r   r   ztest failure: exit code 1r   r   r   r   r   r   r)   Nr   r   s         r%   'test_unresolved_when_other_fail_reasonsz:TestClassifyG3Fail.test_unresolved_when_other_fail_reasonsP   s    "22JJ)D(EFG 	  	
 !	
\"Y	$:;,2WE
[!ININ#CD!,<%%%r'   c                d    |dz  }|dz  }|j                  dd       t        ||      }|dk(  sJ y)u4   .g3-fail 파일 없음 → unresolved (fail-closed).znonexistent.g3-failr   r   r   r   r)   N)r   r   r*   s        r%   #test_unresolved_when_g3fail_missingz6TestClassifyG3Fail.test_unresolved_when_g3fail_missinga   sE    "77,2WE!,<%%%r'   N)r    r   )__name__
__module____qualname__r&   r+   r.   r0   r2    r'   r%   r
   r
      s    ?&&&$&"&r'   r
   c                      e Zd Zd Zd Zd Zy)TestClassificationEnumsc                "    h d}t         |k(  sJ y)u0   4종 classification enum이 정확히 정의됨.>    state_orphaned_after_valid_merge!state_missing_after_taskctl_crash"state_corrupted_with_partial_merge#state_inconsistent_after_force_pushN)r   )r   expecteds     r%   test_4_classifications_definedz6TestClassificationEnums.test_4_classifications_definedq   s    
 )H444r'   c                R    t         dhk(  sJ t        j                  t              sJ y)u3   1차 지원은 state_orphaned_after_valid_merge만.r:   N)r   issubsetr   )r   s    r%   test_supported_subsetz-TestClassificationEnums.test_supported_subset{   s)    (-O,PPPP(112KLLLr'   c                   ddl }|j                  t        j                  t	        t
        dz  dz        ddddd	d
dd
ddddgdddi t        j                  dt	        t
              i      }|j                  dk7  s.J d|j                   d|j                   d|j                          |j                  |j                  z   }d|v sd|v s
J d|        yy)uK   subprocess로 cmd_reconcile 호출 — 미지원 classification → exit 1.r   Nscriptsz
taskctl.py	reconcilez	--task-idztask-2472+1-testz--classificationr<   z
--evidencezpr=99zmerge-commit=abc1234z--approved-by-chairmanz--evidence-pathz/tmp/dummy.jsonlT   WORKSPACE_ROOT)capture_outputtexttimeoutenvu   기대: exit 1, 실제: z	
stdout: z	
stderr: u   enum 인식만 지원u   1차 실 동작u*   예상 메시지 없음. combined output:
)
subprocessrunsys
executabler   _WT_ROOTr   environ
returncodestdoutstderr)r   rL   r$   combineds       r%   /test_unsupported_classification_via_cli_rejectszGTestClassificationEnums.test_unsupported_classification_via_cli_rejects   s   Hy(<78/"$Hg4(!#5
  ?2::?/X?   
"   A% 	
&v'8'8&9 :}}oZ@	
% ==6==0&(26G86S 	
9(D	
S6S2r'   N)r3   r4   r5   r?   rB   rV   r6   r'   r%   r8   r8   p   s    5M

r'   r8   )__doc__
__future__r   r   r   rN   pathlibr   __file__resolveparentsrP   r   pathinsertutils.g3_fail_classifierr   utils.state_repairr   r   r
   r8   r6   r'   r%   <module>ra      s    #  	 
  >!!#++A.x= HHOOAs8}% 5K& K&f,
 ,
r'   