
    [i6                    z   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
ej                  j                  de
      Zerej                  sJ ej                  j                  e      Zeej"                  d<   ej                  j%                  e       ej&                  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_managerc                    | dz  }| dz  }|j                          |j                          |dz  j                  d       t        t        |      t        |            }|dgk(  sJ |dz  j	                         dk(  sJ y)u3   시나리오 1: .env 단일 존재 → 복사 1건.srcdst.envz
KEY=value
N)mkdir
write_text_copy_env_filesstr	read_texttmp_pathr   r   copieds       Z/home/jay/workspace/.worktrees/task-2520-dev4/tests/dev3/test_worktree_manager_env_copy.pytest_copy_env_singler      sy    
U
C
U
CIIKIIK6\m,SXs3x0FfX&L##%666    c                h   | dz  }| dz  }|j                          |j                          |dz  j                  d       |dz  j                  d       t        t        |      t        |            }t	        |      ddhk(  sJ |dz  j                         dk(  sJ |dz  j                         dk(  sJ y)uP   시나리오 2: .env + .env.local 동시 존재 → 복사 2건 (순서 무관).r   r   r	   zA=1
z
.env.localzB=2
N)r
   r   r   r   setr   r   s       r   test_copy_env_multipler   &   s    
U
C
U
CIIKIIK6\g&<##G,SXs3x0Fv;6<0000&L##%000,))+w666r   c                F   | dz  }| dz  }|j                          |j                          |dz  j                  d       |dz  j                  d       t        t        |      t        |            }|g k(  sJ |dz  j	                         rJ |dz  j	                         rJ y)uC   시나리오 3: .env.example만 존재 → 0건 (템플릿 무시).r   r   z.env.examplezKEY=example
z.env.samplezKEY=sample
N)r
   r   r   r   existsr   s       r   test_copy_env_ignores_exampler   6   s    
U
C
U
CIIKIIK>%%o6=$$^4SXs3x0FR<<n$,,...m#++----r   c                    | dz  }| dz  }|j                          |j                          t        t        |      t        |            }|g k(  sJ y)uF   시나리오 4: 어느 것도 없음 → 0건 (silent skip, 에러 X).r   r   N)r
   r   r   r   s       r    test_copy_env_silent_when_absentr   F   sH    
U
C
U
CIIKIIKSXs3x0FR<<r   c                J   | dz  }| dz  }|j                          |j                          |dz  }|j                  d       t        j                  |d       t	        t        |      t        |            }|dgk(  sJ |dz  j                         j                  dz  }|dk(  sJ y)uU   시나리오 6: 권한 보존 — .env chmod 0o600 → 복사 후 동일 mode 확인.r   r   r	   zSECRET=xxx
i  i  N)r
   r   oschmodr   r   statst_mode)r   r   r   env_filer   modes         r   #test_copy_env_preserves_permissionsr$   R   s    
U
C
U
CIIKIIKV|H'HHXuSXs3x0FfX&L ((50D5==r   c                   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(  sJ |g k(  sJ d	}g }|r(t        j	                  t        |      t        |            }t              d
k(  sJ d   t        |      t        |      fk(  sJ |g k(  sJ 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     r   spy_copyz-test_no_copy_env_flag_skips.<locals>.spy_copym   s    lI./	r   r   r   r   r	   zX=1
Fr   T   N)r(   r   r)   r   returnz	list[str])setattrr   r
   r   r   r   len)	monkeypatchr   r+   r   r   copy_env
copied_envcopied_env_truer*   s	           @r   test_no_copy_env_flag_skipsr4   c   s    $&E (*;XF
U
C
U
CIIKIIK6\g& HJ%55c#hCI
 u:?? H!#O*::3s8SXNu:??8C#c(++++b   r   )r   r   r-   None)r0   zpytest.MonkeyPatchr   r   r-   r5   )__doc__
__future__r   importlib.util	importlibr   syspathlibr   pytestSCRIPT_PATHutilspec_from_file_location_specloadermodule_from_specr   modulesexec_moduler   r   r   r   r   r$   r4    r   r   <module>rF      s    E "  	 
   DE../A;O >>2259 "2    ) *"2277 . 	"(!r   