
    ƴi                         d Z ddlZddlZddlZddlZdZeej                  vrej                  j                  de       ddlm	Z	 ddlm
Z
mZmZ d Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zy)u   
test_gate_config_loader.py — gate_config_loader 단위 테스트 (5개 시나리오, 14건)

담당: 닌기르수 (QA 테스터), dev5-team, task-2149
    Nz/home/jay/workspace)load_gate_configis_gate_enabledget_gate_modec                  h    t        d      } | d   du sJ | d   dk(  sJ | d   dk(  sJ | d   d	k(  sJ y
)uJ   impact_scanner 게이트가 올바른 설정으로 반환되어야 한다.impact_scannerenabledTmodewarntimeout_per_symbol   max_symbols   Nr   cfgs    4/home/jay/workspace/tests/test_gate_config_loader.py test_json_parsing_impact_scannerr      sX    
+
,Cy>T!!!v;&   #$)))}"""    c                  @    t        d      } | d   du sJ | d   dk(  sJ y)uQ   ci_preflight 게이트가 enabled=True, mode="warn"으로 반환되어야 한다.ci_preflightr   Tr	   r
   Nr   r   s    r   test_json_parsing_ci_preflightr   '   0    
>
*Cy>T!!!v;&   r   c                  @    t        d      } | d   du sJ | d   dk(  sJ y)uN   l1_smoketest 게이트가 enabled=True, mode="fail"로 반환되어야 한다.l1_smoketestr   Tr	   failNr   r   s    r   test_json_parsing_l1_smoketestr   .   r   r   c                  f    t        d      } | d   du sJ | d   dk(  sJ t        | d         dk(  sJ y)	uT   goal_assertions 게이트가 allowed_commands 9개와 함께 반환되어야 한다.goal_assertionsr   Tr	   r   allowed_commands	   N)r   lenr   s    r   !test_json_parsing_goal_assertionsr"   5   sJ    
,
-Cy>T!!!v;&   s%&'1,,,r   c                  T    t        d      } | d   du sJ | d   dk(  sJ | d   dk(  sJ y)	uT   unresolved_gate 게이트가 max_in_scope_unresolved=3으로 반환되어야 한다.unresolved_gater   Tr	   r
   max_in_scope_unresolvedr   Nr   r   s    r   !test_json_parsing_unresolved_gater&   =   sE    
,
-Cy>T!!!v;&   ()Q...r   c                  "    t        d      du sJ y)uA   is_gate_enabled("impact_scanner")은 True를 반환해야 한다.r   TNr    r   r   #test_is_gate_enabled_impact_scannerr*   I   s    +,444r   c                  "    t        d      du sJ y)u?   is_gate_enabled("nonexistent")은 False를 반환해야 한다.nonexistentFNr(   r)   r   r    test_is_gate_enabled_nonexistentr-   N   s    =)U222r   c                  $    t        d      dk(  sJ y)u?   get_gate_mode("l1_smoketest")은 "fail"을 반환해야 한다.r   r   Nr   r)   r   r   test_get_gate_mode_l1_smoketestr0   S       (F222r   c                  $    t        d      dk(  sJ y)u?   get_gate_mode("ci_preflight")은 "warn"을 반환해야 한다.r   r
   Nr/   r)   r   r   test_get_gate_mode_ci_preflightr3   X   r1   r   c                  Z    t        j                  g ddd      } | j                  dk(  sJ y)ua   subprocess로 get_gate_mode('impact_scanner')를 호출하면 stdout이 'warn\n'이어야 한다.)python3z-czimport sys; sys.path.insert(0, '/home/jay/workspace'); from utils.gate_config_loader import get_gate_mode; print(get_gate_mode('impact_scanner'))T)capture_outputtextzwarn
N)
subprocessrunstdout)results    r   1test_bash_subprocess_get_gate_mode_impact_scannerr<   a   s1    ^^		
 F ==H$$$r   c                  .    t        d      } | dddk(  sJ y)u]   load_gate_config("nonexistent")은 {"enabled": False, "mode": "warn"}을 반환해야 한다.r,   Fr
   r   r	   Nr   r   s    r   1test_load_gate_config_nonexistent_returns_defaultr?   x   s    
=
)CeV4444r   c                  $    t        d      dk(  sJ y)u>   get_gate_mode("nonexistent")은 "warn"을 반환해야 한다.r,   r
   Nr/   r)   r   r   +test_get_gate_mode_nonexistent_returns_warnrA   ~   s    '6111r   c                     |dz  }|j                  dd       | j                  t        dt        |             t	        j
                  t              5  t        d       ddd       y# 1 sw Y   yxY w)ud   잘못된 JSON 파일을 사용하면 load_gate_config 호출 시 ValueError가 발생해야 한다.zbad_gate_config.jsonz{ this is not valid json }utf-8encoding_CONFIG_PATHr   N)
write_textsetattrgate_config_loaderstrpytestraises
ValueErrorr   )monkeypatchtmp_pathbad_json_files      r   8test_load_gate_config_raises_value_error_on_invalid_jsonrQ      sc    55M9GL*NC<NO	z	" +)*+ + +s   A''A0c           	         |dz  }|j                  t        j                  dddddii      d       | j                  t        d	t        |             t        j                  t        d
      5  t        d       ddd       y# 1 sw Y   yxY w)u   mode 필드가 'warn'/'fail'이 아닌 경우 ValueError가 발생하고 메시지에 'warn 또는 fail'이 포함되어야 한다.zinvalid_mode_config.jsongates	test_gateTinvalidr>   rC   rD   rF   u   또는)matchN)
rG   jsondumpsrH   rI   rJ   rK   rL   rM   r   )rN   rO   invalid_mode_files      r   8test_load_gate_config_raises_value_error_on_invalid_moderZ      s     #==  

GktY+OPQR ! 
 *NC@Q<RS	z	2 &%& & &s   .BB)__doc__rW   r8   sysrK   
_WORKSPACEpathinsertutils.gate_config_loaderrI   r   r   r   r   r   r   r"   r&   r*   r-   r0   r3   r<   r?   rA   rQ   rZ   r)   r   r   <module>ra      s      
  #
SXXHHOOAz" 5 #!!-/5
3
3
3%.52+&r   