
    i2                     J   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mZ ddl	m
Z
mZ ddlZdedej                  fdZ ej                         d	        Z ej                         d
        Z	 	 	 	 ddededededededefdZ G d d      Z G d d      Z G d d      Zy)u  
test_phase4_integration.py

fireauto Phase 4 통합 테스트 — F12 completion-promise + 기존 시스템 회귀 검증

테스트 시나리오:
1. chain_manager retry → dispatch → retry → dispatch → circuit breaker 전체 흐름
2. escalation 파일 + audit-trail 기록 동시 검증
3. 기존 chain_manager 기능 회귀 없음
4. 주요 스크립트 존재 확인 (smoke test)
    N)datetime)Path)	MagicMockpatchtmp_pathreturnc                    t        t        j                  j                  dd            }t	        |      t
        j                  vr)t
        j                  j                  dt	        |             t        t
        j                  j                               D ]  }|dk(  s	t
        j                  |=  t        j                  j                  dd       ddl}| |_        | dz  d	z  |_        |j                  j                  d
d
       |S )uK   chain_manager 모듈을 tmp_path를 WORKSPACE로 설정하여 로드한다.WORKSPACE_ROOTz/home/jay/workspacer   chain_managerCOKACDIR_KEY_ANUztest-dummy-keyNmemorychainsTparentsexist_ok)r   osenvirongetstrsyspathinsertlistmoduleskeys
setdefaultr   	WORKSPACE
CHAINS_DIRmkdir)r   	workspacemod_namecms       Z/home/jay/workspace/.worktrees/task-2116-dev1/tests/integration/test_phase4_integration.py_load_chain_managerr$      s    RZZ^^$46KLMI
9~SXX%3y>* ))+, &&H%& JJ,.>?BLx'(2BMMMt4I    c                     t        |       S )uI   격리된 WORKSPACE를 사용하는 chain_manager 모듈을 반환한다.)r$   )r   s    r#   r"   r"   8   s     x((r%   c                 <    | dz  dz  }|j                  dd       |S )u"   체인 파일 저장 디렉토리.r   r   Tr   )r   )r   ds     r#   
chains_dirr)   >   s(     	8h&AGGD4G(Hr%   r)   task_idretry_countreport_contentchain_idc           
         dddd|dt        j                         j                         d|d	dd	dd
dddddg}|dt        j                         j                         dddd|d}| | dz  }|j                  t	        j
                  |dd      d       |dz  dz  }	|	j                  dd       |	| dz  j                  |d       |S )u<   E2E 테스트용 체인과 보고서를 생성하는 헬퍼.   zmemory/tasks/task-e2e-1.md	dev2-teamrunningautoN)	order	task_fileteamstatusr*   gate
started_atcompleted_atr+      zmemory/tasks/task-e2e-2.mdpending
task-e2e.2)r3   r4   r5   r6   r*   r7   r8   r9   anuactiveu   E2E retry 테스트
   zcron-e2e)r-   
created_by
created_atr6   scope	max_taskswatchdog_cron_idtasks.jsonF)ensure_asciiindentutf-8encodingr   reportsTr   .md)r   now	isoformat
write_textjsondumpsr   )
r)   r   r*   r+   r,   r-   rE   datar   reports_dirs
             r#   _create_retry_chainrU   K   s     5",,.224 &
	
 5# 		
E0 lln..0&&	D 8*E**DOODJJt%BWOUX%	1KdT2gYc?"..~.PKr%   c                       e Zd ZdZd Zd Zy)TestE2ERetryFlowu%   F12 retry 전체 흐름 E2E 테스트c                    d}dt        ||d|       |j                  t        j                               t	        j
                  |j                         j                        }|d   dk(  sJ |d   d	k(  sJ || d
z  }t	        j
                  |j                  d            }|d   dk(  sJ t        fd|d   D              }	|	d   d	k(  sJ |dz  dz   dz  j                  dd       |j                  t        j                               t	        j
                  |j                         j                        }
