
    ih                     l   d Z ddl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ej                  j                  dd            Zedz  Z ej                         dz  dz  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edk(  r ej,                  edg       yy)u   ensure-bot-memory.sh 테스트

테스트 항목:
1. 스크립트 존재 및 실행 권한
2. 심링크 생성 로직
3. 이미 심링크가 있는 경우 스킵
4. 실행 시간 100ms 이내
    N)PathWORKSPACE_ROOTz/home/jay/workspacezscripts/ensure-bot-memory.shz.claudezsettings.jsonc                       e Zd ZdZd Zd Zy)TestScriptExistsu/   스크립트 존재 및 실행 권한 테스트c                 H    t         j                         sJ dt                 y)u&   스크립트 파일이 존재하는지u   스크립트 없음: N)SCRIPT_PATHexistsselfs    M/home/jay/workspace/.worktrees/task-2116-dev1/tests/test_ensure_bot_memory.pytest_script_existsz#TestScriptExists.test_script_exists   s!    !!#J'<[M%JJ#    c                 p    t        j                  t        t         j                        sJ dt                y)u   실행 권한이 있는지u   실행 권한 없음: N)osaccessr   X_OKr
   s    r   test_script_executablez'TestScriptExists.test_script_executable    s'    yybgg.V2H0VV.r   N)__name__
__module____qualname____doc__r   r    r   r   r   r      s    9KWr   r   c                       e Zd ZdZd Zy)TestHookRegisteredu   훅 등록 테스트c                    t         j                         sJ dt                 t        t         dd      5 }t        j                  |      }ddd       j                  di       }|j                  dg       }d}|D ]3  }|j                  dg       D ]  }|j                  d	d
      }d|v sd} 3 5 |sJ d       y# 1 sw Y   qxY w)u.   settings.json에 훅이 등록되어 있는지u   settings.json 없음: rutf-8encodingNhooksUserPromptSubmitFcommand zensure-bot-memory.shTu3   ensure-bot-memory.sh 훅이 settings.json에 없음)SETTINGS_PATHr	   openjsonloadget)	r   fsettingsr    user_prompt_submitfoundentryhookr"   s	            r   test_hook_in_settingsz(TestHookRegistered.test_hook_in_settings(   s    ##%O)?'OO%-w7 	$1yy|H	$ Wb)"YY'92> ' 	E		'2. ((9b1)W4 E		 KKKu!	$ 	$s   B;;CN)r   r   r   r   r/   r   r   r   r   r   %   s    Lr   r   c                       e Zd ZdZd Zy)TestSymlinkCreationu   심링크 생성 테스트c                    |dz  }|dz  }|j                  d       t        j                         dz  }|j                         s0|j                  j                  dd       |j                  dd	       d
}t        j                  j                         }||d<   t        j                         dz  }|j                         rddl	}	|	j                  |       t        j                  dt        t              gdd|d      }
|dz  dz  }|j                         rddl	}	|	j                  |       |
j                  dk(  sJ d|
j                           y)u$   새 디렉토리에 심링크 생성z%-home-jay--cokacdir-workspace-test123memoryT)parentszG.claude/projects/-home-jay--cokacdir-workspace-autoset/memory/MEMORY.md)r4   exist_okz# Test Memory
r   r   z%/home/jay/.cokacdir/workspace/test123PWDz6.claude/projects/-home-jay--cokacdir-workspace-test123r   Nbash   capture_outputtextenvtimeoutz	MEMORY.mdu   스크립트 실패: )mkdirr   homer	   parent
write_textr   environcopyshutilrmtree
subprocessrunstrr   
returncodestderr)r   tmp_pathmonkeypatchfake_projectfake_memory_dirsource_memorytest_pwdr<   real_project_dirrD   resulttarget_memorys               r    test_symlink_creation_in_new_dirz4TestSymlinkCreation.test_symlink_creation_in_new_dirB   sE     "II&1d+ 		&oo##%  &&td&C$$%6$I ;jjooE
  99;)aa""$MM*+ S%&
 )83kA ""$MM*+   A%N)>v}}o'NN%r   N)r   r   r   r   rT   r   r   r   r1   r1   ?   s    $,Or   r1   c                       e Zd ZdZd Zy)TestSkipIfExistsu+   이미 존재하는 경우 스킵 테스트c                 <   t         j                  j                         }d|d<   t        j                         }t	        j
                  dt        t              gdd|d      }t        j                         |z
  dz  }|j                  dk(  sJ |d	k  sJ d
|dd       y)u$   심링크가 이미 있으면 스킵%/home/jay/.cokacdir/workspace/autosetr6   r7   Tr8   r9     r   d   u   실행 시간 초과: .1fmsN)	r   rB   rC   timerF   rG   rH   r   rI   )r   r<   
start_timerR   
elapsed_mss        r   test_skip_if_symlink_existsz,TestSkipIfExists.test_skip_if_symlink_existst   s     jjoo<E
YY[
S%&
 iikJ.$6
   A%%%CL#9*S9I!LLr   N)r   r   r   r   r`   r   r   r   rV   rV   q   s    5Mr   rV   c                       e Zd ZdZd Zy)TestExecutionTimeu   실행 시간 테스트c                    t         j                  j                         }d|d<   g }t        d      D ]j  }t	        j                         }t        j                  dt        t              gdd|d       t	        j                         |z
  dz  }|j                  |       l t        |      t        |      z  }|dk  sJ d	|d
d| d       y)u#   실행 시간이 100ms 이내인지rX   r6   r8   r7   Tr9   rY   rZ   u   평균 실행 시간 초과: r[   u   ms (측정값: )N)r   rB   rC   ranger]   rF   rG   rH   r   appendsumlen)r   r<   times_r^   r_   avg_times          r   test_execution_time_under_100msz1TestExecutionTime.test_execution_time_under_100ms   s    jjoo<E
q 
	%AJNN[)*# ))+
2d:JLL$
	% u:E
*#~d!>xnO\a[bbcdd~r   N)r   r   r   r   rl   r   r   r   rb   rb      s    !er   rb   c                       e Zd ZdZd Zy)TestWorkspaceCleanupu   Workspace 정리 방안 보고c           	         t        d      }|j                         st        j                  d       i }|j	                         D ]T  }|j                         s|j                  j                         }||vrg ||<   ||   j                  |j                         V dg}t        |j                               D ]*  \  }}|j                  d|xs d dt        |       d       , t        dj                  |             y	)
u)   autoset workspace의 임시 파일 보고rX   u   autoset 디렉토리 없음u    [Workspace 임시 파일 보고]z  u   (확장자 없음)z: u   개
N)r   r	   pytestskipiterdiris_filesuffixlowerrf   namesorteditemsrh   printjoin)r   autoset_dir
extensionsfileextreport_linesfiless          r   test_report_temp_filesz+TestWorkspaceCleanup.test_report_temp_files   s    BC!!#KK56 
'') 	2D||~kk'')j(&(JsO3&&tyy1	2 ;; !1!1!34 	UJC"S%@,@$ACJ<s ST	U 	dii%&r   N)r   r   r   r   r   r   r   r   rn   rn      s
    (r   rn   __main__z-v)r   r&   r   rF   tempfiler]   pathlibr   rq   rB   r(   
_WORKSPACEr   r?   r$   r   r   r1   rV   rb   rn   r   main__file__r   r   r   <module>r      s     	     "**..!13HIJ
99		i'/9	W 	WL L4/O /OdM M2e e2 : zFKK4 ! r   