
    i6$                     <   d Z ddlZddlZddlZddlmZ ddlmZ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  G d d      Z G d	 d
      Z G d d      Zy)uf   
test_composite_prompt.py

build_composite_prompt() 및 관련 함수 테스트 (아르고스 작성)
    N)Path)patch	MagicMockWORKSPACE_ROOTz/home/jay/workspacec                   (    e Zd ZdZd Zd Zd Zd Zy)TestLoadLogicalTeamAgentsu%   _load_logical_team_agents() 테스트c                 @    t         j                  j                          y)u"   각 테스트 전 캐시 초기화Ntp_TEAM_AGENT_CACHEclearselfs    L/home/jay/workspace/.worktrees/task-2116-dev1/tests/test_composite_prompt.pysetup_methodz&TestLoadLogicalTeamAgents.setup_method   s    
""$    c                 Z   dddddid}|dz  dz  }|j                  d	
       |dz  j                  t        j                  |      d       t	        j
                  t        dt        |            5  t        j                  d      }d|v sJ d|d   v sJ 	 ddd       y# 1 sw Y   yxY w)u.   org-details JSON 파일이 존재하면 로드zmarketing-teamapollo	   아폴론u   콘텐츠 크리에이터)nameroleteam_idmembers_detailmemoryorg-detailsTparentszmarketing-team.jsonutf-8encodingr   	marketingr   N	mkdir
write_textjsondumpsr   objectr   str_load_logical_team_agents)r   tmp_path	team_data
detail_dirresults        r   test_loads_existing_jsonz2TestLoadLogicalTeamAgents.test_loads_existing_json   s     ('+Gb)cd
	 (=8
&	+	+77

98MX_7`\\".H> 	811+>F#v---v&67777	8 	8 	8s   2%B!!B*c                 h   di d}|dz  dz  }|j                  d       |dz  j                  t        j                  |      d	       t	        j
                  t        d
t        |            5  t        j                  d      }t        j                  d      }||u sJ 	 ddd       y# 1 sw Y   yxY w)u6   같은 팀을 두 번 로드하면 캐시에서 반환zdesign-teamr   r   r   Tr   zdesign-team.jsonr   r    r   designNr#   )r   r+   r,   r-   result1result2s         r   test_caches_resultz,TestLoadLogicalTeamAgents.test_caches_result,   s     -D	(=8
&	(	(44TZZ	5JU\4]\\".H> 	&228<G228<Gg%%%	& 	& 	&s   -1B((B1c                     t        j                  t        dt        |            5  t        j                  d      }d|v sJ 	 ddd       y# 1 sw Y   yxY w)uA   JSON 파일이 없으면 TEAM_INFO에서 members 문자열 사용r   r"   membersN)r   r(   r   r)   r*   )r   r+   r.   s      r   test_fallback_to_team_infoz4TestLoadLogicalTeamAgents.test_fallback_to_team_info8   sJ    \\".H> 	'11+>F&&&	' 	' 	's   AAN)__name__
__module____qualname____doc__r   r/   r4   r7    r   r   r   r      s    /%8
&'r   r   c                   L    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zy)TestBuildCompositePromptu"   build_composite_prompt() 테스트c                 @    t         j                  j                          y )Nr
   r   s    r   r   z%TestBuildCompositePrompt.setup_methodB   s    
""$r   c                     t        j                  t        d      5  t        j                  ddgdd       ddd       y# 1 sw Y   yxY w)u)   허용되지 않은 팀 ID → ValueErroru   허용되지 않은 팀 IDmatchr"   invalidtask-1.1	test descNpytestraises
ValueErrorr   build_composite_promptr   s    r   "test_defense_in_depth_invalid_teamz;TestBuildCompositePrompt.test_defense_in_depth_invalid_teamE   sA    ]]:-IJ 	Y%%{I&>
KX	Y 	Y 	Ys	   ?Ac                     t        j                  t        d      5  t        j                  dgdd       ddd       y# 1 sw Y   yxY w)u   2개 미만 팀 → ValueErroru   2개 이상rA   r"   rD   rE   NrF   r   s    r   !test_defense_in_depth_single_teamz:TestBuildCompositePrompt.test_defense_in_depth_single_teamJ   s=    ]]:]; 	N%%{mZM	N 	N 	Ns	   >Ac                    ddddddii}t        j                  t        dt        |            5  t        j                  t        d|	      5  |d
z  dz  j	                  dd       t        j
                  ddgdd      }d|v sJ d|v sJ d|v sJ d|v sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)u&   2팀 조합 프롬프트 정상 생성r   agent1Agent1Role1sonnet)r   r   modelr   r*   return_valuer   tasksTr   exist_okr"   r1   task-test.1u   테스트 작업u   임시팀장Nr   r(   r   r)   r$   rJ   r   r+   mock_agentsprompts       r    test_two_teams_prompt_generationz9TestBuildCompositePrompt.test_two_teams_prompt_generationO   s     8WxP

 \\".H> 		&\\"9T		& 7*11$1N..h'8JF "V+++ F***&(((v%%%		& 		& 		& 		& 		& 		&s$   B5AB)B5)B2	.B55B>c                 V   di i}t        j                  t        dt        |            5  t        j                  t        d|      5  |dz  dz  j	                  dd       t        j
                  d	d
gddd      }d|v sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)u!   critical 레벨 → 헤더 포함r   r   r*   rT   r   rV   TrW   r"   r1   rY   testcriticallevelz
[CRITICAL]NrZ   r[   s       r   test_critical_level_headerz3TestBuildCompositePrompt.test_critical_level_headera       ',\\".H> 	*\\"9T	* 7*11$1N..h'jF  6)))	* 	* 	* 	* 	* 	*#   B;BBB	BB(c                 V   di i}t        j                  t        dt        |            5  t        j                  t        d|      5  |dz  dz  j	                  dd       t        j
                  d	d
gddd      }d|v sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)u!   security 레벨 → 헤더 포함r   r   r*   rT   r   rV   TrW   r"   r1   rY   r`   securityrb   z
[SECURITY]NrZ   r[   s       r   test_security_level_headerz3TestBuildCompositePrompt.test_security_level_headerl   re   rf   c                 ^   di i}t        j                  t        dt        |            5  t        j                  t        d|      5  |dz  dz  j	                  dd       t        j
                  d	d
gdd      }d|v sJ d|v sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)u6   marketing+design 조합 → 전용 핸드오프 필드r   r   r*   rT   r   rV   TrW   r"   r1   rY   r`      톤앤매너u
   CTA 문구NrZ   r[   s       r   test_handoff_fields_dynamicz4TestBuildCompositePrompt.test_handoff_fields_dynamicw   s    ',\\".H> 	*\\"9T	* 7*11$1N..h'F "V+++6)))	* 	* 	* 	* 	* 	*s#   B#?BB#B 	B##B,c                 R   di i}t        j                  t        dt        |            5  t        j                  t        d|      5  |dz  dz  j	                  dd       t        j
                  g d	d
d      }d|v sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)u-   3팀 조합 → DEFAULT_HANDOFF_FIELDS 사용r   r   r*   rT   r   rV   TrW   )r"   r1   
consultingrY   r`   u   핵심 결정사항NrZ   r[   s       r   +test_default_handoff_fields_for_three_teamszDTestBuildCompositePrompt.test_default_handoff_fields_for_three_teams   s    ',\\".H> 	3\\"9T	3 7*11$1N..5}fF )F222	3 	3 	3 	3 	3 	3s#   B9B BB	BB&c                    di i}t        j                  t        dt        |            5  t        j                  t        d|      5  |dz  dz  j	                  dd       t        j
                  d	d
gdd      }d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)u,   프롬프트에 9개 섹션 키워드 포함r   r   r*   rT   r   rV   TrW   r"   r1   rY   r`   u   작업 지시u   팀별 에이전트u   Phase 관리 프로토콜u   핸드오프 규격zQuality Gateu   보고서 규칙u   토큰 관리u   완료 마무리zfinish-task.shNrZ   r[   s       r   !test_prompt_contains_all_sectionsz:TestBuildCompositePrompt.test_prompt_contains_all_sections   s   ',\\".H> 	.\\"9T	. 7*11$1N..h'F #f,,,(F222.&888(F222!V+++%///"f,,,%///#v---	. 	. 	. 	. 	. 	.s$   CA)C0CC
	CCc                    di i}t        j                  t        dt        |            5  t        j                  t        d|      5  |dz  dz  j	                  dd       t        j
                  d	d
