
    Si"                     P   d Z ddlZddlZddlmZ ddlZ eej                  j                  dd            Z e	e      ej                  vr"ej                  j                  d e	e             ddlmZmZ ddlmZmZmZ  G d d	      Z G d
 d      Z G d d      Z G d d      Zy)u"  
test_token_optimization_green.py

토큰 최적화 GREEN 4건 (G-1~G-4) 검증 테스트 (task-1269.1)

G-1: 선택적 노하우 로딩 — phase_group 파라미터
G-2: Overview QC 이중 적재 해결
G-3: 에스컬레이션 섹션 중복 제거
G-4: 서브에이전트 결과 구조화
    N)PathWORKSPACE_ROOTz/home/jay/workspace)build_phase_minus1_promptbuild_workflow_overview_prompt)_assemble_composite_prompt_build_design_prompt_build_marketing_promptc                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	TestG1SelectiveKnowhowLoadingu>   G-1: build_phase_minus1_prompt phase_group 파라미터 검증c                 J    t        d      }d|v sJ d|v sJ d|v sJ d|v sJ y)u-   기본값(final)은 3개 파일 모두 포함test-g1knowhow-marketing.mdknowhow-design.mddesign-qc-knowhow.mdu   3개 모두Nr   selfresults     T/home/jay/workspace/.worktrees/task-2117-dev1/tests/test_token_optimization_green.py(test_default_phase_group_loads_all_threezFTestG1SelectiveKnowhowLoading.test_default_phase_group_loads_all_three$   sD    *95%///"f,,,%///&&&    c                 N    t        dd      }d|v sJ d|v sJ d|vsJ d|v sJ y)	u%   copy 그룹은 marketing + qc 2개만r   copyphase_groupr   r   r      2개 모두Nr   r   s     r   test_copy_phase_groupz3TestG1SelectiveKnowhowLoading.test_copy_phase_group,   sF    *9&I%///%///"&000&&&r   c                 N    t        dd      }d|v sJ d|v sJ d|vsJ d|v sJ y)	u$   design 그룹은 design + qc 2개만r   designr   r   r   r   r   Nr   r   s     r   test_design_phase_groupz5TestG1SelectiveKnowhowLoading.test_design_phase_group4   sF    *9(K"f,,,%///%V333&&&r   c                 B    t        dd      }d|v sJ d|v sJ d|v sJ y)u   명시적 final도 3개 포함r   finalr   r   r   r   Nr   r   s     r   test_final_phase_group_explicitz=TestG1SelectiveKnowhowLoading.test_final_phase_group_explicit<   s8    *9'J%///"f,,,%///r   c                 ~    t        j                  t        d      5  t        dd       ddd       y# 1 sw Y   yxY w)u#   잘못된 phase_group은 ValueErroru   유효하지 않은 phase_group)matchr   invalidr   N)pytestraises
ValueErrorr   )r   s    r   test_invalid_phase_group_raisesz=TestG1SelectiveKnowhowLoading.test_invalid_phase_group_raisesC   s4    ]]:-NO 	H%iYG	H 	H 	Hs   3<c                 >    t        d      }d|v sJ d|v sJ d|v sJ y)uF   phase_group 미지정 시 기존 동작과 동일 (3개 파일 포함)r   r   r   r   Nr   r   s     r   test_backward_compatibilityz9TestG1SelectiveKnowhowLoading.test_backward_compatibilityH   s6    *95%///%///"f,,,r   N)
__name__
__module____qualname____doc__r   r   r    r#   r*   r,    r   r   r   r   !   s$    H'''0H
-r   r   c                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
TestG2OverviewQCRemovalu:   G-2: build_workflow_overview_prompt에서 QC 상세 제거c                 2    t        d      }d|vsJ d|vsJ y)u+   카테고리 A 상세가 overview에 없음test-g2zA-01u   글자 겹침Nr   r   s     r   test_no_category_a_detailsz2TestG2OverviewQCRemoval.test_no_category_a_detailsS   (    /	:V###f,,,r   c                 2    t        d      }d|vsJ d|vsJ y)u+   카테고리 B 상세가 overview에 없음r5   zB-01u   CTA 명확성Nr6   r   s     r   test_no_category_b_detailsz2TestG2OverviewQCRemoval.test_no_category_b_detailsY   r8   r   c                 2    t        d      }d|vsJ d|vsJ y)u.   FAIL 카테고리 상세가 overview에 없음r5   TEXT_OVERLAPu   FAIL 사유 카테고리Nr6   r   s     r   test_no_fail_categories_detailsz7TestG2OverviewQCRemoval.test_no_fail_categories_details_   s(    /	:V+++)777r   c                 &    t        d      }d|vsJ y)u/   에스컬레이션 상세가 overview에 없음r5      카피 QC 루프 상한Nr6   r   s     r   test_no_escalation_detailsz2TestG2OverviewQCRemoval.test_no_escalation_detailse   s    /	:(666r   c                 2    t        d      }d|v sJ d|v sJ y)u6   QC 기준은 Phase에서 로딩된다는 안내 포함r5   u	   QC 기준u   각 Phase에서 로딩Nr6   r   s     r   test_qc_loading_note_presentz4TestG2OverviewQCRemoval.test_qc_loading_note_presentj   s(    /	:f$$$'6111r   c                 V    t        d      }d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ y)u   Phase 목록은 유지r5   zPhase -1zPhase 0zPhase 1zPhase 3zPhase 5Nr6   r   s     r   test_phase_list_preservedz1TestG2OverviewQCRemoval.test_phase_list_preservedp   sR    /	:V###F"""F"""F"""F"""r   c                 &    t        d      }d|v sJ y)u   시작 조건은 유지r5   u   제이회장님 승인 필수Nr6   r   s     r   test_start_condition_preservedz6TestG2OverviewQCRemoval.test_start_condition_preservedy   s    /	:.&888r   N)r-   r.   r/   r0   r7   r:   r=   r@   rB   rD   rF   r1   r   r   r3   r3   P   s(    D--87
2#9r   r3   c                   @    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)TestG3EscalationDedupu,   G-3: 에스컬레이션 섹션 중복 제거c                 V    t         dz  dz  dz  }|j                         s
J d|        y)u   외부 파일이 존재memoryspecsescalation-rules.mdz!escalation-rules.md not found at N)	workspaceexists)r   paths     r   !test_escalation_rules_file_existsz7TestG3EscalationDedup.test_escalation_rules_file_exists   s2    8#g-0EE{{}H A$HH}r   c                 v    t         dz  dz  dz  }|j                  d      }d|v sJ d|v sJ d|v sJ d	|v sJ y
)u%   외부 파일에 핵심 규칙 포함rJ   rK   rL   zutf-8)encodingr?   u   디자인 QC 루프 상한u   동일 FAIL 카테고리u   에스컬레이션N)rM   	read_text)r   rO   contents      r   "test_escalation_rules_file_contentz8TestG3EscalationDedup.test_escalation_rules_file_content   s_    8#g-0EE..'.2(G333+w666)W444#w...r   c                 8    ddl m}  |d      }d|v sJ d|vsJ y)u,   Phase 0 프롬프트가 참조 문구 사용r   )build_phase0_prompttest-g3   escalation-rules.md 참조u   카피 QC 루프 상한: 5회N)prompts.image_workflowrW   )r   rW   r   s      r   test_phase0_uses_referencez0TestG3EscalationDedup.test_phase0_uses_reference   s+    >$Y/+v555.f<<<r   c                 .    ddl m}  |dd      }d|v sJ y)u,   Phase 1 프롬프트가 참조 문구 사용r   )build_phase1_promptrX   z/tmp/brief.mdrY   N)rZ   r]   )r   r]   r   s      r   test_phase1_uses_referencez0TestG3EscalationDedup.test_phase1_uses_reference   s    >$Y@+v555r   c                 .    ddl m}  |dd      }d|v sJ y)u,   Phase 2 프롬프트가 참조 문구 사용r   )build_phase2_promptrX   z/tmp/copy.mdrY   N)rZ   r`   )r   r`   r   s      r   test_phase2_uses_referencez0TestG3EscalationDedup.test_phase2_uses_reference       >$Y?+v555r   c                 .    ddl m}  |dd      }d|v sJ y)u,   Phase 3 프롬프트가 참조 문구 사용r   )build_phase3_promptrX   z/tmp/plan.mdrY   N)rZ   rd   )r   rd   r   s      r   test_phase3_uses_referencez0TestG3EscalationDedup.test_phase3_uses_reference   rb   r   c                 0    ddl m}  |ddg      }d|v sJ y)u,   Phase 4 프롬프트가 참조 문구 사용r   )build_phase4_promptrX   /tmp/img.pngrY   N)rZ   rg   )r   rg   r   s      r   test_phase4_uses_referencez0TestG3EscalationDedup.test_phase4_uses_reference   s"    >$Y0@A+v555r   c                 0    ddl m}  |ddg      }d|v sJ y)u.   Phase 3.5 프롬프트가 참조 문구 사용r   )build_phase3_5_promptrX   rh   rY   N)rZ   rk   )r   rk   r   s      r   test_phase3_5_uses_referencez2TestG3EscalationDedup.test_phase3_5_uses_reference   s"    @&y>2BC+v555r   N)r-   r.   r/   r0   rP   rU   r[   r^   ra   re   ri   rl   r1   r   r   rH   rH      s.    6I
/=66666r   rH   c                   "    e Zd ZdZd Zd Zd Zy)TestG4SubagentResultRulesuS   G-4: 복합팀/디자인팀/마케팅팀에 서브에이전트 결과 규칙 포함c                 L    ddl m}  |dddd      }d|v sJ d	|v sJ d
|v sJ y)uD   마케팅팀 프롬프트에 서브에이전트 결과 규칙 포함r   build_prompt	marketingtest-g4	test tasknormalteam_idtask_id	task_desclevel+   서브에이전트(Task tool) 결과 규칙   500자 이내)   FAIL 코드와 사유를 요약에 포함Nprompts.team_promptsrq   r   rq   r   s      r   -test_marketing_prompt_contains_subagent_ruleszGTestG4SubagentResultRules.test_marketing_prompt_contains_subagent_rules   sG    5!	
 =FFF&(((:fDDDr   c                 @    ddl m}  |dddd      }d|v sJ d	|v sJ y
)uD   디자인팀 프롬프트에 서브에이전트 결과 규칙 포함r   rp   r   rs   rt   ru   rv   r{   r|   Nr~   r   s      r   *test_design_prompt_contains_subagent_ruleszDTestG4SubagentResultRules.test_design_prompt_contains_subagent_rules   s9    5!	
 =FFF&(((r   c                 P    ddl m}  |ddgddd      }d	|v sJ d
|v sJ d|v sJ y)uA   복합팀 프롬프트에 서브에이전트 결과 규칙 포함r   )build_composite_promptrr   r   rs   ztest composite taskru   )composite_teamsrx   ry   rz   r{   r|   r}   N)r   r   )r   r   r   s      r   -test_composite_prompt_contains_subagent_ruleszGTestG4SubagentResultRules.test_composite_prompt_contains_subagent_rules   sL    ?'((3+	
 =FFF&(((:fDDDr   N)r-   r.   r/   r0   r   r   r   r1   r   r   rn   rn      s    ]E)Er   rn   )r0   ossyspathlibr   r'   environgetrM   strrO   insertrZ   r   r   r   r   r   r	   r   r3   rH   rn   r1   r   r   <module>r      s   	 
 
   02GHI	y>!HHOOAs9~& ,- ,-^,9 ,9^:6 :6z*E *Er   