
    iu                         d Z ddlZddlZddlZddlmZ ej                  j                  d e ee	      j                  j                  j                               ddlmZ  G d d      Z G d d      Z G d	 d
      Z G d d      Zy)u   test_worktree_resolver.py — resolve_worktree_target_dir 단위 테스트.

쿠쿨칸(개발7팀): task-2355 worktree 인식 수정 구현의 일부.
    N)Path)resolve_worktree_target_dirc                       e Zd Zd Zd Zy)TestEmptyTaskIdc                 l    t        dt        |dz        t        |dz              \  }}|J |dk(  sJ y)u    task_id=None → (None, "none").Nnonexistent.jsonprojectstask_timers_pathprojects_rootnoner   strselftmp_pathpathsources       W/home/jay/workspace/.worktrees/task-2487+1-dev2/scripts/tests/test_worktree_resolver.py"test_returns_none_for_none_task_idz2TestEmptyTaskId.test_returns_none_for_none_task_id   sH    2 ,>!>?h34
f
 ||    c                 l    t        dt        |dz        t        |dz              \  }}|J |dk(  sJ y)u   task_id="" → (None, "none"). r   r	   r
   Nr   r   r   s       r   #test_returns_none_for_empty_task_idz3TestEmptyTaskId.test_returns_none_for_empty_task_id    sH    2 ,>!>?h34
f
 ||r   N)__name__
__module____qualname__r   r    r   r   r   r      s      r   r   c                       e Zd Zd Zd Zd Zy)TestTaskTimersResolutionc                 2   |dz  dz  dz  dz  }|j                  d       ddd	t        |      iii}|d
z  }|j                  t        j                  |             t        dt        |      t        |dz              \  }}|t        |      k(  sJ |dk(  sJ y)u9   task-timers.json에 worktree_path가 명시되면 반환.r	   InsuRo
.worktreesztask-9999-fixTparentstasksz	task-9999worktree_pathtask-timers.jsonr
   task_timersNmkdirr   
write_textjsondumpsr   )r   r   wt_dirtimers_datatimers_filer   r   s          r   "test_returns_path_from_task_timersz;TestTaskTimersResolution.test_returns_path_from_task_timers/   s     J&1L@?RT" #S[
 !33tzz+672 -h34
f
 s6{"""&&&r   c                    |dz  dz  }|j                  d       dddt        |      iii}|dz  }|j                  t        j                  |             t        dt        |      t        |dz        	      \  }}|J |dk(  sJ y
)uS   worktree_path가 /.worktrees/를 포함하지 않으면 무시하고 glob fallback.r	   r"   Tr$   r&   z	task-8888r'   r(   r
   Nr   r*   )r   r   
non_wt_dirr0   r1   r   r   s          r   %test_skips_non_worktree_explicit_pathz>TestTaskTimersResolution.test_skips_non_worktree_explicit_pathG   s     
*X5
& #S_
 !33tzz+67 3 -h34
f ||r   c                     dddt        |dz  dz  dz        iii}|dz  }|j                  t        j                  |             t	        dt        |      t        |dz        	      \  }}|J |dk(  sJ y
)u?   worktree_path가 존재하지 않는 디렉토리이면 무시.r&   z	task-7777r'   nor#   ztask-7777-fixr(   empty_projectsr
   Nr   )r   r,   r-   r.   r   )r   r   r0   r1   r   r   s         r   $test_skips_nonexistent_worktree_pathz=TestTaskTimersResolution.test_skips_nonexistent_worktree_patha   s     #SD<)G/)Y%Z
 !33tzz+672 -h)99:
f
 ||r   N)r   r   r   r2   r5   r9   r   r   r   r    r    .   s    '0 4 r   r    c                       e Zd Zd Zd Zd Zy)TestGlobFallbackc                     |dz  dz  dz  }|j                  d       t        dt        |dz        t        |            \  }}|t        |      k(  sJ |d	k(  sJ y
)u?   tmp_path에 가짜 worktree 디렉토리 → glob으로 탐지.r"   r#   ztask-1234-featTr$   z	task-1234no_timers.jsonr
   globNr+   r   r   )r   r   r/   r   r   s        r   test_glob_fallbackz#TestGlobFallback.test_glob_fallbackz   so    H$|36FFT" 3 ,<!<=h-
f
 s6{"""r   c                 v   |dz  dz  }|j                  d       |dz  }|j                          t        j                         dz
  }ddl}|j                  t	        |      ||f       |d	z  }|j                          t        d
t	        |dz        t	        |            \  }}|t	        |      k(  sJ |dk(  sJ y)uO   같은 task_id의 worktree 2개 → mtime 큰 쪽(최근 수정된 것) 반환.r"   r#   Tr$   ztask-5555-alphai  r   Nztask-5555-betaz	task-5555r=   r
   r>   )r+   timeosutimer   r   )	r   r   wt_rootolder_wtold_timerC   newer_wtr   r   s	            r   test_glob_returns_most_recentz.TestGlobFallback.test_glob_returns_most_recent   s    X%4d#..99;%
X8 45-- 3 ,<!<=h-
f
 s8}$$$r   c                     |dz  }|j                          |dz  dz  dz  }|j                  d       t        dt        |dz        t        |      	      \  }}|t        |      k(  sJ |d
k(  sJ y)uU   여러 프로젝트 디렉토리 중 해당 task_id worktree가 있는 것을 탐지.	project_a	project_br#   ztask-6666-implTr$   z	task-6666r=   r
   r>   Nr?   )r   r   proj_ar/   r   r   s         r   (test_glob_finds_across_multiple_projectsz9TestGlobFallback.test_glob_finds_across_multiple_projects   s     K' K',69IIT"2 ,<!<=h-
f
 s6{"""r   N)r   r   r   r@   rI   rN   r   r   r   r;   r;   y   s      0 r   r;   c                       e Zd Zd Zd Zd Zy)TestNoWorktreeFoundc                     |dz  }|j                          |dz  j                          t        dt        |dz        t        |            \  }}|J |dk(  sJ y)u7   task-timers도 없고 glob도 없으면 (None, "none").r	   empty_projectz	task-0000r=   r
   Nr   r?   )r   r   projects_dirr   r   s        r   +test_returns_none_when_no_worktree_anywherez?TestNoWorktreeFound.test_returns_none_when_no_worktree_anywhere   sj    *,		'..02 ,<!<=l+
f
 ||r   c                 l    t        dt        |dz        t        |dz              \  }}|J |dk(  sJ y)u>   projects_root 디렉토리 자체가 없으면 (None, "none").z	task-1111r=   nonexistent_projectsr
   Nr   r   r   s       r   .test_returns_none_when_projects_root_not_existzBTestNoWorktreeFound.test_returns_none_when_projects_root_not_exist   sI    2 ,<!<=h)??@
f
 ||r   c                     |dz  }|j                  d       t        dt        |      t        |dz              \  }}|J |dk(  sJ y)uE   task-timers.json이 깨진 JSON이어도 예외 없이 glob fallback.zbad_timers.jsonz{invalid json}z	task-2222emptyr
   Nr   )r,   r   r   )r   r   r1   r   r   s        r   +test_task_timers_load_failure_falls_throughz?TestNoWorktreeFound.test_task_timers_load_failure_falls_through   s\    !22/02 -h01
f
 ||r   N)r   r   r   rT   rW   rZ   r   r   r   rP   rP      s       r   rP   )__doc__r-   sysrB   pathlibr   r   insertr   __file__parentutils.worktree_resolverr   r   r    r;   rP   r   r   r   <module>rb      sv   
  
   3tH~,,33::; < ?   2E  E V7  7 z%  % r   