
    i                         d Z ddlZddlmc mZ ddlZddlm	Z	 ddl
Z
ddlZej                  j                  dd        G d d      Z G d d      Zy)	u  auto_orch.py의 enabled 필드 처리 테스트 (TDD RED 단계 — task-1012.1)

테스트 대상:
  - load_pipeline()           : YAML 파이프라인 로드 시 enabled 필드 반영
  - is_pipeline_enabled()     : 파이프라인 dict에서 enabled 여부 반환하는 새 함수

모든 테스트는 RED 단계이므로 실행 시 실패가 예상됩니다.
(is_pipeline_enabled 함수가 아직 구현되지 않았습니다)
    N)Pathz/home/jay/workspacec                   @    e Zd ZdZdeddfdZdeddfdZdeddfdZy)TestLoadPipelineEnabledFielduI   load_pipeline()이 enabled 필드를 올바르게 로드하는지 검증.tmp_pathreturnNc                    ddl m} d}|dz  }|j                  |d        |t        |            }d}||v }|st	        j
                  d|fd	||f      t	        j                  |      d
t        j                         v st	        j                  |      rt	        j                  |      nd
dz  }dd|iz  }	t        t	        j                  |	            dx}}|d   }d}
||
u }|slt	        j
                  d|fd||
f      t	        j                  |      t	        j                  |
      dz  }dd|iz  }t        t	        j                  |            dx}x}}
y)uD   enabled: true인 YAML 로드 시 enabled 값이 True인 dict 반환.r   load_pipelinez2name: test-pipeline
enabled: true
schedule: daily
ztest-pipeline.yamlutf-8encodingenabledinz%(py1)s in %(py3)spipelinepy1py3assert %(py5)spy5NTisz%(py1)s is %(py4)sr   py4assert %(py6)spy6orchestrator.auto_orchr
   
write_textstr
@pytest_ar_call_reprcompare	_saferepr@py_builtinslocals_should_repr_global_nameAssertionError_format_explanationselfr   r
   yaml_content	yaml_filer   @py_assert0@py_assert2@py_format4@py_format6@py_assert3@py_format5@py_format7s                </home/jay/workspace/orchestrator/tests/test_enabled_field.py$test_load_pipeline_with_enabled_truezATestLoadPipelineEnabledField.test_load_pipeline_with_enabled_true   s    8  	
 33	\G< Y0$yH$$$$yH$$$y$$$$$$H$$$H$$$$$$$	"*d*"d****"d***"***d*******    c                    ddl m} d}|dz  }|j                  |d        |t        |            }d}||v }|st	        j
                  d|fd	||f      t	        j                  |      d
t        j                         v st	        j                  |      rt	        j                  |      nd
dz  }dd|iz  }	t        t	        j                  |	            dx}}|d   }d}
||
u }|slt	        j
                  d|fd||
f      t	        j                  |      t	        j                  |
      dz  }dd|iz  }t        t	        j                  |            dx}x}}
y)uF   enabled: false인 YAML 로드 시 enabled 값이 False인 dict 반환.r   r	   z8name: disabled-pipeline
enabled: false
schedule: weekly
zdisabled-pipeline.yamlr   r   r   r   r   r   r   r   r   NFr   r   r   r   r   r   r+   s                r6   %test_load_pipeline_with_enabled_falsezBTestLoadPipelineEnabledField.test_load_pipeline_with_enabled_false,   s    8! 	
 77	\G< Y0$yH$$$$yH$$$y$$$$$$H$$$H$$$$$$$	"+e+"e++++"e+++"+++e+++++++r8   c           	         ddl m} d}|dz  }|j                  |d        |t        |            }|j                  }d}d} |||      }	d}
|	|
u }|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                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            dx}x}x}x}	x}}
y)u   enabled 필드가 없는 YAML 로드 시 기본값 True를 반환해야 함.

        구현체는 enabled 키가 없을 경우 setdefault 또는 동등한 방법으로
        기본값 True를 pipeline dict에 삽입해야 한다.
        r   r	   z<name: legacy-pipeline
schedule: monthly
token_budget: 50000
zlegacy-pipeline.yamlr   r   r   Tr   )zS%(py8)s
{%(py8)s = %(py2)s
{%(py2)s = %(py0)s.get
}(%(py4)s, %(py6)s)
} is %(py11)sr   )py0py2r   r   py8py11zassert %(py13)spy13N)r    r
   r!   r"   getr#   r$   r&   r'   r(   r%   r)   r*   )r,   r   r
   r-   r.   r   @py_assert1r3   @py_assert5@py_assert7@py_assert10@py_assert9@py_format12@py_format14s                 r6   0test_load_pipeline_without_enabled_defaults_truezMTestLoadPipelineEnabledField.test_load_pipeline_without_enabled_defaults_true=   s     	9$ 	
 55	\G< Y0 ||4I4t4|It,44,4444,444444x444x444|444I444t444,44444444444r8   )__name__
