
    i)              	          d Z ddlZddlZddlZddlZddlmZ ddlZej                  j                  d e ee      j                  j                               ej                  j                  d ee      j                  j                  dz        Zerej"                  sJ ej                  j%                  e      Zej"                  j)                  e       d"dededed	efd
Zd#deded	efdZ G d d      Z G d d      Z G d d      Z G d d      Z G d d      Z G d d      Z G d d      Z G d d      Z G d d      Z  G d d      Z! G d  d!      Z"y)$uC   Tests for cleanup-workspace.py — TDD 방식. tmp_path 로 격리.    N)Pathcleanup_workspacezcleanup-workspace.pypathdayscontentreturnc                     | j                   j                  dd       | j                  |       |r2t        j                         |dz  z
  }t	        j
                  | ||f       | S NT)parentsexist_okQ )parentmkdir
write_texttimeosutime)r   r   r   tss       U/home/jay/workspace/.worktrees/task-2116-dev1/scripts/tests/test_cleanup_workspace.py_mkr      sS    KKdT2OOGYY[4%<'
Bx K    c                     | j                  dd       |r2t        j                         |dz  z
  }t        j                  | ||f       | S r
   )r   r   r   r   )r   r   r   s      r   _mk_dirr      s@    JJtdJ+YY[4%<'
Bx Kr   c                   L    e Zd ZdeddfdZdeddfdZdeddfdZdeddfdZy)TestTmptmp_pathr   Nc                 \    t        |dz  dz  d      }|t        j                  |      v sJ y )Ntmpold.txt   r   r   cwfind_tmp_candidatesselfr   fs      r   test_old_is_candidatezTestTmp.test_old_is_candidate&   s1    5 9,15B**84444r   c                 \    t        |dz  dz  d      }|t        j                  |      vsJ y )Nr   znew.txt   r!   r"   r%   s      r   test_recent_not_candidatez!TestTmp.test_recent_not_candidate*   s1    5 9,15..x8888r   c                 \    t        |dz  dz  d      }|t        j                  |      vsJ y )Nr   z
border.txt   r!   r"   r%   s      r   test_exactly_7_not_candidatez$TestTmp.test_exactly_7_not_candidate.   s1    5 </a8..x8888r   c                 8    t         j                  |      g k(  sJ y )N)r#   r$   r&   r   s     r   test_missing_dir_emptyzTestTmp.test_missing_dir_empty2   s    %%h/2555r   )__name__
__module____qualname__r   r(   r+   r.   r1    r   r   r   r   %   sN    5d 5t 59$ 94 99T 9d 96t 6 6r   r   c                   L    e Zd ZdeddfdZdeddfdZdeddfdZdeddfdZy)
TestEventsr   r   Nc                 b    t        |dz  dz  dz  d      }|t        j                  |      v sJ y )Nmemoryeventst.done.clear   r!   r   r#   find_events_candidatesr%   s      r   test_old_done_clearzTestEvents.test_old_done_clear9   6    8#h.?bIB--h7777r   c                 b    t        |dz  dz  dz  d      }|t        j                  |      v sJ y )Nr9   r:   zt.done.acked#   r!   r=   r%   s      r   test_old_done_ackedzTestEvents.test_old_done_acked=   r@   r   c                 b    t        |dz  dz  dz  d      }|t        j                  |      vsJ y )Nr9   r:   r;   
   r!   r=   r%   s      r   r+   z$TestEvents.test_recent_not_candidateA   s6    8#h.?bI11(;;;;r   c                 b    t        |dz  dz  dz  d      }|t        j                  |      vsJ y )Nr9   r:   zt.done.notified(   r!   r=   r%   s      r   test_other_suffix_ignoredz$TestEvents.test_other_suffix_ignoredE   s7    8#h.1BBL11(;;;;r   )r2   r3   r4   r   r?   rC   r+   rH   r5   r   r   r7   r7   8   sN    8D 8T 88D 8T 8<$ <4 <<$ <4 <r   r7   c                   L    e Zd ZdeddfdZdeddfdZdeddfdZdeddfdZy)TestDispatchr   r   Nc                 b    t        |dz  dz  dz  d      }|t        j                  |      v sJ y )Nr9   taskszdispatch-001.md[   r!   r   r#   find_dispatch_candidatesr%   s      r   test_old_dispatch_candidatez(TestDispatch.test_old_dispatch_candidateM   s7    8#g-0AAKB//9999r   c                 b    t        |dz  dz  dz  d      }|t        j                  |      vsJ y )Nr9   rL   zdispatch-002.md   r!   rN   r%   s      r   "test_recent_dispatch_not_candidatez/TestDispatch.test_recent_dispatch_not_candidateQ   7    8#g-0AAK33H====r   c                 b    t        |dz  dz  dz  d      }|t        j                  |      vsJ y )Nr9   rL   ztask-999.md   r!   rN   r%   s      r   test_task_md_never_candidatez)TestDispatch.test_task_md_never_candidateU   s6    8#g-=CH33H====r   c                 b    t        |dz  dz  dz  d      }|t        j                  |      vsJ y )Nr9   rL   zdispatch-003.mdZ   r!   rN   r%   s      r   test_exactly_90_not_candidatez*TestDispatch.test_exactly_90_not_candidateY   rT   r   )r2   r3   r4   r   rP   rS   rW   rZ   r5   r   r   rJ   rJ   L   sN    :D :T :>4 >D >>T >d >>d >t >r   rJ   c                   <    e Zd ZdeddfdZdeddfdZdeddfdZy)TestLogsr   r   Nc                 \    t        |dz  dz  d      }|t        j                  |      v sJ y )Nlogszapp.log=   r!   r   r#   find_logs_candidatesr%   s      r   test_old_log_candidatezTestLogs.test_old_log_candidatea   s1    6!I-B7B++H5555r   c                 \    t        |dz  dz  d      }|t        j                  |      vsJ y )Nr^   z
