
    Si                         d Z ddlZddlZddlmZ ddlmZmZ ej                  j                  dd       dede
ddfd	Zd
 Zd Zd Zd Zd Zd Zd Zd Zy)u}   
통합 테스트: dispatch.py - _check_affected_files_overlap, _send_overlap_telegram_warning
task-1837_5.1 - 엔키 작성
    N)Path)	MagicMockpatchz/home/jay/workspacetmp_pathdatareturnc                     | dz  }|j                  dd       |dz  j                  t        j                  |      d       y)u0   task-timers.json을 tmp_path/memory/ 에 작성.memoryTparentsexist_okztask-timers.jsonzutf-8)encodingN)mkdir
write_textjsondumps)r   r   r
   s      ^/home/jay/workspace/.worktrees/task-2117-dev1/tests/integration/test_affected_files_overlap.py_write_timersr      s>     F
LLL-  ,,TZZ-=,P    c                     ddddgdii}t        | |       ddl}|j                  |d|        |j                  dgd	      }|g k(  sJ y)
uF   running 상태 task가 없으면 빈 리스트를 반환해야 한다.tasksztask-100donedispatch.pystatusaffected_filesr   N	WORKSPACEztask-200r   dispatchsetattr_check_affected_files_overlapr   monkeypatchr   _dresults        r   +test_overlap_no_running_tasks_returns_emptyr&      s`     	6m_M
D
 (D!K2--}ozJFR<<r   c                     dddddgdii}t        | |       ddl}|j                  |d	|        |j                  dd
gd      }t	        |      dk(  sJ d|d   v sJ d|d   v sJ y)ue   running 상태 task와 affected_files가 겹치면 경고 메시지 리스트를 반환해야 한다.r   ztask-101runningr   zutils/logger.pyr   r   Nr   z	server.pyztask-202   r   r   r    r!   lenr   r#   r   r$   warningss        r   8test_overlap_running_task_with_same_file_returns_warningr.   '   s     	##02C"D
D (D!K2//0LjYHx=A!$$$HQK'''r   c                     ddddgdii}t        | |       ddl}|j                  |d|        |j                  dgd      }|g k(  sJ y)	uM   자기 자신(current_task_id)은 겹침 검사에서 제외되어야 한다.r   ztask-999r(   r   r   r   Nr   r   r"   s        r   %test_overlap_excludes_current_task_idr0   <   sf     	##0/
D (D!K2 --}ozJFR<<r   c                     | dz  j                  dd       ddl}|j                  |d|        |j                  dgd      }|g k(  sJ y)	uC   task-timers.json이 없으면 빈 리스트를 반환해야 한다.r
   Tr   r   Nr   zany_file.pyztask-300)r   r   r    r!   )r   r#   r$   r%   s       r   )test_overlap_no_timers_file_returns_emptyr2   P   sQ     t<K2--}ozJFR<<r   c                     dddgdddgddddgddi}t        | |       dd	l}|j                  |d
|        |j                  dgd      }t	        |      dk(  sJ d|d   v sJ d|d   vsJ y	)uJ   여러 running task 중 겹치는 것만 경고에 포함되어야 한다.r   r(   za.pyr   zb.pyr   )task-110task-111ztask-112r   Nr   ztask-500r)   r4   r5   r*   r,   s        r   #test_overlap_multiple_running_tasksr6   \   s     	##)(
 $#)(
 !#)6"2
D  (D!K2//*EHx=A!$$$Xa[(((r   c                      ddl } t        d      5 }| j                  g        |j                          ddd       y# 1 sw Y   yxY w)uT   warnings가 비어있으면 urllib.request.urlopen을 호출하지 않아야 한다.r   Nurllib.request.urlopen)r   r   _send_overlap_telegram_warningassert_not_called)r$   mock_urlopens     r   :test_send_overlap_warning_empty_list_does_not_call_urlopenr<   {   s?    	'	( )L
))"-&&() ) )s	   ";Ac                     ddl }| j                  dd       t        d      5 }|j                  dg       |j	                          ddd       y# 1 sw Y   yxY w)uO   ANU_BOT_TOKEN이 설정되지 않으면 Telegram 호출을 스킵해야 한다.r   NANU_BOT_TOKENF)raisingr8   F   [파일 충돌 경고] task-101(running)와 파일 겹침: dispatch.py)r   delenvr   r9   r:   )r#   r$   r;   s      r   ,test_send_overlap_warning_no_bot_token_skipsrB      sV    6	'	( )L
))+s*tu&&() ) )s   #AAc                     ddl }| j                  dd       t               }t        d|      5 }|j	                  dg       |j                          ddd       y# 1 sw Y   yxY w)u:   ANU_BOT_TOKEN이 있으면 urlopen을 호출해야 한다.r   Nr>   ztest-token-123r8   )return_valuer@   )r   setenvr   r   r9   assert_called_once)r#   r$   	mock_respr;   s       r   2test_send_overlap_warning_with_token_calls_urlopenrH      s]    (89I	'i	@ *L
))+s*tu'')* * *s   #AA#)__doc__r   syspathlibr   unittest.mockr   r   pathinsertdictr   r&   r.   r0   r2   r6   r<   rB   rH    r   r   <module>rQ      sq   
  
  * ( )QD Q Q Q (*(	)>))	*r   