|
d   dk(  sJ |
d   dk(  sJ t	        j
                  |j                  d            }|d   dk(  sJ t        fd|d   D              }|d   dk(  sJ |dz  dz   dz  j                  dd       |j                  t        j                               t	        j
                  |j                         j                        }|d   dk(  sJ d|d   v sJ t	        j
                  |j                  d            }|d   dk(  sJ |dz  dz   dz  }|j                         sJ y)u;   retry 0→1→2→circuit breaker 전체 3회 시나리오.zchain-e2e-fullztask-e2e-full.1r   r*   r+   r-   r*   actiondispatchretry_attemptr/   rF   rI   rJ   r6   r>   c              3   L   K   | ]  }|j                  d       k(  s|  ywr*   Nr   .0tr*   s     r#   	<genexpr>zBTestE2ERetryFlow.test_e2e_retry_flow_full_cycle.<locals>.<genexpr>   !     KquuY/?7/J!K   $$rE   r+   r   rL   rM   u   QC FAIL: 타입 에러.r:   c              3   L   K   | ]  }|j                  d       k(  s|  ywr_   r`   ra   s     r#   rd   zBTestE2ERetryFlow.test_e2e_retry_flow_full_cycle.<locals>.<genexpr>   re   rf   u   QC FAIL: 여전히 실패.stalledcircuit_breakerreasonescalationsz_escalation.jsonN)rU   cmd_nextargparse	NamespacerQ   loads
readouterrout	read_textnextrP   exists)selfr"   r   r)   capsysr-   output1
chain_filedata1t1output2data2t2output3data3escalation_filer*   s                   @r#   test_e2e_retry_flow_full_cyclez/TestE2ERetryFlow.test_e2e_retry_flow_full_cycle   s   ## 			
 	H&&w78**V..0445x J...'1,,,  XJe"44


:///ABX(***KU7^KK- A%%% 
H	y	(gYc?	:FF% 	G 	
 	H&&w78**V..0445x J...'1,,,

:///ABX(***KU7^KK- A%%% 
H	y	(gYc?	:FF(7 	G 	
 	H&&w78**V..0445x I--- GH$5555 

:///ABX)+++ #X-=7)K[@\\%%'''r%   c                 
   d}dt        ||d|       |j                  t        j                               t	        j
                  |j                         j                        }|d   dk(  sJ |d   d	k(  sJ || d
z  }t	        j
                  |j                  d            }t        fd|d   D              }	|	d   d	k(  sJ |dz  dz   dz  j                  dd       |j                  t        j                               t	        j
                  |j                         j                        }
