
    ic                       d Z ddlmZ ddlZddlZddlmZ  ee      j                         j                  d   ZddZ e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 d Z!d Z"y)ul  tests/dispatch/test_task_id_parsing.py — task-2471 회귀 테스트.

토르가 commit 320c5f0e 에서 신설한 ``utils.task_id_parser`` (V2 패턴) 의
+N suffix / phase / parallel 보존 동작을 영구 차단한다.

또한 commit 2cbce860 의 dispatch ``--task-file`` 자동 task_id 추출 동작도
간접 검증.

헤임달(개발2팀 테스터) 작성.
    )annotationsN)Path   c                <   t         |z  }t        j                  j                  | t	        |            }||j
                  t        d|       t        j                  j                  |      }|t        j                  | <   |j
                  j                  |       |S )Nzcannot load spec for )	WORKSPACE	importlibutilspec_from_file_locationstrloaderImportErrormodule_from_specsysmodulesexec_module)mod_namefile_rel	file_pathspecmodules        =/home/jay/workspace/tests/dispatch_id/test_task_id_parsing.py_load_moduler      s    H$I>>11(C	NKD|t{{*1)=>>^^,,T2F"CKKKKF#M    task_id_parser_test_aliaszutils/task_id_parser.pyc                 F    t         j                  d      } | dddddk(  sJ y)u.   ``task-2469+1`` -> retry 필드 ``+1`` 보존.task-2469+1	task-2469Nz+1basephaseparallelretrytipparse_task_id_v2outs    r   !test_parse_retry_suffix_preservedr(   *   s*    


}
-C;4RVWWWWr   c                 F    t         j                  d      } | dddddk(  sJ y)z$``task-2469_2.1`` -> phase ``_2.1``.ztask-2469_2.1r   _2.1Nr   r#   r&   s    r   test_parse_phase_onlyr+   0   s5    



/C	   r   c                 F    t         j                  d      } | dddddk(  sJ y)u3   ``task-2469_2.1_a+3`` -> 4 필드 모두 채워짐.ztask-2469_2.1_a+3r   r*   _az+3r   Nr#   r&   s    r   (test_parse_phase_parallel_retry_all_fourr.   ;   s6    


2
3C	   r   c                 F    t         j                  d      } | dddddk(  sJ y)u%   매칭 실패 시 모든 필드 None.invalidNr   r#   r&   s    r   "test_parse_invalid_yields_all_noner1   F   s)    


y
)C4$D4PPPPr   c                 F    t         j                  d      } | dddddk(  sJ y)u2   ``task-2469`` -> phase/parallel/retry 모두 None.r   Nr   r#   r&   s    r   test_parse_with_only_baser3   L   s5    


{
+C	   r   c                 V    t         j                  d      } | d   dk(  sJ | d   dk(  sJ y)u    앞뒤 공백 제거 후 매칭.z  task-2469+5  r   r   r"   z+5Nr#   r&   s    r   test_parse_strips_whitespacer5   W   s7    


0
1Cv;+%%%w<4r   c                 6    t         j                  d      du sJ y )Nr   Tr$   is_valid_task_id r   r   test_is_valid_task_id_simpler:   c   s    ,444r   c                 6    t         j                  d      du sJ y )Nr   Tr7   r9   r   r    test_is_valid_task_id_with_retryr<   g   s    .$666r   c                 6    t         j                  d      du sJ y )Nztask-2469_1.2_a+3Tr7   r9   r   r   test_is_valid_task_id_fullr>   k   s     34<<<r   c                     t         j                  d      du sJ t         j                  d      du sJ t         j                  d      du sJ y )Nz
not-a-taskFztask-abc r7   r9   r   r   %test_is_valid_task_id_rejects_invalidrA   o   sM    -666
+u444#u,,,r   c                 <    t         j                  d      } | dk(  sJ y)z3``memory/tasks/task-2469+1.md`` -> ``task-2469+1``.zmemory/tasks/task-2469+1.mdr   Nr$   extract_task_id_from_filenamer&   s    r   (test_extract_from_filename_relative_pathrE   z   s!    

+
+,I
JC-r   c                 <    t         j                  d      } | dk(  sJ y)u'   절대 경로 + 4 필드 모두 보존.z/abs/path/task-2470_1.2_b+5.mdztask-2470_1.2_b+5NrC   r&   s    r   (test_extract_from_filename_absolute_pathrG      s"    

+
+,L
MC%%%%r   c                 <    t         j                  d      } | dk(  sJ y )Nz	task-1234rC   r&   s    r   'test_extract_from_filename_no_extensionrI      s     

+
+K
8C+r   c                 6    t         j                  d      } | J y )Nz	README.mdrC   r&   s    r   1test_extract_from_filename_unrelated_returns_nonerK      s    

+
+K
8C;;r   c                 `    t         j                  d      J t         j                  d       J y Nr@   rC   r9   r   r   1test_extract_from_filename_empty_or_invalid_inputrN      s0    ,,R0888,,T2:::r   c                 <    t         j                  d      } | dk(  sJ y)z-``task/task-2467+3-dev6`` -> ``task-2467+3``.ztask/task-2467+3-dev6ztask-2467+3Nr$   extract_task_id_from_branchr&   s    r   #test_extract_from_branch_with_retryrR      s!    

)
)*A
BC-r   c                 6    t         j                  d      } | J y)u%   main 같은 일반 브랜치는 None.mainNrP   r&   s    r   *test_extract_from_branch_main_returns_nonerU      s    

)
)&
1C;;r   c                 <    t         j                  d      } | dk(  sJ y )Nztask/task-2469_1.2-dev2ztask-2469_1.2rP   r&   s    r   #test_extract_from_branch_with_phaserW      s!    

)
)*C
DC/!!!r   c                 <    t         j                  d      } | dk(  sJ y)u4   phase + parallel + retry 모두 포함된 브랜치.ztask/task-2470_1.2_a+5-dev3ztask-2470_1.2_a+5NrP   r&   s    r   #test_extract_from_branch_full_comborY      s"    

)
)*G
HC%%%%r   c                 `    t         j                  d      J t         j                  d       J y rM   rP   r9   r   r   $test_extract_from_branch_empty_inputr[      s0    **2.666**40888r   c                 |    ddl } t        t        d      sJ t        t        j                  | j
                        sJ y)uL   ``TASK_ID_V2_PATTERN`` 가 모듈에서 노출되어야 함 (외부 사용).r   NTASK_ID_V2_PATTERN)rehasattrr$   
isinstancer]   Pattern)_res    r   test_pattern_constant_exposedrc      s0    3,---c,,ckk:::r   )r   r   r   r   )#__doc__
__future__r   importlib.utilr   r   pathlibr   __file__resolveparentsr   r   r$   r(   r+   r.   r1   r3   r5   r:   r<   r>   rA   rE   rG   rI   rK   rN   rR   rU   rW   rY   r[   rc   r9   r   r   <module>rk      s   	 #  
 N""$,,Q/	 XQ 57=- &

; "
&9;r   