
    NiM                    <   d Z ddlmZ ddlZddlmZ ddlZddlZddlmZ  ed      Z	ddd	d
dddgg g i dddZ
 ej                  d      d'd       Z ej                  d      d(d       Zd)dZd*dZej                   j#                  dg d      d+d       Zd*dZd*dZd*dZej                   j#                  dg d      d,d       Zej                   j#                  dg d       d-d!       Zej                   j#                  d"g d#      d.d$       Zd*d%Zd*d&Zy)/us  tests/handoff/test_schema.py
handoff-schema.json 스키마 검증 테스트:
- test_schema_self_validity: Draft202012Validator.check_schema() PASS
- test_schema_required_fields: 필수 필드 누락 시 validation 실패
- test_schema_oneof_pending: pending_work + pending_work_path 동시 존재 시 fail
- test_schema_pattern_task_id: 잘못된 task-id 패턴 → fail
    )annotationsN)PathDraft202012ValidatorzN/home/jay/workspace/.worktrees/task-2454-dev4/memory/specs/handoff-schema.json	task-2454z1.0dev4ztask/task-2454-dev4abc1234def5678zscripts/start_task_guard.py	interruptz2026-05-05T12:00:00Z)task_idschema_versionprevious_botcurrent_branchbase_shahead_shachanged_pathsallowed_pathsforbidden_pathstest_resultshandoff_reason
created_atmodule)scopec                     t         j                         sJ dt                 t        j                  t         j	                  d            S )u   handoff-schema.json 로드.u   스키마 파일 없음: zutf-8)encoding)SCHEMA_PATHexistsjsonloads	read_text     J/home/jay/workspace/.worktrees/task-2467-dev6/tests/handoff/test_schema.pyschemar$   $   s@     J#<[M!JJ::k++W+=>>r"   c                    t        |       S )u"   Draft202012Validator 인스턴스.r   )r$   s    r#   	validatorr&   +   s      ''r"   c                    	 t        j                  |        y# t        j                  $ r"}t	        j
                  d|        Y d}~yd}~ww xY w)uE   스키마 자체가 유효한 JSON Schema Draft 2020-12인지 확인.u    스키마 자체 검증 실패: N)r   check_schema
jsonschemaSchemaErrorpytestfail)r$   es     r#   test_schema_self_validityr.   5   sB    <))&1!! <6qc:;;<s    AAAc                    t        | j                  t                    }|r"J d|D cg c]  }|j                   c}        yc c}w )uI   유효한 기본 데이터가 스키마 검증을 통과하는지 확인.u#   유효한 데이터 검증 실패: N)listiter_errors
VALID_BASEmessage)r&   errorsr-   s      r#   test_schema_valid_baser5   A   sB    )''
34FZ<QW=XAaii=X<YZZ:v=Xs   Amissing_fieldc                v    t        t              }||= t        | j                  |            }|sJ d| d       y)u8   필수 필드 누락 시 스키마 검증 실패 확인.u   필수 필드 'u(   ' 누락인데 검증 통과 (비정상)Ndictr2   r0   r1   )r&   r6   datar4   s       r#   test_schema_required_fieldsr;   K   sB      
D])''-.F\_]O3[\\6r"   c                |    t        t              }d|d<   d|d<   t        | j                  |            }|sJ d       y)uA   pending_work + pending_work_path 동시 존재 시 검증 실패.u   잔여 작업 내용pending_work%memory/handoffs/task-2454-pending.txtpending_work_pathuQ   pending_work + pending_work_path 동시 존재인데 검증 통과 (oneOf 위반)Nr8   r&   r:   r4   s      r#   &test_schema_oneof_pending_both_presentrA   e   sH    
D1D GD	)''-.F [6r"   c                    t        t              }d|d<   t        | j                  |            }|r"J d|D cg c]  }|j                   c}        yc c}w )u)   pending_work만 있을 때 검증 통과.u%   잔여 작업 내용 (4000자 이하)r=   u3   pending_work 인라인만 있는데 검증 실패: Nr9   r2   r0   r1   r3   r&   r:   r4   r-   s       r#   %test_schema_oneof_pending_inline_onlyrE   p   sW    
DBD)''-.FjLagMh\]aiiMhLijj:vMh   Ac                    t        t              }d|d<   t        | j                  |            }|r"J d|D cg c]  }|j                   c}        yc c}w )u.   pending_work_path만 있을 때 검증 통과.r>   r?   u.   pending_work_path만 있는데 검증 실패: NrC   rD   s       r#   #test_schema_oneof_pending_path_onlyrH   x   sX    
D GD	)''-.FeG\bHcWXHcGdee:vHcrF   invalid_task_id)task2454z	TASK-2454ztask-abcztask-2454-dev4z  task-2454  ztask- c                z    t        t              }||d<   t        | j                  |            }|sJ d| d       y)u+   잘못된 task-id 패턴 → 검증 실패.r   u   잘못된 task-id 'u-   '인데 검증 통과 (패턴 검증 없음?)Nr8   )r&   rI   r:   r4   s       r#   #test_schema_pattern_task_id_invalidrM      sI     
D%DO)''-.F 
o..[\6r"   valid_task_id)r   ztask-1z
task-99999ztask-2454.1z
task-100.2c                    t        t              }||d<   d| d|d<   t        | j                  |            }|r%J d| d|D cg c]  }|j                   c}        yc c}w )u+   유효한 task-id 패턴 → 검증 통과.r   ztask/z-dev4r   u   유효한 task-id 'u   '인데 검증 실패: NrC   )r&   rN   r:   r4   r-   s        r#   !test_schema_pattern_task_id_validrP      sw     
D#DO$]O59D	)''-.F 
m_,CX^D_STQYYD_C`a:vD_s   A invalid_reason)pausestop	INTERRUPTdonerK   c                z    t        t              }||d<   t        | j                  |            }|sJ d| d       y)u+   잘못된 handoff_reason → 검증 실패.r   u   잘못된 reason 'u   '인데 검증 통과Nr8   )r&   rQ   r:   r4   s       r#   "test_schema_invalid_handoff_reasonrW      sG     
D+D	)''-.FM''77LMM6r"   c                r    t        t              }d|d<   t        | j                  |            }|sJ d       y)uT   additionalProperties: false → 정의되지 않은 필드 추가 시 검증 실패.valueunexpected_fielduS   정의되지 않은 필드가 있는데 검증 통과 (additionalProperties 위반)Nr8   r@   s      r#   $test_schema_no_additional_propertiesr[      s:    
D&D	)''-.Fhhh6r"   c                r    t        t              }d|d<   t        | j                  |            }|sJ d       y)u1   pending_work가 4000자 초과 시 검증 실패.  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr=   uB   4000자 초과 pending_work인데 검증 통과 (maxLength 위반)Nr8   r@   s      r#   "test_schema_pending_work_maxlengthr^      s9    
D%D)''-.FWWW6r"   )returnr9   )r$   r9   r_   'Draft202012Validator')r$   r9   )r&   r`   )r&   r`   r6   str)r&   r`   rI   ra   )r&   r`   rN   ra   )r&   r`   rQ   ra   )__doc__
__future__r   r   pathlibr   r)   r+   r   r   r2   fixturer$   r&   r.   r5   markparametrizer;   rA   rE   rH   rM   rP   rW   r[   r^   r!   r"   r#   <module>rh      sm   #     +cd +34!(
  h?  ? h(  (<[  + ]]kf * -   + 		  ) , NNiXr"   