recent.log   r!   r`   r%   s      r   test_recent_log_not_candidatez&TestLogs.test_recent_log_not_candidatee   s1    6!L0q9//9999r   c                 \    t        |dz  dz  d      }|t        j                  |      vsJ y )Nr^   zcleanup-2025-01-01.logd   r!   r`   r%   s      r   test_cleanup_log_excludedz"TestLogs.test_cleanup_log_excludedi   s2    6!$<<3G//9999r   )r2   r3   r4   r   rb   re   rh   r5   r   r   r\   r\   `   s;    6t 6 6:d :t ::$ :4 :r   r\   c                   ,    e Zd ZdeddfdZdeddfdZy)TestBackupsr   r   Nc                 b    t        |dz  dz  dz  d      }|t        j                  |      v sJ y )Nr9   backupsz
old.tar.gzrM   r!   r   r#   find_backups_candidatesr%   s      r   test_old_backup_candidatez%TestBackups.test_old_backup_candidateq   s6    8#i/,>RHB..x8888r   c                 b    t        |dz  dz  dz  d      }|t        j                  |      vsJ y )Nr9   rl   z
new.tar.gzrE   r!   rm   r%   s      r    test_recent_backup_not_candidatez,TestBackups.test_recent_backup_not_candidateu   s6    8#i/,>RH228<<<<r   )r2   r3   r4   r   ro   rq   r5   r   r   rj   rj   p   s(    9$ 94 9= =$ =r   rj   c                   l    e Zd ZdedededededefdZdeddfd	Zdeddfd
Z	deddfdZ
deddfdZy)TestTeamTaskr   teamtaskr   
has_reportr   c                     |dz  |z  |z  }t        |dz  |       t        j                         |dz  z
  }t        j                  |||f       |rt        |dz  dz  | dz         |S )Nteamszwork.mdr!   r   r9   reportsz-rpt.md)r   r   r   r   )r&   r   rt   ru   r   rv   task_dirr   s           r   _setupzTestTeamTask._setup}   sq    g%,t3Hy t,YY[4%<'
B8$8#i/TF'2BBCr   Nc                 b    | j                  |dddd      }|t        j                  |      v sJ y )Ndev7ztask-42r<   Tr   rv   r{   r#   find_team_task_candidatesr&   r   ds      r   test_old_with_reportz!TestTeamTask.test_old_with_report   s3    KK&)"KNB00::::r   c                 b    | j                  |dddd      }|t        j                  |      vsJ y )Nr}   ztask-43r<   Fr~   r   r   s      r   test_old_without_reportz$TestTeamTask.test_old_without_report   s3    KK&)"KO44X>>>>r   c                 b    | j                  |dddd      }|t        j                  |      vsJ y )Ndev3ztask-44rE   Tr~   r   r   s      r   test_recent_with_reportz$TestTeamTask.test_recent_with_report   s3    KK&)"KN44X>>>>r   c                 b    t        |dz  dz  dz  d      }|t        j                  |      vsJ y )Nrx   dev1sharedrg   r!   )r   r#   r   r   s      r   test_non_task_dir_ignoredz&TestTeamTask.test_non_task_dir_ignored   s6    Hw&/(:E44X>>>>r   )r2   r3   r4   r   strfloatboolr{   r   r   r   r   r5   r   r   rs   rs   |   s    t 3 c (,15;T ;d ;? ? ?? ? ??$ ?4 ?r   rs   c                   L    e Zd ZdeddfdZdeddfdZdeddfdZdeddfdZy)TestCokacDirr   r   Nc                 l    |dz  dz  }t        |dz  dz  d      }|t        j                  |      v sJ y )N	.cokacdir	workspacePROJfile.pdfr<   r!   r   r#   find_cokacdir_candidatesr&   r   wsr'   s       r   test_old_upload_candidatez&TestCokacDir.test_old_upload_candidate   s?    #k1Vj(r2B//3333r   c                 l    |dz  dz  }t        |dz  dz  d      }|t        j                  |      vsJ y )Nr   r   r   r   rd   r!   r   r   s       r   r+   z&TestCokacDir.test_recent_not_candidate   s?    #k1Vj(q133B7777r   c                 l    |dz  dz  }t        |dz  dz  d      }|t        j                  |      vsJ y )Nr   r   r   z
border.pdfrR   r!   r   r   s       r   test_exactly_30_not_candidatez*TestCokacDir.test_exactly_30_not_candidate   s?    #k1Vl*433B7777r   c                 D    t         j                  |dz  dz        g k(  sJ y )Nr   r   )r#   r   r0   s     r   r1   z#TestCokacDir.test_missing_dir_empty   s&    **8k+AK+OPTVVVVr   )r2   r3   r4   r   r   r+   r   r1   r5   r   r   r   r      sQ    4$ 44 4
8$ 84 8
8d 8t 8
Wt W Wr   r   c                   L    e Zd Zd	dZd	dZdeddfdZdeddfdZdeddfdZy)
TestProtectedr   Nc                 :    dD ]  }|t         j                  v rJ  y )N)z	CLAUDE.mdz	MEMORY.md.envz	.env.keyszorganization-structure.jsonztask-timers.jsonztoken-ledger.json)r#   PROTECTED_NAMES)r&   names     r   test_protected_namesz"TestProtected.test_protected_names   s(    ] 	.D2-----	.r   c                 :    dD ]  }|t         j                  v rJ  y )N)zmemory/reportszmemory/researchzmemory/specszmemory/meetingszmemory/plans)r#   PROTECTED_DIRS)r&   r   s     r   test_protected_dirsz!TestProtected.test_protected_dirs   s'    5 	*A)))))	*r   r   c                 L    t         j                  t        |dz        |      sJ y )Nr   r#   is_protectedr   r0   s     r   test_env_is_protectedz#TestProtected.test_env_is_protected   s     s8f#45x@@@r   c                 X    t         j                  t        |dz  dz  dz        |      sJ y )Nr9   ry   zrpt.mdr   r0   s     r   test_reports_subfile_protectedz,TestProtected.test_reports_subfile_protected   s+    s8h#6#BX#MNPXYYYr   c                 R    t         j                  t        |dz  dz        |      rJ y )Nr   zgarbage.txtr   r0   s     r   test_normal_file_not_protectedz,TestProtected.test_normal_file_not_protected   s(    ??3x%'7-'G#H(SSSSr   )r   N)	r2   r3   r4   r   r   r   r   r   r   r5   r   r   r   r      sN    .
*
Ad At AZt Z ZTt T Tr   r   c                   \    e Zd Zdedej
                  ddfdZdedej
                  ddfdZy)
