
    i6                    x   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e
j"                  j%                  de      Zg ZeZerej,                  ZeZesddd	 ej0                         v s ej2                  e      r ej4                  e      nd	iz  Zej9                  e       er`d
d	 ej0                         v s ej2                  e      r ej4                  e      nd	 ej4                  e      dz  Zej9                  e        ej<                  ed      i z  Zddeiz  Z  e! ejD                  e             dxZxZZe
j"                  jG                  e      Z$e$ejJ                  d<   ej,                  jM                  e$       e$jN                  Z'ddZ(ddZ)ddZ*ddZ+ddZ,ddZ-y)u?   task-2377: worktree_manager._copy_env_files() 단위 테스트.    )annotationsN)Pathz//home/jay/workspace/scripts/worktree_manager.pyworktree_managerz%(py2)spy2_specz#%(py6)s
{%(py6)s = %(py4)s.loader
})py4py6zassert %(py9)spy9c                   | dz  }| dz  }|j                          |j                          |dz  j                  d       t        t        |      t        |            }dg}||k(  }|st	        j
                  d|fd||f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      dz  }d	d
|iz  }t        t	        j                  |            dx}}d}||z  }|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                  |	      t	        j                  |
      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            dx}x}x}	x}
x}}y)u3   시나리오 1: .env 단일 존재 → 복사 1건.srcdst.envz
KEY=value
==z%(py0)s == %(py3)scopiedpy0py3assert %(py5)spy5NzU%(py7)s
{%(py7)s = %(py5)s
{%(py5)s = (%(py0)s / %(py2)s).read_text
}()
} == %(py10)sr   r   r   py7py10assert %(py12)spy12)mkdir
write_text_copy_env_filesstr
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation	read_text)tmp_pathr   r   r   @py_assert2@py_assert1@py_format4@py_format6@py_assert3@py_assert4@py_assert6@py_assert9@py_assert8@py_format11@py_format13s                  @/home/jay/workspace/tests/dev3/test_worktree_manager_env_copy.pytest_copy_env_singler8      sL   
U
C
U
CIIKIIK6\m,SXs3x0FX6X6X66X6C&L6L##6#%66%6666%666666C666C666&666#666%66666666666    c                   | dz  }| dz  }|j                          |j                          |dz  j                  d       |dz  j                  d       t        t        |      t        |            }t	        |      }ddh}||k(  }|st        j                  d|fd||f      d	t        j                         v st        j                  t              rt        j                  t              nd	d
t        j                         v st        j                  |      rt        j                  |      nd
t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}d}	||	z  }
|
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                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}	x}
x}x}x}}d}	||	z  }
|
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                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}	x}
x}x}x}}y)uP   시나리오 2: .env + .env.local 동시 존재 → 복사 2건 (순서 무관).r   r   r   zA=1
z
.env.localzB=2
r   z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)ssetr   r   py1r   r	   assert %(py8)spy8Nr   r   r   r   )r   r   r    r!   r<   r"   r#   r$   r%   r&   r'   r(   r)   r*   )r+   r   r   r   r,   @py_assert5r1   @py_format7@py_format9r-   r0   r2   r3   r4   r5   r6   s                   r7   test_copy_env_multiplerD   &   s=   
U
C
U
CIIKIIK6\g&<##G,SXs3x0Fv;06<00;00000;000000030003000000v000v000;000000000000C&L0L##0#%00%0000%000000C000C000&000#000%000000000006C,6))6)+6w6+w6666+w666666C666C666,666)666+666w66666666r9   c                X   | dz  }| dz  }|j                          |j                          |dz  j                  d       |dz  j                  d       t        t        |      t        |            }g }||k(  }|st	        j
                  d|fd||f      d	t        j                         v st	        j                  |      rt	        j                  |      nd	t	        j                  |      d
