
    i                        d Z ddlZddlZddlZddlZddlmZmZ ddlmZ ddl	Z	 ej                         Zeej                  d<   ej                  j                  d e ee      j"                  j"                                ed      Z G d d      Z G d	 d
      Z G d d      Z G d d      Zedk(  r e	j2                  edg       yy)u#   done-watcher.py 테스트 스위트    N)datetimetimezone)PathWORKSPACE_ROOTzdone-watcherc                   .    e Zd ZdZd Zd Zd Zd Zd Zy)TestExtractTeamFromDoneFileu)   done 파일명에서 팀 추출 테스트c                 F    |dz  }t         j                  |      }|dk(  sJ y)u   task-648.1.dev1.done → dev1task-648.1.dev1.donedev1Ndwextract_team_from_done_fileselftmp_path	done_fileresults       P/home/jay/workspace/.worktrees/task-2116-dev1/scripts/tests/test_done_watcher.pytest_extract_dev1_teamz2TestExtractTeamFromDoneFile.test_extract_dev1_team   +    55	//	:    c                 F    |dz  }t         j                  |      }|dk(  sJ y)u   task-648.1.dev2.done → dev2ztask-648.1.dev2.donedev2Nr   r   s       r   test_extract_dev2_teamz2TestExtractTeamFromDoneFile.test_extract_dev2_team    r   r   c                 F    |dz  }t         j                  |      }|dk(  sJ y)u   task-648.1.dev3.done → dev3ztask-648.1.dev3.donedev3Nr   r   s       r   test_extract_dev3_teamz2TestExtractTeamFromDoneFile.test_extract_dev3_team&   r   r   c                 
   |dz  dz  }|j                   j                  d       |j                  t        j                  ddddiii             t        |      t        _        |d	z  }t        j                  |      }|dk(  sJ y
)u,   팀 정보 없으면 task-timers.json 조회memoryztask-timers.jsonTparentstasksz
task-648.1team_idz	dev3-teamtask-648.1.doneN)	parentmkdir
write_textjsondumpsstrr   r   r   )r   r   
timer_filer   r   s        r   -test_no_team_in_filename_falls_back_to_timerszITestExtractTeamFromDoneFile.test_no_team_in_filename_falls_back_to_timers,   s     (+==
-djj'L9kBZ3[)\]^M00	//	:$$$r   c                 h    t        |      t        _        |dz  }t        j                  |      }|J y)u*   팀 정보 없고 timers도 없으면 Noner$   N)r*   r   r   r   r   s       r   #test_no_team_no_timers_returns_nonez?TestExtractTeamFromDoneFile.test_no_team_no_timers_returns_none8   s3    M00	//	:~~r   N)	__name__
__module____qualname____doc__r   r   r   r,   r.    r   r   r   r      s    3   
%r   r   c                   (    e Zd ZdZd Zd Zd Zd Zy)TestSetBotIdleu    봇 상태 idle 전환 테스트c           	      P   |dz  }|j                   j                  dd       |j                  t        j                  dddddii             |t
        _        t
        j                  d      }|du sJ t        j                  |j                               }|d   d   d	   d
k(  sJ y)u!   processing → idle 전환 성공bot-activity.jsonTr!   exist_okbots	dev1-team
processing2026-03-17T00:00:00Zstatussincer?   idleN)
r%   r&   r'   r(   r)   r   BOT_ACTIVITY_FILEset_bot_idleloads	read_text)r   r   bot_filer   saveds        r   test_set_idle_from_processingz,TestSetBotIdle.test_set_idle_from_processingC   s    11dT:JJPf.g hij	
  (-~~

8--/0V}[)(3v===r   c           	          |dz  }|j                   j                  dd       |j                  t        j                  dddddii             |t
        _        t
        j                  d      }|du sJ y	)
u-   이미 idle이면 True 반환 (변경 없음)r7   Tr8   r:   r;   rA   r=   r>   N)r%   r&   r'   r(   r)   r   rB   rC   r   r   rF   r   s       r   test_already_idle_returns_truez-TestSetBotIdle.test_already_idle_returns_trueR   sm    11dT:DJJZp>q0r'stu'-~~r   c                     |dz  }|j                   j                  dd       |j                  t        j                  di i             |t
        _        |dz  t
        _        t
        j                  d      }|du sJ y)	u!   존재하지 않는 팀 → Falser7   Tr8   r:   log.logzunknown-teamFN)	r%   r&   r'   r(   r)   r   rB   DONE_PROTOCOL_LOGrC   rJ   s       r   test_unknown_team_returns_falsez.TestSetBotIdle.test_unknown_team_returns_false\   sn    11dT:DJJ|45'')30r   c           	      x   |dz  }|j                   j                  dd       |j                  t        j                  dddddii             |t
        _        |d	z  t
        _        t
        j                  d       t        j                  |j                               }|d   d   d
   j                  d      sJ y)u)   idle 전환 시 since 필드 업데이트r7   Tr8   r:   r   r<   z2026-01-01T00:00:00Zr>   rM   r@   z2026-03N)r%   r&   r'   r(   r)   r   rB   rN   rC   rD   rE   
