
    Ci                     `   d 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
Z
ddlZe	j                  j                  dd       ddlmZ ddededdfdZd	ej&                  ddfd
Zd	ej&                  ddfdZd	ej&                  ddfdZd	ej&                  ddfdZd	ej&                  ddfdZddZy)u   
test_setup_auth.py - check_and_refresh_ttl 및 CLI --refresh 옵션 테스트

TDD: 테스트 먼저 작성 후 구현.
Firebase/Playwright 실제 호출 없음. mtime 조작과 파일 존재 여부만 테스트.
    Nz /home/jay/workspace/teams/shared)
setup_authpathage_secondsreturnc                     t        | dd      5 }|j                  d       ddd       t        j                         }||z
  }t        j                  | ||f       y# 1 sw Y   ;xY w)uG   파일을 생성하고 mtime을 현재 시각 - age_seconds 로 설정.wzutf-8)encodingz{}N)openwritetimeosutime)r   r   fnowpasts        </home/jay/workspace/teams/shared/qc/tests/test_setup_auth.py_touchr      sW    	dC'	* a	
))+CDHHTD$< 	 s   AA$tmp_pathc                    t        | dz        }t        |d       t        j                  |      }d}||u }|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@   방금 생성된 storageState.json → 갱신 불필요 (False).storageState.jsonr   r   storage_state_pathFisz%(py0)s is %(py3)sresultpy0py3assert %(py5)spy5Nstrr   r   check_and_refresh_ttl
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationr   pr   @py_assert2@py_assert1@py_format4@py_format6s          r   test_check_ttl_fresh_filer4   %   s    H**+A
1!--CF6U?6U66U    c                    t        | dz        }t        |d       t        j                  |      }d}||u }|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)   55분 전 mtime → 갱신 필요 (True).r   i  r   r   Tr   r   r   r   r!   r"   Nr#   r.   s          r   test_check_ttl_stale_filer7   -   s    H**+A
1'"--CF6T>6T66Tr5   c                    t        | dz        }t        j                  |      }d}||u }|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'   파일 없음 → 갱신 필요 (True).znonexistent_storageState.jsonr   Tr   r   r   r   r!   r"   N)r$   r   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   s          r   test_check_ttl_missing_filer9   5   sz    H667A--CF6T>6T66Tr5   c                    t        | dz        }t        |d       t        j                  |d      }d}||u }|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)uH   max_age_minutes=10 설정 시 15분 전 파일 → 갱신 필요 (True).r   i  r   
   r   max_age_minutesTr   r   r   r   r!   r"   Nr#   r.   s          r   test_check_ttl_custom_max_ager>   <   s    H**+A
1'"--TVWF6T>6T66Tr5   c                    t        | dz        }t        |d       t        j                  |d      }d}||u }|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)uH   max_age_minutes=10 설정 시 5분 전 파일 → 아직 유효 (False).r   i,  r   r;   r<   Fr   r   r   r   r!   r"   Nr#   r.   s          r   )test_check_ttl_custom_max_age_still_validr@   D   s    H**+A
1&!--TVWF6U?6U66Ur5   c                     t        j                         } | j                  dd       | j                  dg      }|j                  }d}||u }|st        j                  d|fd||f      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}}| j                  g       }|j                  }d}||u }|st        j                  d|fd||f      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}}y)u)   CLI에서 --refresh 옵션 파싱 확인.z	--refresh
store_true)actionTr   )z/%(py2)s
{%(py2)s = %(py0)s.refresh
} is %(py5)sargs)r   py2r"   zassert %(py7)spy7NFargs_no_refresh)argparseArgumentParseradd_argument
parse_argsrefreshr&   r'   r(   r)   r*   r+   r,   r-   )parserrD   r1   @py_assert4@py_assert3r3   @py_format8rG   s           r   test_refresh_option_clirQ   L   s$   $$&F
L9k]+D<<4<4<444<4''+O""+e+"e++++"e++++++?+++?+++"+++e+++++++r5   )g        )r   N)__doc__builtinsr(   _pytest.assertion.rewrite	assertionrewriter&   rH   r   sysr   pytestr   insertqc.authr   r$   floatr   TempPathFactoryr4   r7   r9   r>   r@   rQ    r5   r   <module>r^      s      	 
   5 6 ! !5 !4 !(>(> 4 (>(> 4 &*@*@ T F,B,B t 8N8N SW ,r5   