
    Gi]                     b   d Z ddlZddlmc mZ ddlZddlZddl	m
Z
 ddlZej                  j                  d e e
e      j                   j                                ddlmZ  G d d      Z G d d      Z G d	 d
      Z G d d      Z G d d      Zedk(  r ej2                  edg       yy)uF  
utils/env_loader.py - load_env_keys() 단위 테스트

테스트 항목:
- .env.keys 파일 정상 로드 및 반환값 확인
- 파일 없을 때 예외 없이 0 반환 확인
- 기존 환경변수 덮어쓰지 않음 확인 (setdefault 동작)
- 따옴표로 감싸진 값 파싱 확인
- 주석 및 빈 줄 무시 확인
    N)Path)load_env_keysc                       e Zd ZdZd Zy)TestLoadEnvKeysNormalLoadu.   정상적인 .env.keys 파일 로드 테스트c                 (   |dz  }|j                  d       |j                  dd       |j                  dd       t        t        |            }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}}t        j                  d   }	d}
|	|
k(  }|slt	        j
                  d|fd|	|
f      t	        j                  |	      t	        j                  |
      dz  }dd|iz  }t        t	        j                  |            dx}	x}}
t        j                  d   }	d}
|	|
k(  }|slt	        j
                  d|fd|	|
f      t	        j                  |	      t	        j                  |
      dz  }dd|iz  }t        t	        j                  |            dx}	x}}
y)uR   export KEY=value 형식 두 줄 로드 후 반환값 2, 환경변수 설정 확인	.env.keysz&export KEY1=value1
export KEY2=value2
KEY1FraisingKEY2   ==z%(py0)s == %(py3)sresultpy0py3assert %(py5)spy5Nvalue1z%(py1)s == %(py4)spy1py4assert %(py6)spy6value2)
write_textdelenvr   str
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationosenvironselftmp_pathmonkeypatchenv_filer   @py_assert2@py_assert1@py_format4@py_format6@py_assert0@py_assert3@py_format5@py_format7s                ,/home/jay/workspace/tests/test_env_loader.py&test_loads_variables_and_returns_countz@TestLoadEnvKeysNormalLoad.test_loads_variables_and_returns_count   sU   k)FG 	651651s8}-v{vvvzz&!-X-!X----!X---!---X-------zz&!-X-!X----!X---!---X-------    N)__name__
__module____qualname____doc__r:    r;   r9   r   r      s
    8.r;   r   c                       e Zd ZdZd Zy)TestLoadEnvKeysMissingFileu%   파일이 없을 때 동작 테스트c                    t        |dz        }t        |      }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	)
u<   존재하지 않는 경로 전달 시 예외 없이 0 반환zdoes_not_exist.env.keysr   r   r   r   r   r   r   N)
r!   r   r"   r#   r$   r%   r&   r'   r(   r)   )r-   r.   nonexistentr   r1   r2   r3   r4   s           r9   0test_missing_file_returns_zero_without_exceptionzKTestLoadEnvKeysMissingFile.test_missing_file_returns_zero_without_exception.   st    (%>>?{+v{vvvr;   N)r<   r=   r>   r?   rE   r@   r;   r9   rB   rB   +   s
    /r;   rB   c                       e Zd ZdZd Zy)TestLoadEnvKeysNoOverwriteuH   기존 환경변수를 덮어쓰지 않는 동작 테스트 (setdefault)c                    |j                  dd       |dz  }|j                  d       t        t        |             t        j
                  d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}y
)uH   이미 설정된 환경변수는 .env.keys 값으로 덮어쓰지 않음EXISTING_KEYoriginalr   z export EXISTING_KEY=overwritten
r   r   r   r   r   N)setenvr   r   r!   r*   r+   r"   r#   r'   r(   r)   )	r-   r.   r/   r0   r5   r6   r1   r7   r8   s	            r9   %test_existing_env_var_not_overwrittenz@TestLoadEnvKeysNoOverwrite.test_existing_env_var_not_overwritten:   s    >:6k)?@c(m$zz.)7Z7)Z7777)Z777)777Z7777777r;   N)r<   r=   r>   r?   rL   r@   r;   r9   rG   rG   7   s
    R	8r;   rG   c                       e Zd ZdZd Zy)TestLoadEnvKeysQuotedValuesu+   따옴표로 감싸진 값 파싱 테스트c                 (   |j                  dd       |j                  dd       |dz  }|j                  d       t        t        |            }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}}t        j                  d   }	d}
|	|
k(  }|slt	        j
                  d|fd|	|
f      t	        j                  |	      t	        j                  |
      dz  }dd|iz  }t        t	        j                  |            dx}	x}}
t        j                  d   }	d}
|	|
k(  }|slt	        j
                  d|fd|	|
f      t	        j                  |	      t	        j                  |
      dz  }dd|iz  }t        t	        j                  |            dx}	x}}
y)uL   export QUOTED1="hello world" → QUOTED1 == "hello world" (따옴표 제거)QUOTED1Fr
   QUOTED2r   z<export QUOTED1="hello world"
export QUOTED2='single quoted'
r   r   r   r   r   r   r   Nzhello worldr   r   r   r   zsingle quotedr    r   r   r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   s                r9   !test_double_quoted_value_strippedz=TestLoadEnvKeysQuotedValues.test_double_quoted_value_strippedI   sS   9e49e4k)^_s8}-v{vvvzz)$55$5555$555$5555555555zz)$77$7777$777$7777777777r;   N)r<   r=   r>   r?   rS   r@   r;   r9   rN   rN   F   s
    58r;   rN   c                       e Zd ZdZd Zy)$TestLoadEnvKeysCommentsAndBlankLinesu"   주석과 빈 줄 무시 테스트c                    |j                  dd       |dz  }|j                  d       t        t        |            }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}}t        j                  d   }	d}
|	|
k(  }|slt	        j
                  d|fd|	|
f      t	        j                  |	      t	        j                  |
      dz  }dd|iz  }t        t	        j                  |            dx}	x}}
y)uL   # 주석 및 빈 줄은 건너뛰고 유효한 변수만 로드, 반환값 1VALIDFr
   r   z# comment

export VALID=yes
   r   r   r   r   r   r   Nyesr   r   r   r   rR   r,   s                r9   %test_comments_and_blank_lines_ignoredzJTestLoadEnvKeysCommentsAndBlankLines.test_comments_and_blank_lines_ignored[   s    7E2k)=>s8}-v{vvvzz'"+e+"e++++"e+++"+++e+++++++r;   N)r<   r=   r>   r?   rZ   r@   r;   r9   rU   rU   X   s
    ,
,r;   rU   __main__z-v)r?   builtinsr$   _pytest.assertion.rewrite	assertionrewriter"   r*   syspathlibr   pytestpathinsertr!   __file__parentutils.env_loaderr   r   rB   rG   rN   rU   r<   mainr@   r;   r9   <module>ri      s   	  	 
   3tH~,,334 5 *. .&	 	8 88 8$, ,  zFKK4 ! r;   