
    i&                        d Z ddlmZ ddlZddlZddlZddlZddlmZ  eej                  j                  dd            Z ee      ej                  vr"ej                  j                  d ee             ddZddZdd	Zdd
ZddZddZy)u  
tests/test_session_integration.py

TDD RED Phase: 세션 자동 압축 모듈 통합 테스트 (task-1458.1)

테스트 항목:
1. test_dispatch_has_check_sessions_arg: dispatch.py의 argparse에 --check-sessions 인자 확인
2. test_dispatch_check_sessions_returns_json: dispatch.py --check-sessions 실행 시 JSON 반환 확인
3. test_team_prompts_include_session_monitoring: team_prompts.build_prompt()에 세션 모니터링 텍스트 포함
4. test_session_resilience_importable_from_dispatch: dispatch에서 SessionResilience import 가능 확인
5. test_session_auto_compress_importable: SessionAutoCompress 직접 import 가능 확인
6. test_session_resilience_check_all_sessions: SessionResilience.check_all_sessions() 구조 확인
    )annotationsN)PathWORKSPACE_ROOTz/home/jay/workspacec                    t         dz  } | j                         s
J d|         t        j                  t        j
                  t        |       dgddt        t               i t        j                  dt        t               id      }|j                  dk(  sJ d	|j                          d
|j                  v sJ d       y)u@   dispatch.py의 argparse에 --check-sessions 인자 존재 확인dispatch.pydispatch.py not found at z--helpTr      capture_outputtextcwdenvtimeoutr   zdispatch.py --help failed: zcheck-sessionszDdispatch.py --help output does not contain 'check-sessions' argumentN)
_WORKSPACEexists
subprocessrunsys
executablestrosenviron
returncodestderrstdout)dispatch_pathresults     O/home/jay/workspace/.worktrees/task-2116-dev1/tests/test_session_integration.py$test_dispatch_has_check_sessions_argr   !   s    .M!N%>}o#NN! ^^	]+X6
O=rzz=+S_=F !P%@#PP!v}},t.tt,    c                    t         dz  } | j                         s
J d|         t        j                  t        j
                  t        |       dgddt        t               i t        j                  dt        t               id      }|j                  dk(  sJ d	|j                          |j                  j                         }|sJ d
       t        j                  |      }d|v s
J d|        y)uD   dispatch.py --check-sessions 실행 시 유효한 JSON 반환 확인r   r   z--check-sessionsTr   r	   r
   r   z%dispatch.py --check-sessions failed: z,dispatch.py --check-sessions output is emptycheckedz/JSON response missing 'checked' key. Response: N)r   r   r   r   r   r   r   r   r   r   r   r   stripjsonloads)r   r   outputdatas       r   )test_dispatch_check_sessions_returns_jsonr(   9   s    .M!N%>}o#NN! ^^	]+-?@
O=rzz=+S_=F !Z%J6==/#ZZ! ]]  "FAAA6::fD V OPTvVVr    c                     ddl m}   | dddd      }|sJ d       |j                         }d	|v xs
 d
|v xs d|v }|sJ d       y)uQ   team_prompts.build_prompt()에 세션 모니터링 관련 텍스트 포함 확인r   )build_prompt	dev2-teamz
task-999.1u   테스트 작업입니다.normal)team_idtask_id	task_desclevelz"build_prompt returned empty stringu   세션 모니터링sessionu   세션zHteam_prompts.build_prompt() output does not contain session-related textN)prompts.team_promptsr*   lower)r*   promptprompt_lowerhas_session_texts       r   ,test_team_prompts_include_session_monitoringr7   Y   sj    1 .	F 7776 <<>L,6i)|:SiW_ciWigggr    c                 \    ddl } t        | d      sJ d       | j                  du sJ d       y)u?   dispatch 모듈에서 SessionResilience import 가능성 확인r   N_SESSION_RESILIENCE_AVAILABLEzGdispatch module does not have '_SESSION_RESILIENCE_AVAILABLE' attributeTz2dispatch._SESSION_RESILIENCE_AVAILABLE is not True)dispatchhasattrr9   )r:   s    r   0test_session_resilience_importable_from_dispatchr<   s   sE     1 QPQ 
 11T9o;oo9r    c                 P    ddl m}  | J d       t        | t              sJ d       y)uE   session_auto_compress.SessionAutoCompress 직접 import 가능 확인r   SessionAutoCompressNz2SessionAutoCompress import failed or returned Nonez"SessionAutoCompress is not a class)utils.session_auto_compressr?   
isinstancetyper>   s    r   %test_session_auto_compress_importablerC      s0    ?*`,``* )40V2VV0r    c                (   ddl m} | dz  }|j                  dd       ddddd	d
ii}|dz  }|j                  t	        j
                  |d      d       dddddii}|dz  }|j                  t	        j
                  |d      d        |t        |             }|j                         }t        |t              sJ dt        |       d       h d}	|	D ]  }
|
|v rJ d|
         t        |d   t              sJ dt        |d          d       t        |d   t              sJ dt        |d          d       t        |d   t              sJ dt        |d          d       t        |d    t              sJ d!t        |d           d       y")#uM   SessionResilience.check_all_sessions() 올바른 구조의 dict 반환 확인r   )SessionResiliencememoryT)parentsexist_oktasksz
task-100.1r+   running)r.   r-   statusztask-timers.jsonF)ensure_asciizutf-8)encodingi )r-   total_tokensztoken-ledger.json)workspace_rootzcheck_all_sessions() returned z, expected dict>   r"   normalswarnings	criticalsz4check_all_sessions() response missing required key: r"   z'checked' value is z, expected intrQ   z'warnings' value is z, expected listrR   z'criticals' value is rP   z'normals' value is N)utils.session_resiliencerE   mkdir
write_textr$   dumpsr   check_all_sessionsrA   dictrB   intlist)tmp_pathrE   
memory_dirfake_timerstimers_pathfake_ledgerledger_path
resiliencer   required_keyskeys              r   *test_session_resilience_check_all_sessionsrd      s   : H$JTD1 	'&#
K 11K4::kFQXY 	& &
K 22K4::kFQXY ##h-@J **,F fd#c'Ed6l^Sb%cc# DM [f}Z TUXTYZZ}[ fY'-l1DT&QZJ[E\D]]k/ll- fZ($/q3GVT^M_H`Gaap1qq/f[)40t4I$vVaObJcIdds2tt0 fY'-l1DT&QZJ[E\D]]k/ll-r    )returnNone)r[   r   re   rf   )__doc__
__future__r   r$   r   r   r   pathlibr   r   getr   r   pathinsertr   r(   r7   r<   rC   rd    r    r   <module>rn      s    #  	  
 "**..!13HIJ
z?#(("HHOOAs:'u0W@h4
p$W6mr    