
    i                         d Z ddlZddlmc mZ ddlZej                  j                  dd       ddl
mZ 	 	 	 	 ddZd Zd Zd Zd	 Zd
 Zd Zd Zd Zy)uz   
test_three_docs_check.py - three_docs_check 검증기 테스트

벨레스(Veles) dev6팀 테스터 작성
task-1872_6.4
    Nz /home/jay/workspace/teams/shared)verifyc           	          | dz  dz  dz  |z  }|j                  dd       |dz  j                  d| d| d	| d
d       |dz  j                  d| d| d
d       |dz  j                  d| d| d
d       |S )u,   3문서 디렉토리와 파일 생성 헬퍼memoryplanstasksTparentsexist_okplan.md---
task_id: z 
type: plan
scope: task
status: z
---


utf-8encodingcontext-notes.mdz/
type: context
scope: task
status: active
---

checklist.mdz1
type: checklist
scope: task
status: active
---

)mkdir
write_text)base_dirtask_idplan_status	plan_bodycontext_bodychecklist_bodydocs_dirs          2/home/jay/workspace/tests/test_three_docs_check.py_create_docsr      s     ("W,w6@HNN4$N/ 	%%

 	 
   	  &  ""..

   	  /  **

    	  +  O    c                 V   d}t        | |dddd       t        |t        |             }|d   }d	}||k(  }|slt        j                  d
|fd||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}|d   }d}||k(  }|slt        j                  d
|fd||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}y)ur   Lv.3+ 작업, 3문서 정상 존재 + status=completed + 체크리스트 100% + 플레이스홀더 없음 → PASSz	task-9901	completed   실제 계획 내용입니다.   실제 맥락 내용입니다.u;   - [x] 완료항목1
- [x] 완료항목2
- [x] 완료항목3r   r   r   r   r   	workspacenamethree_docs_check==z%(py1)s == %(py4)spy1py4assert %(py6)spy6NstatusPASSr   r   str
@pytest_ar_call_reprcompare	_safereprAssertionError_format_explanationtmp_pathr   result@py_assert0@py_assert3@py_assert2@py_format5@py_format7s           r   test_pass_complete_docsrA   Q   s    G25V Gs8}=F&>///>/////>////>///////////(%v%v%%%%v%%%%%%v%%%%%%%r   c                 T   d}t        | |ddd       t        |t        |             }|d   }d}||k(  }|slt        j                  d	|fd
||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}|d   }d}||k(  }|slt        j                  d	|fd
||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}y)uC   Lv.3+ 작업, 3문서 존재하지만 plan.md status=draft → WARNz	task-9902draftu/   아직 초안 상태의 계획 내용입니다.'   - [x] 완료항목1
- [x] 완료항목2r   r   r   r$   r&   r'   r(   r*   r+   r.   r/   Nr0   WARNr2   r9   s           r   test_warn_status_draftrG   c   s    GCA Gs8}=F&>///>/////>////>///////////(%v%v%%%%v%%%%%%v%%%%%%%r   c                 4   d}t        |t        |             }|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}y
)uB   3문서 디렉토리 없음 → SKIP (디렉토리 없으면 SKIP)z	task-9903r$   r&   r'   r(   r*   r+   r.   r/   Nr0   SKIPr   r3   r4   r5   r6   r7   r8   r9   s           r   test_fail_missing_directoryrK   t   s    G Gs8}=F&>///>/////>////>///////////(%v%v%%%%v%%%%%%v%%%%%%%r   c                 4   d}t        |t        |             }|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}y
)u)   Lv.2 작업, 디렉토리 없음 → SKIPztask-9904-lv2r$   r&   r'   r(   r*   r+   r.   r/   Nr0   rI   rJ   r9   s           r   test_skip_no_docs_dirrM      s    G Gs8}=F&>///>/////>////>///////////(%v%v%%%%v%%%%%%v%%%%%%%r   c                    d}| dz  dz  dz  |z  }|j                  dd       |dz  j                  dd	
       |dz  j                  dd	
       |dz  j                  dd	
       t        |t        |             }|d   }d}||k(  }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            dx}x}}|d   }d}||k(  }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            dx}x}}y)u*   YAML frontmatter가 깨진 파일 → FAILz	task-9905r   r   r   Tr   r   uy   ---