startswith)r   r   rF   rG   s       r   test_idle_timestamp_updatedz*TestSetBotIdle.test_idle_timestamp_updatedg   s    11dT:DJJL[q9r0s'tuv'')3


8--/0V}V$W-88CCCr   N)r/   r0   r1   r2   rH   rK   rO   rR   r3   r   r   r5   r5   @   s    *>	Dr   r5   c                   "    e Zd ZdZd Zd Zd Zy)TestScanDoneFilesu   done 파일 스캔 테스트c                     |dz  dz  }|j                  d       |dz  j                  d       |dz  j                  d       |t        _        t        j	                         }t        |      dk(  sJ y	)
u"   처리 안 된 .done 파일 찾기r   eventsTr    r$   {}ztask-648.2.done   N)r&   r'   r   
EVENTS_DIRscan_done_fileslenr   r   
events_dirr   s       r   test_scan_finds_done_filesz,TestScanDoneFiles.test_scan_finds_done_filesy   sq    (83
&	'	'33D9	'	'33D9"##%6{ar   c                     |dz  dz  }|j                  d       |t        _        t        j                         }|g k(  sJ y)u#   done 파일 없으면 빈 리스트r   rV   Tr    N)r&   r   rY   rZ   r\   s       r   test_scan_empty_dirz%TestScanDoneFiles.test_scan_empty_dir   sC    (83
&"##%||r   c                     |dz  dz  }|j                  d       |dz  j                  d       |dz  j                  d       |t        _        t        j	                         }|g k(  sJ y)	u   done이 아닌 파일은 제외r   rV   Tr    ztask-648.1.failedrW   zsome-file.jsonN)r&   r'   r   rY   rZ   r\   s       r    test_scan_ignores_non_done_filesz2TestScanDoneFiles.test_scan_ignores_non_done_files   sk    (83
&	)	)55d;	&	&2248"##%||r   N)r/   r0   r1   r2   r^   r`   rb   r3   r   r   rT   rT   v   s    &	 	r   rT   c                       e Zd ZdZd Zd Zy)TestProcessDoneFilesu#   done 파일 처리 통합 테스트c           	         |dz  dz  }|j                  d       |dz  j                  d       |dz  }|j                  t        j                  dd	d
ddii             |t        _        |t        _        |dz  t        _        t        j                         }|dk(  sJ t        j                  |j                               }|d   d	   d   dk(  sJ y)u&   done 파일 감지 → 봇 idle 전환r   rV   Tr    r
   rW   r7   r:   r   r<   r=   r>   rM      r?   rA   N)r&   r'   r(   r)   r   rY   rB   rN   process_done_filesrD   rE   )r   r   r]   rF   	processedrG   s         r   $test_process_done_file_sets_bot_idlez9TestProcessDoneFiles.test_process_done_file_sets_bot_idle   s    (83
& 
,	,88>  33DJJL[q9r0s'tuv"'')3))+	A~~

8--/0V}V$X.&888r   c                     |dz  dz  }|j                  d       |t        _        |dz  t        _        t        j	                         }|dk(  sJ y)u   done 파일 없으면 0 반환r   rV   Tr    rM   r   N)r&   r   rY   rN   rg   )r   r   r]   rh   s       r   test_process_no_done_filesz/TestProcessDoneFiles.test_process_no_done_files   sP    (83
&"')3))+	A~~r   N)r/   r0   r1   r2   ri   rk   r3   r   r   rd   rd      s    -9,r   rd   __main__z-v)r2   r(   ossystempfiler   r   pathlibr   pytestmkdtemp_TEMP_WORKSPACEenvironpathinsertr*   __file__r%   
__import__r   r   r5   rT   rd   r/   mainr3   r   r   <module>rz      s    )  	 
  '   #(""$.

  3tH~,,334 5 & &R3D 3Dl   F! !H zFKK4 ! r   