
    nai%                        d Z ddlZddlZddlZddlmZ  ee      j                         j                  d   Z
ej                  j                  de
dz  dz        Zeej                  J ej                  j                  e      Zeej"                  d<   ej                  j%                  e       ded	ee   d
dfdZd Zd Zd Zd Zd Zy)u   단위 테스트: token-tracker.py enrich() / parse_session() 토큰 기록 로직

task-2338 | 작성자: 카마소츠 (dev7 테스터)
    N)Path   token_trackerscriptsztoken-tracker.pypathlinesreturnc                 V    | j                  dj                  d |D              d       y )N
c              3   F   K   | ]  }t        j                  |        y w)N)jsondumps).0ls     M/home/jay/workspace/.worktrees/task-2516-dev3/tests/test_task_timer_tokens.py	<genexpr>z_write_jsonl.<locals>.<genexpr>   s     ;djjm;s   !utf-8encoding)
write_textjoin)r   r   s     r   _write_jsonlr      s!    OODII;U;;gON    c           	          | dz  }t        |dddddddd	d
dddid
g       t        j                  t        |            }|d   dk(  sJ |d   dk(  sJ |d   dk(  sJ |d   dk(  sJ |d   dk(  sJ |d   dk(  sJ y)u   assistant usage 블록에서 input/output/cache_read/cache_creation 4종 토큰을
    모두 수집하고 total_tokens = 합산, task_id 파싱을 검증한다.session.jsonl	assistantd      i,  i  input_tokensoutput_tokenscache_read_input_tokenscache_creation_input_tokensclaude-sonnet-4-6)usagemodeltypemessageusercontentz	task-9999r    r!   cache_read_tokenscache_creation_tokenstotal_tokensi  task_idN)r   r   parse_sessionstrtmp_pathjsonlrs      r   )test_parse_session_collects_4_token_typesr6   "   s     &E %(%(/236	 -	
 !;/	
 & 	##CJ/A^###_$$$ !S((($%,,,^$$$Y<;&&&r   c                     | dz  }t        |dddidg       t        j                  t        |            }|j	                  d      dk(  sJ y)	u   user 메시지 내 경로에서 cwd_project 'InsuRo'를 추출하는지 확인한다.

    NOTE: parse_session()에 cwd_project 감지 로직이 현재 미구현 상태임.
    쿠쿨칸 패치 병합 후 통과 예정.
    r   r*   r+   u@   task-9000 작업, 경로: /home/jay/projects/InsuRo/src/main.tsxr'   cwd_projectInsuRoNr   r   r0   r1   getr2   s      r   -test_parse_session_detects_cwd_project_insuror<   G   s]     &E]	
  	##CJ/A558+++r   c           
          | dz  }t        |dddi dgddddd	d
dddddidg       t        j                  t        |            }|j	                  d      du sJ y)u   assistant tool 호출에 'mcp__' 접두사가 있을 때 mcp_used == True 인지 확인한다.

    NOTE: parse_session()에 mcp_used 감지 로직이 현재 미구현 상태임.
    쿠쿨칸 패치 병합 후 통과 예정.
    r   r   tool_usez"mcp__code-review-graph__get_review)r(   nameinput
      r   r   r$   )r+   r%   r&   r'   r*   r+   z	task-8888mcp_usedTNr:   r2   s      r   #test_parse_session_detects_mcp_usedrD   `   s     &E !+ D!# %'%&/034	 -	
( !;/	
) 4 	##CJ/A55$$$r   c                 d   | dz  }| dz  }ddddddd	d
dddd	ii}ddddiii}|j                  t        j                  |      d       |j                  t        j                  |      d       t        j	                  t        |      t        |             t        j                  |j                  d            }|d   d   }|d   }|d   dk(  sJ |d   dk(  sJ |d   dk(  sJ |d   dk(  sJ |d   d	k(  sJ |d   d
k(  sJ |j                  d      dk(  sJ |j                  d      du sJ y)u   ledger → timers 로 token_usage 4종 + total + cost 복사,
    cwd_project/mcp_used 태스크 레벨 복사를 검증한다.

    NOTE: enrich()가 mcp_used를 아직 복사하지 않음 — 쿠쿨칸 패치 병합 후 통과 예정.
    token-ledger.jsontask-timers.jsontasksztask-Xr            rA   g      ?r$   r9   T)	r    r!   r,   r-   r.   cost_estimate_usdr&   r8   rC   team_id	dev7-teamr   r   timers_pathledger_pathtoken_usager    r!   r,   r-   r.   rL   r8   rC   N)	r   r   r   r   enrichr1   loads	read_textr;   )r3   rQ   rP   ledger_datatimers_dataresulttxtus           r   %test_enrich_writes_all_4_token_fieldsr[      s    00K//K 	 !!"%&)* "%(,' 

K  	;
K 4::k2WE4::k2WES%53{CSTZZ--w-?@F		"B	M	B n"""o!###!"a'''%&!+++n###!"c))) 66- H,,, 66*%%%r   c           
         | dz  }| dz  }ddddddddd	d
ii}ddddiii}|j                  t        j                  |      d       |j                  t        j                  |      d       t        j	                  t        |      t        |             t        j                  |j                  d            }|d   d   }d|vsJ y)ur   timers에 task-Y, ledger에 task-Z만 있을 때
    task-Y에 token_usage가 추가되지 않음을 확인한다.rF   rG   rH   ztask-Zi  r   i  g?r$   )r    r!   r,   r-   r.   rL   r&   ztask-YrM   rN   r   r   rO   rR   N)r   r   r   r   rS   r1   rT   rU   )r3   rQ   rP   rV   rW   rX   tys          r   !test_enrich_skips_unmatched_tasksr^      s     00K//K 	 #!$%&)* $%(,

K 	;
K 4::k2WE4::k2WES%53{CSTZZ--w-?@F		"B"""r   )__doc__importlib.util	importlibr   syspathlibr   __file__resolveparents	WORKSPACEutilspec_from_file_locationspecloadermodule_from_specr   modulesexec_modulelistdictr   r6   r<   rD   r[   r^    r   r   <module>rr      s   
   
  N""$,,Q/	~~--Y*-?? DKK3 33//5,O     &Ot ODJ O4 O'J,2#%T5&x##r   