task_id: task-9905
type: plan
scope: task
status: completed
이 YAML은 닫히지 않습니다

실제 계획 내용
r   r   r   uZ   ---
task_id: task-9905
type: context
scope: task
status: active
---

실제 맥락 내용
r   uZ   ---
task_id: task-9905
type: checklist
scope: task
status: active
---

- [x] 완료항목
r$   r&   r'   r(   r*   r+   r.   r/   Nr0   FAIL)	r   r   r   r3   r4   r5   r6   r7   r8   )	r:   r   r   r;   r<   r=   r>   r?   r@   s	            r   test_fail_broken_yamlrP      sS   G("W,w6@HNN4$N/ 	%%	  &  ""..	  /  **	  +  Gs8}=F&>///>/////>////>///////////(%v%v%%%%v%%%%%%v%%%%%%%r   c                 V   d}t        | |dddd       t        |t        |             }|d   }d	}||k(  }|slt        j                  d
|fd||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}|d   }d}||k(  }|slt        j                  d
|fd||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}y)u'   checklist 완료율 50% 미만 → WARNz	task-9906r    r!   r"   uF   - [x] 완료항목1
- [ ] 미완료1
- [ ] 미완료2
- [ ] 미완료3r#   r$   r&   r'   r(   r*   r+   r.   r/   Nr0   rF   r2   r9   s           r   test_warn_low_checklistrR      s    G25b Gs8}=F&>///>/////>////>///////////(%v%v%%%%v%%%%%%v%%%%%%%r   c                 T   d}t        | |ddd       t        |t        |             }|d   }d}||k(  }|slt        j                  d	|fd
||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}|d   }d}||k(  }|slt        j                  d	|fd
||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}y)u9   템플릿 플레이스홀더 그대로인 파일 → WARNz	task-9907r    u-   여기에 [작업 내용]을 입력하세요.rD   rE   r$   r&   r'   r(   r*   r+   r.   r/   Nr0   rF   r2   r9   s           r   test_warn_placeholder_unfilledrT      s    GAA Gs8}=F&>///>/////>////>///////////(%v%v%%%%v%%%%%%v%%%%%%%r   c           	         d}| dz  dz  dz  |z  }|j                  dd       |dz  j                  d| d	d
       |dz  j                  d| dd
       t        |t        |             }|d   }d}||k(  }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            dx}x}}|d   }d}||k(  }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            dx}x}}d}|d   }|j                  }	d}
g } |	|
|      }||v }|st	        j
                  d|fd||f      t	        j                  |      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}
x}}y)!uK   디렉토리는 있지만 파일 1개 누락 (checklist.md 없음) → FAILz	task-9908r   r   r   Tr   r   r   uD   
type: plan
scope: task
status: completed
---

실제 계획 내용
r   r   r   uD   
type: context
scope: task
status: active
---

실제 맥락 내용
r$   r&   r'   r(   r*   r+   r.   r/   Nr0   rO   r   detailsmissing_files)in)zU%(py1)s in %(py12)s
{%(py12)s = %(py6)s
{%(py6)s = %(py4)s.get
}(%(py8)s, %(py10)s)
})r,   r-   r/   py8py10py12zassert %(py14)spy14)
r   r   r   r3   r4   r5   r6   r7   r8   get)r:   r   r   r;   r<   r=   r>   r?   r@   @py_assert5@py_assert7@py_assert9@py_assert11@py_format13@py_format15s                  r   test_fail_missing_filesrd      s   G("W,w6@HNN4$N/ 	%%

 	  &  ""..

 	  /  Gs8}=F&>///>/////>////>///////////(%v%v%%%%v%%%%%%v%%%%%%%GVI.G.22G?GBG2?BGG>GGGGG>GGGG>GGG.GGG2GGG?GGGBGGGGGGGGGGGGr   )r    u   실제 계획 내용u   실제 맥락 내용u   - [x] 완료
- [x] 완료2)__doc__builtins@py_builtins_pytest.assertion.rewrite	assertionrewriter4   syspathinsertverifiers.three_docs_checkr   r   rA   rG   rK   rM   rP   rR   rT   rd    r   r   <module>rp      sg     
 5 6 - $'06|&$&"&&3&l&&&$(Hr   