TestDryRunr   capsysr   Nc                     t        |dz  dz  d      }t        j                  |d|dz  dz         |j                         sJ y 	Nr   z	stale.txtrE   r!   Tr   r   r   dry_runcokacdir_wsr   r#   run_cleanupexists)r&   r   r   r'   s       r   test_no_deletionzTestDryRun.test_no_deletion   sI    5 ;.R8
4#+k#9K#G 	 	Ixxzzr   c                     t        |dz  dz  d       t        j                  |d|dz  dz         |j                         j                  }d|v sJ y r   )r   r#   r   
readouterrout)r&   r   r   r   s       r   test_output_mentions_candidatez)TestDryRun.test_output_mentions_candidate   s[    Hu{*4
4#+k#9K#G 	 	I!%%c!!!r   )r2   r3   r4   r   pytestCaptureFixturer   r   r5   r   r   r   r      sD     v7L7L QU "t "VEZEZ "_c "r   r   c                   <    e Zd ZdeddfdZdeddfdZdeddfdZy)TestExecuter   r   Nc                     t        |dz  dz  d      }t        j                  |d|dz  dz         |j                         rJ y )	Nr   r   rE   r!   Fr   r   r   r   r%   s      r   test_deletes_old_tmpz TestExecute.test_deletes_old_tmp   sK    5 9,26
5#+k#9K#G 	 	I88:~:r   c                     t        |dz  d      }t        j                  |d|dz  dz         |j                         sJ y )Nr   i  r!   Fr   r   r   r   )r&   r   envs      r   test_preserves_envzTestExecute.test_preserves_env   sD    (V##.
5#+k#9K#G 	 	Izz||r   c                     t        |dz  dz  d      }t        j                  |d|dz  dz         |j                         sJ y )	Nr   z	fresh.txt   r!   Fr   r   r   r   r%   s      r   test_preserves_recent_tmpz%TestExecute.test_preserves_recent_tmp   sI    5 ;.Q7
5#+k#9K#G 	 	Ixxzzr   )r2   r3   r4   r   r   r   r   r5   r   r   r   r      s;    T d 4 D $ 4 r   r   c                   <    e Zd ZdeddfdZdeddfdZdeddfdZy)
TestReportr   r   Nc                 l    t         j                  ||dz  dz        }h d|j                         k  sJ y )Nr   r   r   r   >   
categoriestotal_candidatestotal_size_bytes)r#   build_reportkeysr&   r   rs      r   test_report_keyszTestReport.test_report_keys   s9    OOh(0;(>(L  NEQQQr   c                     t        |dz  dz  d       t        |dz  dz  d       t        j                  ||dz  dz  	      }|d
   dk\  sJ y )Nr   za.txtrE   r!   zb.txt   r   r   r   r   r   r   r#   r   r   s      r   test_report_countszTestReport.test_report_counts   sa    Huw&R0Huw&R0OOh(0;(>(L  N#$)))r   c                 z    t        |dz  dz  dd       t        j                  ||dz  dz        }|d	   d
kD  sJ y )Nr   zbig.txtrE      xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)r   r   r   r   r   r   r   r   r   s      r   test_report_size_positivez$TestReport.test_report_size_positive   sO    Huy(r:FOOh(0;(>(L  N#$q(((r   )r2   r3   r4   r   r   r   r   r5   r   r   r   r      s>    R R$ R
*4 *D *)$ )4 )r   r   )r   x)r   )#__doc__importlib.util	importlibr   sysr   pathlibr   r   r   insertr   __file__r   utilspec_from_file_location_specloadermodule_from_specr#   exec_moduler   r   r   r   r7   rJ   r\   rj   rs   r   r   r   r   r   r5   r   r   <module>r      sN   I $ $   3tH~,,334 5..h..558NN	  ^^$$U+    
d % c D $ e D 6 6&< <(> >(: : = =? ?<W W,T T." "" ,) )r   