__module____qualname____doc__r   r7   r:   rI    r8   r6   r   r      s?    S+T +d +",d ,t ,"5 5RV 5r8   r   c                   @    e Zd ZdZd	dZd	dZd	dZd	dZd	dZd	dZ	y)
TestIsPipelineEnabledu   is_pipeline_enabled(pipeline: dict) -> bool 함수 검증.

    이 함수는 아직 구현되지 않아 ImportError가 발생합니다 (RED 단계).
    Nc                    ddl m} t        |      }|sd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                  |      dz  }t        t        j                  |            d}y)u;   is_pipeline_enabled가 callable로 import 가능해야 함.r   is_pipeline_enabledz,assert %(py3)s
{%(py3)s = %(py0)s(%(py1)s)
}callablerS   )r<   r   r   N)
r    rS   rT   r&   r'   r#   r(   r%   r)   r*   )r,   rS   r0   r1   s       r6   !test_is_pipeline_enabled_functionz7TestIsPipelineEnabled.test_is_pipeline_enabled_function\   so    >+,,,,,,,,x,,,x,,,,,,+,,,+,,,,,,,,,,r8   c                 "   ddl m} ddd} ||      }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      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}}y)u&   enabled: True인 dict → True 반환.r   rR   activeTnamer   r   z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} is %(py6)srS   r   r<   r   r   r   assert %(py8)sr>   N
r    rS   r#   r$   r&   r'   r(   r%   r)   r*   r,   rS   r   r0   rC   @py_assert4r5   @py_format9s           r6   7test_is_pipeline_enabled_returns_true_when_enabled_truezMTestIsPipelineEnabled.test_is_pipeline_enabled_returns_true_when_enabled_trueb   s    >$6"8,44,4444,444444"444"44444484448444,4444444444r8   c                 "   ddl m} ddd} ||      }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      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}}y)u(   enabled: False인 dict → False 반환.r   rR   inactiveFrX   r   rZ   rS   r   r[   r\   r>   Nr]   r^   s           r6   9test_is_pipeline_enabled_returns_false_when_enabled_falsezOTestIsPipelineEnabled.test_is_pipeline_enabled_returns_false_when_enabled_falsei   s    >&59"8,55,5555,555555"555"55555585558555,5555555555r8   c                 "   ddl m} ddd} ||      }d}||u }|st        j                  d|fd||f      d	t	        j
                         v st        j                  |      rt        j                  |      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}}y)u5   enabled 키가 없는 dict → 기본값 True 반환.r   rR   zlegacy-no-fielddaily)rY   scheduleTr   rZ   rS   r   r[   r\   r>   Nr]   r^   s           r6   7test_is_pipeline_enabled_defaults_true_when_key_missingzMTestIsPipelineEnabled.test_is_pipeline_enabled_defaults_true_when_key_missingp   s    >-7C"8,44,4444,444444"444"44444484448444,4444444444r8   c                    ddl m} i } ||      }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      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}}y)uG   빈 dict → 기본값 True 반환 (예외 발생하지 않아야 함).r   rR   Tr   rZ   rS   r   r[   r\   r>   Nr]   r^   s           r6   (test_is_pipeline_enabled_with_empty_dictz>TestIsPipelineEnabled.test_is_pipeline_enabled_with_empty_dictw   s    >"8,44,4444,444444"444"44444484448444,4444444444r8   c                 h   ddl m} ddd}ddd} ||      } ||      }t        |      }|t        u }|s/t	        j
                  d|fd	|t        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                  |      dt        j                         v st	        j                  t              rt	        j                  t              nddz  }dd|iz  }	t        t	        j                  |	            dx}}t        |      }|t        u }|s/t	        j
                  d|fd	|t        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                  |      dt        j                         v st	        j                  t              rt	        j                  t              nddz  }dd|iz  }	t        t	        j                  |	            dx}}y)uX   반환값이 반드시 bool 타입이어야 함 (truthy/falsy 값이 아닌 True/False).r   rR   aTrX   bFr   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} is %(py5)stype	result_onbool)r<   r   r   r   zassert %(py7)spy7N
result_off)r    rS   rn   rp   r#   r$   r&   r'   r(   r%   r)   r*   )
r,   rS   pipeline_onpipeline_offro   rr   r0   r_   r2   @py_format8s
             r6   *test_is_pipeline_enabled_returns_bool_typez@TestIsPipelineEnabled.test_is_pipeline_enabled_returns_bool_type~   sg   >"t4 #6'4	(6
I&$&&&&$&&&&&&t&&&t&&&&&&I&&&I&&&&&&&&&$&&&$&&&&&&&J'4''''4''''''t'''t''''''J'''J'''''''''4'''4'''''''r8   )r   N)
rJ   rK   rL   rM   rU   ra   rd   rh   rj   rv   rN   r8   r6   rP   rP   V   s%    
-5655(r8   rP   )rM   builtinsr&   _pytest.assertion.rewrite	assertionrewriter#   syspathlibr   pytestyamlpathinsertr   rP   rN   r8   r6   <module>r      sF     
    ( )85 85|3( 3(r8   