
    üi7                        d Z ddlmZ ddlZddlZddlZddlmZ ddlZ ed      Z	dddZ
ej                  dd       ZddZdd	Zdd
ZddZy)u   tests/start_guard/test_mixed_commit.py
mixed commit 검사 테스트:
- test_mixed_commit_freeze: 다른 task-id 커밋 섞인 경우 → .tasks/locks/<task>.frozen 생성 + exit 1
- test_no_mixed: 같은 task-id만 있으면 exit 0
    )annotationsN)PathzI/home/jay/workspace/.worktrees/task-2454-dev4/scripts/start_task_guard.pyc           
         t        j                  dt        t              g| z   t        |      dddi t        j
                  |xs i       S )u   스크립트 실행 헬퍼.python3T   )cwdcapture_outputtexttimeoutenv)
subprocessrunstrSCRIPTosenviron)argsr   r   s      T/home/jay/workspace/.worktrees/task-2487-dev2/tests/start_guard/test_mixed_commit.py_runr      sI    >>	CK 4'H)rzz)ciR)     c           	        | dz  }|j                          t        j                  dddt        |      gdd       | dz  }|j                          t        j                  ddt        |      gdd       g dg d	dd
ddt        |      gg}|D ]$  }t        j                  |t        |      dd       & |dz  j	                  dd       t        j                  g dt        |      dd       t        j                  g dt        |      dd       t        j                  g dt        |      dd       t        j                  g dt        |      dd       |S )u<   origin/main 브랜치가 있는 임시 git 저장소 셋업.z
origin.gitgitinitz--bareT)checkr	   repo)r   configz
user.emailztest@test.com)r   r   z	user.nameTestremoteaddoriginr   r   r	   	README.mdutf-8encoding)r   r   r"   )r   commit-mr   )r   pushr    z	HEAD:main)r   fetchr    )mkdirr   r   r   
write_text)tmp_pathorigin_path	repo_pathcfg_cmdscmds        r   git_repo_with_originr1      sA    \)KNNE68S-=>d[_` 6!IOONNE63y>2$tT 	9.	%3{+;<H
  QsId4PQ (('(BNN.C	N$_cdNN'	N$t NN.	N$t NN"	N$t r   c                    | |z  j                  |d       t        j                  dd|gt        |       dd       t        j                  ddd|gt        |       dd       y	)
u   파일 추가 + 커밋.r#   r$   r   r   Tr!   r&   r'   N)r+   r   r   r   )r.   filenamecontentmessages       r   _add_commitr6   E   s[    %%g%@NNE5(+Yt\`aNN	$(	N$tr   c                X   | }d}t        |ddd| d       t        |ddd       t        d	|d
g|dt        |      i      }|j                  dk7  s!J d|j                   d|j
                          |dz  dz  | dz  }|j                         s
J d|        t        j                  |j                  d            }d|v sJ d       d|d   v sJ d|d           d|v sJ ||d   v sJ d|j
                  j                         v s#d|j
                  v sJ d|j
                          yy)uL   다른 task-id 커밋이 섞인 경우 frozen 마커 생성 + exit 1 확인.	task-2454	file1.txtcontent1[u   ] 정상 커밋	file2.txtcontent2u   [task-9999] 이질 커밋--task--check-mixedWORKSPACE_ROOTr   r   r   u,   mixed commit 감지 실패 (exit 0)
stdout: 	
stderr: .taskslocks.frozenu   freeze 마커 미생성: r#   r$   alien_tasksu   alien_tasks 필드 없음z	task-9999u   이질 task-id 누락: mixed_tasksmixedzcheck-mixedu-   mixed commit 에러 메시지 없음
stderr: N)r6   r   r   
returncodestdoutstderrexistsjsonloads	read_textlower)r1   r   task_idresultfrozen_pathfrozen_datas         r   test_mixed_commit_freezerU   S   s   DG k:7)?/KLk:/JK	7O,s4y)F
 ! 
7jQWQ^Q^P_`! /G+	.AAKJ#<[M!JJ **[22G2DEKK'D)DD'+m44 
!+m"<!=>4 K'''k-0000 fmm))++}/M 
8HM/M+r   c                   | }d}t        |ddd| d       t        |ddd| d       t        d	|d
g|dt        |      i      }|j                  dk(  s!J d|j                   d|j
                          |dz  dz  | dz  }|j                         r
J d|        d|j                  v s1d|j                  j                         v sJ d|j                          yy)u1   같은 task-id 커밋만 있으면 exit 0 확인.r8   r9   r:   r;   u   ] 첫 번째 커밋r<   r=   u   ] 두 번째 커밋r>   r?   r@   rA   r   u/   정상 커밋인데 exit 1 (비정상)
stdout: rB   rC   rD   rE   u#   freeze 마커가 잘못 생성됨: u   mixed commit 없음rH   u    성공 메시지 없음
stdout: N)r6   r   r   rI   rJ   rK   rL   rP   )r1   r   rQ   rR   rS   s        r   test_no_mixedrW   |   s   DG k:7);N/OPk:7);N/OP	7O,s4y)F
 ! 
:6==/TZTaTaSbc! /G+	.AAK!!#X'J;-%XX# FMM1W@S@S@U5U 
+FMM?;U5U1r   c                    | }d}t        d|dg|dt        |      i      }|j                  dk(  s!J d|j                   d|j                          y	)
u;   origin/main..HEAD 범위에 커밋이 없는 경우 exit 0.r8   r>   r?   r@   rA   r   u,   커밋 없는데 exit 1 (비정상)
stdout: rB   N)r   r   rI   rJ   rK   )r1   r   rQ   rR   s       r   test_no_mixed_no_commitsrY      sj    DG 	7O,s4y)F
 ! 
7jQWQ^Q^P_`!r   )N)r   z	list[str]r   r   r   zdict | Nonereturnzsubprocess.CompletedProcess)r,   r   )
r.   r   r3   r   r4   r   r5   r   rZ   None)r1   r   )__doc__
__future__r   rM   r   r   pathlibr   pytestr   r   fixturer1   r6   rU   rW   rY    r   r   <module>rb      s\   
 #  	   	Y	Z	 # #L"R4r   