|
d   dk(  sJ |
d   dk(  sJ d|
vsJ t	        j
                  |j                  d            }|d   dk(  sJ y)u7   retry 1회 후 QC PASS → 다음 task 정상 dispatch.zchain-e2e-successztask-e2e-success.1r   rY   rZ   r[   r\   r]   r/   rF   rI   rJ   c              3   L   K   | ]  }|j                  d       k(  s|  ywr_   r`   ra   s     r#   rd   z?TestE2ERetryFlow.test_e2e_retry_then_success.<locals>.<genexpr>   s!     IqQUU9-=-HIrf   rE   r+   r   rL   rM   u'   작업 완료. 모든 테스트 통과.r*   r<   r6   r>   N)rU   rl   rm   rn   rQ   ro   rp   rq   rr   rs   rP   )ru   r"   r   r)   rv   r-   	out_retryrx   rS   rc   out_success
final_datar*   s               @r#   test_e2e_retry_then_successz,TestE2ERetryFlow.test_e2e_retry_then_success   s   && 			
 	H&&w78JJv002667	"j000)Q...  XJe"44
zz*...@AIDMII1$$$ 
H	y	(gYc?	:FF5 	G 	
 	H&&w78jj!2!2!4!8!898$
2229%555k111 ZZ
 4 4g 4 FG
(#x///r%   N)__name__
__module____qualname____doc__r   r    r%   r#   rW   rW      s    /6(p#0r%   rW   c                       e Zd ZdZd Zy)TestScriptsExistSmokeu,   주요 스크립트 파일 존재 smoke testc           
      d   t        d      t        d      t        d      t        d      t        d      t        d      t        d      t        d      d	}g }|j                         D ]-  \  }}|j                         r|j                  | d
| d       / |rJ ddj	                  |              y)u)   주요 스크립트 파일 존재 확인.z/home/jay/workspace/dispatch.pyz$/home/jay/workspace/chain_manager.pyz0/home/jay/workspace/scripts/notify-completion.pyz*/home/jay/workspace/scripts/finish-task.shz(/home/jay/workspace/memory/task-timer.pyz-/home/jay/workspace/teams/shared/qc_verify.pyz./home/jay/workspace/scripts/whisper-compile.pyz,/home/jay/workspace/scripts/memory-search.py)zdispatch.pyzchain_manager.pyznotify-completion.pyzfinish-task.shztask-timer.pyzqc_verify.pyzwhisper-compile.pyzmemory-search.pyz ()u   누락된 스크립트: z, N)r   itemsrt   appendjoin)ru   scriptsmissingnamer   s        r#   test_scripts_exist_smokez.TestScriptsExistSmoke.test_scripts_exist_smoke   s       AB $%K L$()[$\"#OP!"LM !PQ"&'W"X $%S T	
 !--/ 	3JD$;;=$r$q12	3 K6tyy7I6JKK{7r%   N)r   r   r   r   r   r   r%   r#   r   r      s    6Lr%   r   c                       e Zd ZdZd Zy)TestChainManagerNoRegressionu0   기존 chain_manager 기능 회귀 없음 확인c                    ddddddddd	dd
dg}t        j                  dt        j                  |      ddd      }t	        j
                  |d      5 }t               }d|_        d|_        ||j                  _
        |j                  |       ddd       |dz  }	|	j                         sJ d       t        j                  |	j                  d            }
|
d   dk(  sJ |
d   dk(  sJ t        |
d         dk(  sJ |j!                          t        j                  dd      }|j#                  |       t        j                  |	j                  d            }t%        d |d   D              }|d   dk(  sJ |d   J |j!                          t        j                  d       }|j'                  |       |j!                         }t        j                  |j(                        }|d!   d"u sJ |d   dk(  sJ |d#   d$u sJ |d%   d
k(  sJ |d&z  d'z  }|j+                  d"d"(       |d)z  j-                  d*d       t        j                  d       }|j/                  |       |j!                         }t        j                  |j(                        }|d+   d,k(  sJ |d-   d
k(  sJ |d.   d	k(  sJ t        j                  |	j                  d            }|d   dk(  sJ y# 1 sw Y   VxY w)/u>   기존 cmd_create, cmd_update, cmd_check 정상 동작 확인.r/   zmemory/tasks/regress-1.mdz	dev1-teamr2   task-regress.1)r3   r4   r5   r7   r*   r:   zmemory/tasks/regress-2.mdr0   ztask-regress.2zregression-chainu   회귀 테스트r=   r?   )r-   rE   rB   r@   rC   
subprocessr   z{"cron_id": "cron-regress"}Nzchain-regression-chain.jsonu$   체인 파일이 생성되어야 함rI   rJ   r-   r6   r>   rE   r1   )r*   r6   c              3   J   K   | ]  }|j                  d       dk(  s|  yw)r*   r   Nr`   )rb   rc   s     r#   rd   zPTestChainManagerNoRegression.test_chain_manager_no_regression.<locals>.<genexpr>9  s!     [aeeI6FJZ6Z![s   ##r8   rZ   in_chainTis_lastFnext_task_idr   rL   r   ztask-regress.1.mdu   작업 완료. 성공.r[   r\   r*   r5   )rm   rn   rQ   rR   r   objectr   
returncodestdoutrunreturn_value
cmd_creatert   ro   rr   lenrp   
cmd_updaters   	cmd_checkrq   r   rP   rl   )ru   r"   r   r)   rv   rE   args_createmock_submock_resultrx   rS   args_updateupdated_datarz   
args_checkcapturedcheck_outputrT   	args_nextnext_outputr   s                        r#    test_chain_manager_no_regressionz=TestChainManagerNoRegression.test_chain_manager_no_regression  s5   
 8#+ 8#+
  (('**U#$
 \\"l+ 	'x#+K%&K"!>K(3HLL%MM+&	'  "??
  "J$JJ"zz*...@AJ#5555H~)))4=!Q&&& ((1A)T
k"zz*"6"6"6"HI[\'2[[(|y(((,+++ ''0@A

Z $$&zz(,,/J'4///J'+====I&%///N+/???? )I5$6	*	*667OZa6b&&/?@	
I$$&jj.8$
2229%)99996"k111 ZZ
 4 4g 4 FG
(#x///c	' 	's   ;K##K-N)r   r   r   r   r   r   r%   r#   r   r     s    :L0r%   r   )z
task-e2e.1r   u   QC FAIL: 오류.zchain-e2e-test)r   rm   rQ   r   r   typesr   pathlibr   unittest.mockr   r   pytest
ModuleTyper$   fixturer"   r)   r   intrU   rW   r   r   r   r%   r#   <module>r      s   
   	 
    * $ 5+;+; 4 ) )
    ,$111 1 	1
 1 1 
1t^0 ^0LL L:O0 O0r%   