z  }dd|iz  }t        t	        j                  |            dx}}d}||z  }|j                  }	 |	       }
|
 }|sddt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |	      t	        j                  |
      dz  }t        t	        j                  |            dx}x}x}	x}
}d}||z  }|j                  }	 |	       }
|
 }|sddt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |	      t	        j                  |
      dz  }t        t	        j                  |            dx}x}x}	x}
}y)uC   시나리오 3: .env.example만 존재 → 0건 (템플릿 무시).r   r   z.env.examplezKEY=example
z.env.samplezKEY=sample
r   r   r   r   r   r   NzQassert not %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = (%(py0)s / %(py2)s).exists
}()
})r   r   r   r   )r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   exists)r+   r   r   r   r,   r-   r.   r/   r0   r1   r2   r4   rC   s                r7   test_copy_env_ignores_examplerG   6   s   
U
C
U
CIIKIIK>%%o6=$$^4SXs3x0F6R<6R66R$.n$.$,,.,.................n...,...........#-m#-#++-+-----------------m---+-----------r9   c                   | dz  }| dz  }|j                          |j                          t        t        |      t        |            }g }||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}}y	)
uF   시나리오 4: 어느 것도 없음 → 0건 (silent skip, 에러 X).r   r   r   r   r   r   r   r   N)r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   )r+   r   r   r   r,   r-   r.   r/   s           r7    test_copy_env_silent_when_absentrI   F   s    
U
C
U
CIIKIIKSXs3x0F6R<6R66Rr9   c                   | dz  }| dz  }|j                          |j                          |dz  }|j                  d       t        j                  |d       t	        t        |      t        |            }dg}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      d	z  }d
d|iz  }t        t        j                  |            dx}}|dz  j                         j                  dz  }	d}|	|k(  }|st        j                  d|fd|	|f      dt        j                         v st        j                  |	      rt        j                  |	      ndt        j                  |      d	z  }d
d|iz  }t        t        j                  |            dx}}y)uU   시나리오 6: 권한 보존 — .env chmod 0o600 → 복사 후 동일 mode 확인.r   r   r   zSECRET=xxx
i  r   r   r   r   r   r   Ni  mode)r   r   oschmodr    r!   r"   r#   r$   r%   r&   r'   r(   r)   statst_mode)
r+   r   r   env_filer   r,   r-   r.   r/   rK   s
             r7   #test_copy_env_preserves_permissionsrQ   R   s1   
U
C
U
CIIKIIKV|H'HHXuSXs3x0FX6X6X66X&L ((50D45=45445r9   c                x	   g dfd}| j                  t        d|       |dz  }|dz  }|j                          |j                          |dz  j                  d       d}g }|r(t        j	                  t        |      t        |            }t              }d}||k(  }	|	st        j                  d	|	fd
||f      dt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                        rt        j                        ndt        j                  |      t        j                  |      dz  }
dd|
iz  }t        t        j                  |            dx}x}	}g }||k(  }|st        j                  d	|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }dd|iz  }t        t        j                  |            dx}}d}g }|r(t        j	                  t        |      t        |            }t              }d}||k(  }	|	st        j                  d	|	fd
||f      dt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                        rt        j                        ndt        j                  |      t        j                  |      dz  }
dd|
iz  }t        t        j                  |            dx}x}	}d   }t        |      t        |      f}||k(  }|slt        j                  d	|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }
t        t        j                  |
            dx}x}}g }||k(  }|st        j                  d	|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }dd|iz  }t        t        j                  |            dx}}y)ua  시나리오 5: copy_env=False 시 _copy_env_files 미호출 확인.

    cmd_create는 git 의존성이 있어 직접 호출이 불가능하므로,
    monkeypatch로 _copy_env_files를 spy로 교체한 뒤,
    copy_env=False 분기(cmd_create 내부 로직: `if copy_env:` 를 직접 재현)로
    헬퍼가 호출되지 않음을 검증한다.
    c                .    j                  | |f       g S )N)append)project_path	dest_pathcallss     r7   spy_copyz-test_no_copy_env_flag_skips.<locals>.spy_copym   s    lI./	r9   r    r   r   r   zX=1
Fr   r   r;   lenrW   r=   r?   r@   Nr   
copied_envr   r   r   T   )z%(py1)s == %(py4)s)r>   r   zassert %(py6)sr	   copied_env_true)rU   r!   rV   r!   returnz	list[str])setattrr   r   r   r    r!   rY   r"   r#   r$   r%   r&   r'   r(   r)   )monkeypatchr+   rX   r   r   copy_envrZ   r,   rA   r1   rB   rC   r-   r.   r/   r\   @py_assert0r0   @py_format5rW   s                      @r7   test_no_copy_env_flag_skipsrc   c   s    $&E (*;XF
U
C
U
CIIKIIK6\g& HJ%55c#hCI
 u::?:33uu::::: H!#O*::3s8SXNu::?:33uu:8+C#c(++8+++++8++++8+++++++++++  ?b    ?b      ?   ?   b       r9   )r+   r   r]   None)r_   zpytest.MonkeyPatchr+   r   r]   rd   ).__doc__
__future__r   builtinsr$   _pytest.assertion.rewrite	assertionrewriter"   importlib.util	importlibrL   syspathlibr   pytestSCRIPT_PATHutilspec_from_file_locationr   r-   ra   loaderrA   r%   r&   r'   @py_format3rT   rB   _format_boolop@py_format8@py_format10r(   r)   module_from_specr   modulesexec_moduler    r8   rD   rG   rI   rQ   rc    r9   r7   <module>r|      s'   E "     	 
   DE../A;O u u      u   u    u                     >>2259 "2    ) *"2277 . 	"(!r9   