
    Si                         d Z ddlZddlmZ ej                  j                  dd       dZdZdZded	dfd
Z	ddede
d	efdZd Zd Zd Zd Zd Zd Zd Zy)u  
통합 테스트: _create_task_docs + three_docs_check.verify E2E 라이프사이클
task-1837_5.1 - 엔키 작성

흐름:
1. _create_task_docs로 3문서 생성 (mock 템플릿 사용)
2. 생성된 파일 존재 확인
3. three_docs_check.verify()로 검증 → WARN (status=draft)
4. plan.md status를 completed로 수정 후 → PASS
5. 디렉토리 없으면 → SKIP
6. 파일 누락 시 → FAIL
    N)Pathz/home/jay/workspaceu   ---
task_id: {task_id}
type: plan
scope: task
created: {date}
updated: {date}
status: draft
---

# 계획서: {task_id}
## 목표
테스트용 계획서
## 범위
테스트 범위
## 검증 기준
테스트 기준
u   ---
task_id: {task_id}
type: context
scope: task
created: {date}
updated: {date}
status: draft
---

# 맥락 노트: {task_id}
## 결정 근거
테스트 결정 근거
u   ---
task_id: {task_id}
type: checklist
scope: task
created: {date}
updated: {date}
status: draft
---

# 체크리스트: {task_id}
## Phase 1
- [x] A. 작업 항목 완료
- [x] B. 작업 항목 완료
tmp_pathreturnc                     | dz  dz  dz  }|j                  dd       |dz  j                  t        d       |d	z  j                  t        d       |d
z  j                  t        d       y)uA   tmp_path 아래 템플릿 디렉토리와 파일을 생성한다.prompts	templatesz	task-docsTparentsexist_okzplan.template.mdutf-8encodingzcontext-notes.template.mdzchecklist.template.mdN)mkdir
write_text_PLAN_TEMPLATE_CONTEXT_TEMPLATE_CHECKLIST_TEMPLATE)r   tmpl_dirs     W/home/jay/workspace/.worktrees/task-2117-dev1/tests/integration/test_3docs_lifecycle.py_setup_templatesr   G   su    )#k1K?HNN4$N/""..~.P++778IT[7\''334GRY3Z    task_idc                     ddl }||j                  |d|        n| |_        |j                  |d      }|J d       |S )ue   dispatch._create_task_docs를 tmp_path WORKSPACE로 호출하고 결과 디렉토리를 반환한다.r   N	WORKSPACE   )levelu&   _create_task_docs가 None을 반환함)dispatchsetattrr   _create_task_docs)r   r   monkeypatch_dresults        r   _create_docsr#   P   sP    BX6!!'!3FGGGMr   c                     t        |        d}t        | ||      }|dz  j                         sJ d       |dz  j                         sJ d       |dz  j                         sJ d       y)	u_   _create_task_docs 호출 후 plan.md, context-notes.md, checklist.md가 생성되어야 한다.z	task-9001plan.mdu   plan.md 미생성zcontext-notes.mdu   context-notes.md 미생성checklist.mdu   checklist.md 미생성N)r   r#   exists)r   r    r   docs_dirs       r   +test_create_task_docs_generates_three_filesr)   _   su    XGHg{;Hy ((*?,??*))113Q5QQ3~%--/I1II/r   c                     t        |        d}t        | ||      }|dz  j                  d      }d|vsJ d       d|vsJ d       ||v sJ d	| d
       y)u_   생성된 파일 내용에서 {task_id}와 {date} 플레이스홀더가 치환되어야 한다.z	task-9002r%   r   r   z	{task_id}u1   plan.md에 {task_id} 플레이스홀더 미치환z{date}u.   plan.md에 {date} 플레이스홀더 미치환u   plan.md에 task_id(u   ) 미포함N)r   r#   	read_text)r   r    r   r(   plan_contents        r   +test_create_task_docs_replaces_placeholdersr-   j   sz    XGHg{;Hy(33W3ELl*_,__*<'Y)YY'l"N&9'+$NN"r   c                     t        |        d}t        | ||       ddlm}  ||t	        |             }|d   dk(  sJ d|d    d|d	           d
|d	   j                         v sd|d	   j                         v sJ yy)uB   생성 직후(status=draft) verify 결과는 WARN이어야 한다.z	task-9003r   verifyr   	workspacestatusWARNu   WARN 기대, 실제:  - messagedraftwarnN)r   r#   'teams.shared.verifiers.three_docs_checkr0   strlower)r   r    r   r0   r"   s        r   4test_three_docs_verify_returns_warn_for_draft_statusr<   x   s    XG7K0>Gs8}=F(v%g)>vh?O>PPSTZ[dTeSf'gg%fY'--//6VI=N=T=T=V3VVV3V/r   c                    t        |        d}t        | ||      }|dz  }|j                  d      }|j                  ddd      }|j	                  |d       dd	lm}  ||t        |       
      }|d   dk(  sJ d|d    d|d           y)uP   plan.md status를 completed로 수정한 후 verify 결과는 PASS여야 한다.z	task-9004r%   r   r   zstatus: draftzstatus: completed   r   r/   r1   r3   PASSu   PASS 기대, 실제: r5   r6   N)r   r#   r+   replacer   r9   r0   r:   )	r   r    r   r(   	plan_pathcontentupdatedr0   r"   s	            r   7test_three_docs_verify_returns_pass_after_status_updaterD      s    XGHg{;H 9$I!!7!3Gooo/BAFG73>Gs8}=F(v%g)>vh?O>PPSTZ[dTeSf'gg%r   c                 `    ddl m}  |dt        |             }|d   dk(  sJ d|d           y)	uH   3문서 디렉토리가 없으면 verify 결과는 SKIP이어야 한다.r   r/   ztask-nonexistent-99999r1   r3   SKIPu   SKIP 기대, 실제: N)r9   r0   r:   )r   r0   r"   s      r   5test_three_docs_verify_returns_skip_when_no_directoryrG      s<    >4HNF(v%Q)>vh?O>P'QQ%r   c                     t        |        d}t        | ||      }|dz  j                          ddlm}  ||t        |             }|d   dk(  sJ d|d           d|d	   v sJ y
)u@   checklist.md가 없으면 verify 결과는 FAIL이어야 한다.z	task-9005r&   r   r/   r1   r3   FAIL   FAIL 기대, 실제: r6   N)r   r#   unlinkr9   r0   r:   )r   r    r   r(   r0   r"   s         r   5test_three_docs_verify_returns_fail_when_file_missingrL      s|    XGHg{;H &&(>Gs8}=F(v%Q)>vh?O>P'QQ%VI....r   c                     d}| dz  dz  dz  |z  }|j                  dd       ddlm}  ||t        |       	      }|d
   dk(  sJ d|d
           y)uU   3문서 디렉토리가 있지만 파일이 하나도 없으면 FAIL이어야 한다.z	task-9006memoryplanstasksTr	   r   r/   r1   r3   rI   rJ   N)r   r9   r0   r:   )r   r   r(   r0   r"   s        r   :test_three_docs_verify_returns_fail_when_all_files_missingrQ      si    G("W,w6@HNN4$N/>Gs8}=F(v%Q)>vh?O>P'QQ%r   )N)__doc__syspathlibr   pathinsertr   r   r   r   r:   r#   r)   r-   r<   rD   rG   rL   rQ    r   r   <module>rX      s      ( )&  "[t [ [
4 
# 
D 
J	O
Wh(R/ 
Rr   