
    Nic#                     >   d Z ddlZddlmZ  ee      j                         j                  j                  j                  Z ee      ej                  vr"ej                  j                  d ee             ddlmZmZmZ g dZdZdZd Zd	 Zd
 Zd Zd Zd Zd Zy)u   task-2503 회귀 테스트 파일 1 — schema YAML 형식 + 7 metadata 검증.

회장 §6 회귀 테스트 (파일 1/3):
  - schema YAML 로드 / 7 필드 정의 / parse_topology_metadata / validate_metadata
    N)Path)SCHEMA_PATHparse_topology_metadatavalidate_metadataexpected_files	risk_area
dependencyparallel_policymerge_queue_positionstale_recheck_requiredcherry_pick_alloweda  # task-2503 self-reference spec

```yaml
expected_files:
  - "utils/merge_topology_gate.py"
  - "memory/specs/merge-topology-gate-schema.yml"
  - "tests/regression/test_merge_topology_gate_schema_2503.py"
  - "tests/regression/test_merge_topology_gate_classifier_2503.py"
risk_area: "dispatch_layer"
dependency: "none"
parallel_policy: "serial_only"
merge_queue_position: 1
stale_recheck_required: true
cherry_pick_allowed: false
```
z# Minimal spec

```yaml
expected_files:
  - "foo/bar.py"
risk_area: "verifier_layer"
dependency: "none"
parallel_policy: "parallel_safe"
merge_queue_position: "n/a"
stale_recheck_required: false
cherry_pick_allowed: false
```
c                      ddl } t        j                         sJ dt                t        t        dd      5 }| j	                  |      }ddd       J t        |t              sJ d       y# 1 sw Y   %xY w)u2   SCHEMA_PATH가 존재하고 yaml.safe_load 성공.r   NzSCHEMA_PATH not found: rutf-8encodingz schema YAML must parse to a dict)yamlr   existsopen	safe_load
isinstancedict)r   fdatas      L/home/jay/workspace/tests/regression/test_merge_topology_gate_schema_2503.pytest_schema_yaml_loadsr   D   sw    H#:;-!HH	k3	1 !Q~~a !dD!E#EE!! !s   A//A8c                  >   ddl } t        t        dd      5 }| j                  |      }ddd       dv sJ d       t	        |d   j                               }t        D ]  }||v rJ d|         t        |      d	k\  sJ d
t        |              y# 1 sw Y   kxY w)u;   schema의 fields 키에 7개 필수 metadata 모두 정의.r   Nr   r   r   fieldszschema must have 'fields' keyzschema missing field:    z*schema must define at least 7 fields, got )r   r   r   r   setkeys_SEVEN_REQUIRED_KEYSlen)r   r   r   defined_keyskeys        r   %test_schema_has_seven_required_fieldsr'   R   s    	k3	1 !Q~~a ! t<<<tH~**,-L# Cl"B&<SE$BB"C |!c%OPST`PaOb#cc!! !s   BBc                      t        t              } t        | t              sJ d       t        D ]  }|| v rJ d|         y)u>   task-2503.md spec을 파싱하면 7 키 모두 dict에 추출.z*parse_topology_metadata must return a dictz%parse_topology_metadata missing key: N)r   TASK_2503_YAML_BLOCKr   r   r#   )metadatar&   s     r   0test_parse_topology_metadata_extracts_seven_keysr+   e   sM    &';<Hh%S'SS%# NhM"Gu MMN    c                  V    t        t              } t        |       }|g k(  s
J d|        y)uF   task-2503.md spec의 metadata는 validate_metadata 통과 (errors=[]).z,validate_metadata should return [] but got: N)r   r)   r   r*   errorss     r   /test_validate_metadata_passes_for_complete_specr0   q   s0    &';<Hx(FR<PGxPP<r,   c                  `    t        i       } | sJ d       dgdd}t        |      }|sJ d       y)uD   빈 dict 또는 일부 키 누락 시 errors가 비어있지 않음.z"empty metadata must produce errors
foo/bar.pyverifier_layer)r   r	   z$partial metadata must produce errorsNr   )errors_emptypartial_metaerrors_partials      r   -test_validate_metadata_fails_for_missing_keysr8   {   sG     %R(L===< (.%L
 '|4NAAA>r,   c                  H    dgddddddd} t        |       }|s
J d|        y	)
u8   parallel_policy='unknown'이면 errors에 항목 존재.r2   r3   noneunknown_policyzn/aFr   z2invalid parallel_policy must produce errors, got: Nr4   r.   s     r   >test_validate_metadata_fails_for_invalid_parallel_policy_valuer<      sC     (.%+ %"'$H x(FPGxPP6r,   c                  H    dgddddddd} t        |       }|s
J d|        y	)
u8   parallel_safe인데 merge_queue_position=1이면 errors.r2   r3   r:   parallel_safe   Fr   zJparallel_safe with integer merge_queue_position must produce errors, got: Nr4   r.   s     r   Ktest_validate_metadata_fails_when_parallel_safe_with_integer_queue_positionr@      sL     (.%* !"'$H x(F 	x	6r,   )__doc__syspathlibr   __file__resolveparent	WORKSPACEstrpathinsertutils.merge_topology_gater   r   r   r#   r)   MINIMAL_PARALLEL_SAFE_SPECr   r'   r+   r0   r8   r<   r@    r,   r   <module>rN      s   
   N""$++2299	y>!HHOOAs9~&   $ $Fd&NQB&Q$r,   