
    i7                        d Z ddlmZ ddlZddlmc 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      :/home/jay/workspace/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                   | }d}t        |ddd| d       t        |ddd       t        d	|d
g|dt        |      i      }|j                  }d}||k7  }|st	        j
                  d|fd||f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      dz  }t	        j                  d|j                   d|j                         dz   d|iz  }t        t	        j                  |            dx}x}}|dz  dz  | dz  }	|	j                  } |       }|st	        j                  d|	       dz   dt        j                         v st	        j                  |	      rt	        j                  |	      ndt	        j                  |      t	        j                  |      dz  }
t        t	        j                  |
            dx}}t!        j"                  |	j%                  d            }d }||v }|st	        j
                  d!|fd"||f      t	        j                  |      d#t        j                         v st	        j                  |      rt	        j                  |      nd#d$z  }t	        j                  d%      d&z   d'|iz  }t        t	        j                  |            dx}}d(}|d    }||v }|st	        j
                  d!|fd)||f      t	        j                  |      t	        j                  |      d*z  }
t	        j                  d+|d           d,z   d-|
iz  }t        t	        j                  |            dx}x}}d.}||v }|st	        j
                  d!|fd"||f      t	        j                  |      d#t        j                         v st	        j                  |      rt	        j                  |      nd#d$z  }d/d'|iz  }t        t	        j                  |            dx}}|d.   }||v }|st	        j
                  d!|fd0||f      d1t        j                         v st	        j                  |      rt	        j                  |      nd1t	        j                  |      d2z  }d/d'|iz  }t        t	        j                  |            dx}}g }d3}|j                  }|j&                  } |       }||v }|}|sd4}|j                  }||v }|}|st	        j
                  d!|fd5||f      t	        j                  |      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      t	        j                  |      d6z  }d7d8|iz  }|j)                  |       |st	        j
                  d!fd9f      t	        j                  |      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      d:z  }d;d<|iz  }|j)                  |       t	        j*                  |d=      i z  }t	        j                  d>|j                         d?z   d@|iz  }t        t	        j                  |            dx}x}x}x}x}x}x}x}x}}y)AuL   다른 task-id 커밋이 섞인 경우 frozen 마커 생성 + exit 1 확인.	task-2454	file1.txtcontent1[u   ] 정상 커밋	file2.txtcontent2u   [task-9999] 이질 커밋--task--check-mixedWORKSPACE_ROOTr   r   r   )!=)z2%(py2)s
{%(py2)s = %(py0)s.returncode
} != %(py5)sresultpy0py2py5u,   mixed commit 감지 실패 (exit 0)
stdout: 	
stderr: 
>assert %(py7)spy7N.taskslocks.frozenu   freeze 마커 미생성: zC
>assert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}frozen_pathrE   rF   py4r#   r$   alien_tasksin)z%(py1)s in %(py3)sfrozen_data)py1py3u   alien_tasks 필드 없음z
>assert %(py5)srG   z	task-9999)z%(py1)s in %(py4)s)rU   rP   u   이질 task-id 누락: z
>assert %(py6)spy6mixed_taskszassert %(py5)s)z%(py0)s in %(py3)stask_id)rE   rV   mixedzcheck-mixed)zb%(py3)s in %(py11)s
{%(py11)s = %(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py5)s.stderr
}.lower
}()
})rV   rG   rJ   py9py11z%(py13)spy13)z2%(py16)s in %(py20)s
{%(py20)s = %(py18)s.stderr
})py16py18py20%(py22)spy22   u-   mixed commit 에러 메시지 없음
stderr: 
>assert %(py25)spy25)r6   r   r   
returncode
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_saferepr_format_assertmsgstdoutstderrAssertionError_format_explanationexistsjsonloads	read_textlowerappend_format_boolop)r1   r   rY   rC   @py_assert1@py_assert4@py_assert3@py_format6@py_format8rN   @py_format5rT   @py_assert0@py_assert2@py_format4@py_format7@py_assert6@py_assert8@py_assert10@py_assert15@py_assert19@py_assert17@py_format12@py_format14@py_format21@py_format23@py_format24@py_format26s                               r   test_mixed_commit_freezer   S   sk   DG k:7)?/KLk:/JK	7O,s4y)F
   !                    !"    8jQWQ^Q^P_`     /G+	.AAKJJJJ#<[M!JJJJJJJ;JJJ;JJJJJJJJJJJJ **[22G2DEKD=K'DDD=KDDD=DDDDDDKDDDKDDDD)DDDDDDD +m4 ;44  ;4        5    "+m"<!=>     '=K''''=K'''=''''''K'''K'''''''!-007000007000000070007000000000007 fmm m)) )+ 7++ }  }/M   7+                  $    *    ,     }    0=      AG    AG    AN        9H      r   c                b   | }d}t        |ddd| d       t        |ddd| d       t        d	|d
