
    üi                        d Z ddlmZ ddlZddlZddlZddlmZ  ed      Z ed      Z	g dZ
dZd	Zd
dddZdddZd Zd Zd Zd Zy)u   tests/handoff/test_create.py
create_handoff.py 생성 테스트:
- test_create_basic: 필수 필드 확인
- test_create_4000_split: 4000자 초과 시 pending_work_path + 외부 파일 생성
- test_create_invalid_reason: 잘못된 reason → exit 1
    )annotationsN)PathzG/home/jay/workspace/.worktrees/task-2454-dev4/scripts/create_handoff.pyz-/home/jay/workspace/.worktrees/task-2454-dev4)task_idschema_versionprevious_botcurrent_branchbase_shahead_shachanged_pathsallowed_pathsforbidden_pathstest_resultshandoff_reason
created_atz	task-9001z	task-9002z	task-9003z	task-9004z	task-9005	interruptcompletetakeover_requestc                    t        t        j                        }|rt        |      |d<   nt        t              |d<   t        j                  dt        t              g| z   t        t              ddd|      S )u    create_handoff.py 실행 헬퍼.WORKSPACE_ROOTpython3T   )cwdcapture_outputtexttimeoutenv)dictosenvironstrWORKTREE
subprocessrunSCRIPT)argsworkspace_rootr   s      J/home/jay/workspace/.worktrees/task-2487-dev2/tests/handoff/test_create.py_run_handoffr)   +   sg    
rzz
C #N 3 #H>>	CK 4'M     c            
        t         } t        dz  dz  |  dz  }|j                         r|j                          t	        d| ddddd	d
g      }	 |j
                  dk(  s!J d|j                   d|j                          |j                         s
J d|        t        j                  |j                  d            }t        D ]  }||v rJ d|         |d   | k(  sJ |d   dk(  sJ |d   d
k(  sJ |d   dk(  sJ t        |d   t              sJ t        |d   t              sJ d|v sJ |d   dk(  sJ d|vsJ 	 |j                         r|j                          yy# |j                         r|j                          w w xY w)uG   기본 실행: 필수 필드가 모두 존재하는 JSON 생성 확인.memoryhandoffs.json--task--reasonr   	--pendingu   테스트 잔여 작업--botdev4r   !   create_handoff.py 실패
stdout: 	
stderr:    handoff JSON 미생성: utf-8encodingu   필수 필드 누락: r   r   r   r   z1.0r   r   pending_workpending_work_pathN)TEST_TASK_BASICr"   existsunlinkr)   
returncodestdoutstderrjsonloads	read_textREQUIRED_FIELDS
isinstancelistr   )r   handoff_pathresultdatafields        r(   test_create_basicrL   A   s   Gh&3	6GGL 'K.	 F"  A% 	
0z&--Y	
% ""$O(@&OO$zz,00'0BC % 	CED=B$:5'"BB=	C I')))$%444N#v---$%...$/666$~.555 %%%N#'@@@@"$...  ! !< ! !s   A<E  
A3E   #Fc            
        t         } t        dz  dz  |  dz  }t        dz  dz  |  dz  }||fD ]#  }|j                         s|j                          % ddz  }t	        d| dd	d
|ddg      }	 |j
                  dk(  s!J d|j                   d|j                          |j                         s
J d|        t        j                  |j                  d            }d|v s!J dt        |j                                       d|vsJ d       t        |d         }|j                         s	t        |z  }|j                         s
J d|        |j                  d      }||k(  s J dt        |       dt        |       d       	 ||fD ]#  }|j                         s|j                          % 	 |j                         r%t        j                  |j                  d            ni }d|v rIt        |d         }	|	j                         s	t        |	z  }	|	j                         r|	j                          yyy# t         $ r Y yw xY w# ||fD ]#  }|j                         s|j                          % 	 |j                         r%t        j                  |j                  d            ni }d|v rIt        |d         }	|	j                         s	t        |	z  }	|	j                         r|	j                          w w w # t         $ r Y w w xY wxY w)uN   5000자 pending 텍스트 → pending_work_path + 외부 파일 생성 확인.r,   r-   r.   z-pending.txtxi  r/   r0   r   r1   r2   r3   r   r4   r5   r6   r7   r8   r;   uW   pending_work_path 필드 없음 (4000자 초과인데 인라인 저장됨?)
data keys: r:   uO   pending_work 필드가 남아있음 (4000자 초과인데 인라인 저장됨?)u   외부 파일 미생성: u(   외부 파일 내용 불일치 (길이: u    vs 기대: )N)TEST_TASK_LARGEr"   r=   r>   r)   r?   r@   rA   rB   rC   rD   rG   keysr   is_absolutelen	Exception)
r   rH   txt_pathplong_pendingrI   rJ   external_pathcontentexts
             r(   test_create_4000_splitr[   u   sH   Gh&3	6GGL("Z/WI\2JJH H% 88:HHJ :L'K\	 F,  A% 	
0z&--Y	
% ""$O(@&OO$zz,00'0BC #d* 	
fgklplululwgxfyz	
* T) 	
]	
)
 T"567((*$}4M##%R)B=/'RR%  ))7);,& 	
6s7|nLQTUaQbPccde	
& ) 	Axxz
			KWK^K^K`4::l44g4FGfhD"d*4 345("S.C::<JJL  	 +  		 ) 	Axxz
			KWK^K^K`4::l44g4FGfhD"d*4 345("S.C::<JJL  	 +  		sK   .DI 1BH6 6	IILL1BK63L6	L?LLLc            
     D   d} t        d| ddddddg      }|j                  d	k7  s!J d
|j                   d|j                          |j                  |j                  z   }d|v s>d|j	                         v s+d|v s&d|v s!J d|j                   d|j                          yyyy)u4   잘못된 reason 값으로 실행 시 exit 1 확인.z	task-9006r/   r0   invalid_reason_xyzr1   u	   테스트r2   r3   r   u2   잘못된 reason에서 exit 0 (비정상)
stdout: r5   zinvalid choiceerrorinvalid_reasonu   검증 실패u    에러 메시지 없음
stderr: z	
stdout: N)r)   r?   r@   rA   lower)r   rI   combineds      r(   test_create_invalid_reasonrb      s    G'([	 F ! 
=fmm_JW]WdWdVef! }}v}},H(Gx~~7G,G(Ox,G
+FMM?*V]]OT H,G( -H(r*   c            	        g d} | D ]  }t         |   }t        dz  dz  | dz  }|j                         r|j                          t	        d|d|ddg      }	 |j
                  d	k(  s$J d
| d|j                   d|j                          t        j                  |j                  d            }|d   |k(  sJ 	 |j                         s|j                           y# |j                         r|j                          w w xY w)u   유효한 reason 값들 확인.r   r,   r-   r.   r/   r0   r2   r3   r   u   유효한 reason 'u   ' 실패
stdout: r5   r7   r8   r   N)TEST_TASK_REASONSr"   r=   r>   r)   r?   r@   rA   rB   rC   rD   )valid_reasonsreasonr   rH   rI   rJ   s         r(   test_create_valid_reasonsrg      s   AM &#F+(*Z7WIU:KK !gV
 	&$$) $VH,>v}}oZX^XeXeWfg) ::l44g4FGD()V333""$##%)&& ""$##% %s   A"C#D)N)r&   z	list[str]r'   zPath | Nonereturnzsubprocess.CompletedProcess)__doc__
__future__r   rB   r   r#   pathlibr   r%   r"   rE   r<   rP   rd   r)   rL   r[   rb   rg    r*   r(   <module>rm      sq    #  	  	W	X?@" # ,-"h@N,&r*   