gdd       |dz  dz  dz  }|j                         sJ |j                  d      dk(  sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)u    task_desc가 파일로 저장됨r   r   r*   rT   r   rV   TrW   r"   r1   rY   u   테스트 작업 내용ztask-test.1.mdr   r    N)r   r(   r   r)   r$   rJ   exists	read_text)r   r+   r\   	task_files       r   test_task_file_createdz/TestBuildCompositePrompt.test_task_file_created   s    ',\\".H> 	V\\"9T	V 7*11$1N%%h'8Q !8+g58HHI##%%%&&&8<UUUU	V 	V 	V 	V 	V 	Vs$   CA'B?.C?C	CCN)r8   r9   r:   r;   r   rK   rM   r^   rd   ri   rl   ro   rq   rv   r<   r   r   r>   r>   ?   s:    ,%Y
N
&$	*	*
*	3.&Vr   r>   c                       e Zd ZdZd Zd Zy)TestAssembleCompositePromptu4   _assemble_composite_prompt() 내부 함수 테스트c           	          dddddddiiddd	d
dddiid}t        j                  ddg|dgdddd      }d|v sJ d	|v sJ d|v sJ d|v sJ y)u;   members_detail이 dict인 경우 에이전트 목록 생성r   r   r   u	   콘텐츠haikuzcontent-strategy)r   r   rS   mapped_skill	benzaitenu   벤자이텐u	   템플릿rR   zsatori-cardnewsr"   r1   r"   r1   rk   rD   /tmp/task.mdnormalNr   _assemble_composite_promptr   team_agentsr]   s      r   test_agents_with_dict_membersz9TestAssembleCompositePrompt.test_agents_with_dict_members   s     !{KRYk}~# !.+X`  sD  "E#
 ..(#[>2B$
 f$$$'''!V+++ F***r   c           	      ^    ddiddid}t        j                  ddg|dgdd	d
d      }d|v sJ y)u)   members가 문자열인 경우 (fallback)r6   u"   아폴론, 페이토, 에이레네u   벤자이텐, 비너스r}   r"   r1   rk   rD   r~   r   Nr   r   s      r   test_agents_with_string_membersz;TestAssembleCompositePrompt.test_agents_with_string_members   sW     $%IJ ";<
 ..(#[>2B$
 4v===r   N)r8   r9   r:   r;   r   r   r<   r   r   rx   rx      s    >+.
>r   rx   )r;   r&   ossyspathlibr   unittest.mockr   r   rG   environget
_WORKSPACEr)   pathinsertprompts.team_promptsteam_promptsr   r   r>   rx   r<   r   r   <module>r      s     	 
  * "**..!13HIJ
z?#(("HHOOAs:' !&' &'RmV mV`$> $>r   