g|dt        |      i      }|j                  }d}||k(  }|st	        j
                  d|fd||f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      dz  }t	        j                  d|j                   d|j                         dz   d|iz  }t        t	        j                  |            dx}x}}|dz  dz  | dz  }	|	j                  } |       }| }
|
st	        j                  d|	       dz   dt        j                         v st	        j                  |	      rt	        j                  |	      ndt	        j                  |      t	        j                  |      dz  }t        t	        j                  |            dx}x}}
g }d}|j                  }||v }|}|s'd}|j                  }|j                   } |       }||v }|}|st	        j
                  d |fd!||f      t	        j                  |      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      d"z  }d#d$|iz  }|j#                  |       |st	        j
                  d fd%f      t	        j                  |      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                        t	        j                        t	        j                  |      d&z  }d'd(|iz  }|j#                  |       t	        j$                  |d)      i z  }t	        j                  d*|j                         d+z   d,|iz  }t        t	        j                  |            dx}x}x}x}x}x}x}x}x}}y)-u1   같은 task-id 커밋만 있으면 exit 0 확인.r8   r9   r:   r;   u   ] 첫 번째 커밋r<   r=   u   ] 두 번째 커밋r>   r?   r@   rA   r   ==z2%(py2)s
{%(py2)s = %(py0)s.returncode
} == %(py5)srC   rD   u/   정상 커밋인데 exit 1 (비정상)
stdout: rH   rI   rJ   NrK   rL   rM   u#   freeze 마커가 잘못 생성됨: zG
>assert not %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}rN   rO   u   mixed commit 없음rZ   rR   )z.%(py3)s in %(py7)s
{%(py7)s = %(py5)s.stdout
})rV   rG   rJ   z%(py9)sr[   )zh%(py12)s in %(py20)s
{%(py20)s = %(py18)s
{%(py18)s = %(py16)s
{%(py16)s = %(py14)s.stdout
}.lower
}()
})py12py14r^   r_   r`   ra   rb   rc   u    성공 메시지 없음
stdout: rd   re   )r6   r   r   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rv   rw   rx   )r1   r   rY   rC   ry   rz   r{   r|   r}   rN   @py_assert5r   r   r   @py_assert11r   r   r   @py_assert13@py_format10r   r   r   r   s                           r   test_no_mixedr   |   s   DG k:7);N/OPk:7);N/OP	7O,s4y)F
   !                    !"    ;6==/TZTaTaSbc     /G+	.AAK!!X!#X##X#XX'J;-%XXXXXXX{XXX{XXX!XXX#XXXXXX  FMM  M1 W  @S@S @S@U W@U5U    M    !      %+    %+    %2     W@U    6=      AG    AG    AN    AT    AV        ,FMM?;      r   c                4   | }d}t        d|dg|dt        |      i      }|j                  }d}||k(  }|st        j                  d|fd||f      d	t        j                         v st        j                  |      rt        j                  |      nd	t        j                  |      t        j                  |      d
z  }t        j                  d|j                   d|j                         dz   d|iz  }t        t        j                  |            dx}x}}y)u;   origin/main..HEAD 범위에 커밋이 없는 경우 exit 0.r8   r>   r?   r@   rA   r   r   r   rC   rD   u,   커밋 없는데 exit 1 (비정상)
stdout: rH   rI   rJ   N)r   r   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   )	r1   r   rY   rC   ry   rz   r{   r|   r}   s	            r   test_no_mixed_no_commitsr      s   DG 	7O,s4y)F
   !                    !"    8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   r   None)r1   r   )__doc__
__future__r   builtinsri   _pytest.assertion.rewrite	assertionrewriterg   rs   r   r   pathlibr   pytestr   r   fixturer1   r6   r   r   r    r   r   <module>r      s`   
 #    	   	Y	Z	 # #L"R4r   