
    Oi                         d Z ddlZddlmc m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 G d d      Z G d d	      Z G d
 d      Z G d d      Zy)u   task-1037.1: 디자인 작업 제한 규칙 테스트

team_prompts.py와 DIRECT-WORKFLOW.md에 추가된 디자인 금지 규칙을 검증합니다.
    N)PathWORKSPACE_ROOTz/home/jay/workspacec                       e Zd ZdZej
                  defd       ZdeddfdZdeddfdZ	deddfdZ
deddfd	Zdd
ZddZddZy) TestTeamPromptsDesignRestrictionu2   team_prompts.py 디자인 제한 규칙 테스트.returnc                 8    t         dz  }|j                  d      S )u%   team_prompts.py 파일 내용 로드.prompts/team_prompts.pyutf-8encoding
_WORKSPACE	read_textselfpaths     @/home/jay/workspace/tests/test_task_1037_1_design_restriction.pyteam_prompts_contentz5TestTeamPromptsDesignRestriction.team_prompts_content   s      55~~w~//    r   Nc                 z   d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      nddz  }t        j                  d      dz   d|iz  }t        t        j                  |            d	x}}y	)
uA   _build_direct_prompt에 디자인 금지 규칙이 있어야 함.%   디자인 작업 직접 수행 금지inz%(py1)s in %(py3)sr   py1py3uK   team_prompts.py에 '디자인 작업 직접 수행 금지' 규칙이 없음
>assert %(py5)spy5N	
@pytest_ar_call_reprcompare	_saferepr@py_builtinslocals_should_repr_global_name_format_assertmsgAssertionError_format_explanationr   r   @py_assert0@py_assert2@py_format4@py_format6s         r   )test_direct_prompt_has_design_restrictionzJTestTeamPromptsDesignRestriction.test_direct_prompt_has_design_restriction   s     4	Y37KK	YGXGX	Y37K	Y 	YOXy 4	Y 	YRXRX	Y 	Y@X@X 8L	Y 	YOXy 8L	Y 	YGXGXX	Y 	Y 	YEXEX	Y 	Yr   c                 z   d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      nddz  }t        j                  d      dz   d|iz  }t        t        j                  |            d	x}}y	)
uD   _build_direct_prompt에 디자인팀 호출 명시가 있어야 함.   디자인팀 호출 필요r   r   r   r   u@   team_prompts.py에 '디자인팀 호출 필요' 문구가 없음r   r   Nr    r*   s         r   'test_direct_prompt_mentions_design_teamzHTestTeamPromptsDesignRestriction.test_direct_prompt_mentions_design_team   s    +  	H+/CC  	H  	H  	H+/C  	H  	H  	H+  	H  	H  	H  	H  	H  	H/C  	H  	H  	H/C  	H  	H  	H  	H  FH  	H  	H  	H  	H  	H  	Hr   c                 `   g }d}||v }|}|rd}||v }|}|rd}||v }	|	}|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      nddz  }
dd	|
iz  }|j                  |       |rt        j                  dfd
|f      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      nddz  }dd|iz  }|j                  |       |rt        j                  d	fd|f      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      nddz  }dd|iz  }|j                  |       t        j                  |d      i z  }t        j                  d      dz   d|iz  }t        t        j                  |            dx}x}x}x}x}x}x}}	y)uL   _build_direct_prompt에서 satori/gemini/hybrid 스킬 호출 금지 명시.satorigeminihybridr   )z%(py3)s in %(py5)sr   )r   r   z%(py7)spy7)z%(py10)s in %(py12)s)py10py12z%(py14)spy14)z%(py17)s in %(py19)s)py17py19z%(py21)spy21r   u?   team_prompts.py에 satori/gemini/hybrid 스킬 언급이 없음z
>assert %(py24)spy24N)r!   r"   r#   r$   r%   r&   append_format_boolopr'   r(   r)   )r   r   @py_assert1r,   @py_assert4r+   @py_assert9@py_assert11@py_assert16@py_assert18r.   @py_format8@py_format13@py_format15@py_format20@py_format22@py_format23@py_format25s                     r   !test_direct_prompt_forbids_skillszBTestTeamPromptsDesignRestriction.test_direct_prompt_forbids_skills#   sL   	M	M,,	M19	M19=Q1Q	MV^	MV^bvVv	M 	M;L;L	M,	M 	MCL9 	M 	MFLf	M 	M4L4L -	M 	MCL9 -	M 	M 	MFLf	MFL	M;L;L	M19=Q	M 	MCL9 2:	M 	MFLf	M 	M4L4L >R	M 	MCL9 >R	M 	M 	MFLf	MFL	M;L;L	MV^bv	M 	MCL9 W_	M 	MFLf	M 	M4L4L cw	M 	MCL9 cw	M 	M 	MFLf	MFL	M>Ln	M 	M;L;LL	M 	M 	M9L9L	M 	M 	M 	Mr   c                    t        j                  d|t         j                        }|s{t        j                  d      dz   ddt        j                         v st        j                  |      rt        j                  |      ndiz  }t        t        j                  |            |j                  d      }d}||v }|st        j                  d|fd	||f      t        j                  |      d
t        j                         v st        j                  |      rt        j                  |      nd
dz  }t        j                  d      dz   d|iz  }t        t        j                  |            dx}}y)u>   _build_glm_prompt에 디자인 금지 규칙이 있어야 함.z#def _build_glm_prompt.*?(?=def |\Z)u-   _build_glm_prompt 함수를 찾을 수 없음z
>assert %(py0)spy0glm_prompt_matchr   r   r   r   glm_prompt_coder   uM   _build_glm_prompt에 '디자인 작업 직접 수행 금지' 규칙이 없음r   r   N)researchDOTALLr!   r'   r$   r%   r&   r#   r(   r)   groupr"   )	r   r   rQ   @py_format1rR   r+   r,   r-   r.   s	            r   &test_glm_prompt_has_design_restrictionzGTestTeamPromptsDesignRestriction.test_glm_prompt_has_design_restriction)   s&    99%KMaceclclmPP!PPPPPPPPPPPPPPP*0033	[3F	[IZIZ	[3	[ 	[QZQZ 4	[ 	[TZTZ	[ 	[BZBZ 8G	[ 	[QZQZ 8G	[ 	[IZIZZ	[ 	[ 	[GZGZ	[ 	[r   c                     	 ddl m}m} d}|s8ddt        j                  |      iz  }t        t        j                  |            d}y# t        $ r"}t        j                  d|        Y d}~yd}~ww xY w)u8   team_prompts.py가 정상적으로 import 되어야 함.r   )	TEAM_INFObuild_promptTzassert %(py1)sr   Nu   team_prompts.py import 실패: )
prompts.team_promptsrZ   r[   r!   r#   r(   r)   	Exceptionpytestfail)r   rZ   r[   r+   @py_format2es         r   test_import_worksz2TestTeamPromptsDesignRestriction.test_import_works4   sL    	?DK4KKK4KKKKKK 	?KK9!=>>	?s   AA	 		A4A//A4c                    ddl m}  |ddddd      }d	}||v }|st        j                  d
|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }t        j                  d      dz   d|iz  }t        t        j                  |            dx}}d}||v }|st        j                  d
|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }t        j                  d      dz   d|iz  }t        t        j                  |            dx}}y)uI   build_prompt() 호출 시 디자인 금지 규칙이 포함되어야 함.r   r[   z	dev1-teamztest-123u   테스트 작업normalcodingteam_idtask_id	task_desclevel	task_typer   r   r   promptr   uR   생성된 프롬프트에 '디자인 작업 직접 수행 금지' 규칙이 없음r   r   Nr1   uG   생성된 프롬프트에 '디자인팀 호출 필요' 문구가 없음r\   r[   r!   r"   r#   r$   r%   r&   r'   r(   r)   r   r[   rm   r+   r,   r-   r.   s          r   'test_build_prompt_generates_design_rulezHTestTeamPromptsDesignRestriction.test_build_prompt_generates_design_rule=   s   5 ?QYamu
 7  	W6&@  	W  	W  	W6&  	W  	W  	W6  	W  	W  	W  	W  	W  	W&  	W  	W  	W&  	W  	W  	W  	W  CW  	W  	W  	W  	W  	W  	W+  	A+v5  	A  	A  	A+v  	A  	A  	A+  	A  	A  	A  	A  	A  	Av  	A  	A  	Av  	A  	A  	A  	A  8A  	A  	A  	A  	A  	A  	Ar   c                    ddl m}  |ddddd      }d	}||v }|st        j                  d
|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }t        j                  d      dz   d|iz  }t        t        j                  |            dx}}y)uJ   GLM 팀 프롬프트에도 디자인 금지 규칙이 포함되어야 함.r   rd   z	dev8-teamztest-456u   GLM 테스트 작업re   rf   rg   r   r   r   rm   r   uL   GLM 프롬프트에 '디자인 작업 직접 수행 금지' 규칙이 없음r   r   Nrn   ro   s          r   %test_glm_prompt_generates_design_rulezFTestTeamPromptsDesignRestriction.test_glm_prompt_generates_design_ruleI   s    5 ?U]eqy
 7  	Q6&@  	Q  	Q  	Q6&  	Q  	Q  	Q6  	Q  	Q  	Q  	Q  	Q  	Q&  	Q  	Q  	Q&  	Q  	Q  	Q  	Q  CQ  	Q  	Q  	Q  	Q  	Q  	Qr   r   N)__name__
__module____qualname____doc__r^   fixturestrr   r/   r2   rN   rX   rb   rp   rr    r   r   r   r      s    <^^0c 0 0
Yc YVZ YHC HTX HMc Md M	[3 	[SW 	[?
A	Qr   r   c                   J    e Zd ZdZej
                  defd       ZdeddfdZy)#TestDirectWorkflowDesignRestrictionu5   DIRECT-WORKFLOW.md 디자인 제한 섹션 테스트.r   c                 8    t         dz  }|j                  d      S )u(   DIRECT-WORKFLOW.md 파일 내용 로드.prompts/DIRECT-WORKFLOW.mdr
   r   r   r   s     r   workflow_contentz4TestDirectWorkflowDesignRestriction.workflow_contentX   s      88~~w~//r   r   Nc                 z   d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      nddz  }t        j                  d      dz   d|iz  }t        t        j                  |            d	x}}y	)
u)   디자인 제한 섹션이 있어야 함.u   디자인 작업 제한r   r   r   r   u@   DIRECT-WORKFLOW.md에 '디자인 작업 제한' 섹션이 없음r   r   Nr    )r   r   r+   r,   r-   r.   s         r   #test_has_design_restriction_sectionzGTestDirectWorkflowDesignRestriction.test_has_design_restriction_section^   s    (  	A(,<<  	A  	A  	A(,<  	A  	A  	A(  	A  	A  	A  	A  	A  	A,<  	A  	A  	A,<  	A  	A  	A  	A  ?A  	A  	A  	A  	A  	A  	Ar   )	rt   ru   rv   rw   r^   rx   ry   r   r   rz   r   r   r|   r|   U   s8    ?^^0# 0 0
AC AD Ar   r|   c                   j    e Zd ZdZej
                  defd       ZdeddfdZdeddfdZ	deddfdZ
y)	TestDesignTeamModelu)   design-team.json 모델 설정 테스트.r   c                     ddl }t        dz  }t        |d      5 }|j                  |      cddd       S # 1 sw Y   yxY w)u   design-team.json 파일 로드.r   N#memory/org-details/design-team.jsonr
   r   )jsonr   openload)r   r   r   fs       r   design_team_dataz$TestDesignTeamModel.design_team_dataf   s>     	AA$) 	 Q99Q<	  	  	 s   6?r   Nc                    |j                  di       j                  di       }|j                  dd      }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j
                  |      rt        j                  |      ndt        j                  |      dz  }t        j                  d	|       d
z   d|iz  }t        t        j                  |            dx}}y)u%   비너스 모델이 gemini여야 함.members_detailvenus-delegatemodel r5   ==z%(py0)s == %(py3)srP   r   u(   비너스 모델이 'gemini'이 아님: r   r   N
getr!   r"   r$   r%   r&   r#   r'   r(   r)   )r   r   venusr   r,   rA   r-   r.   s           r   test_venus_model_is_geminiz.TestDesignTeamModel.test_venus_model_is_geminio   s     $$%5r:>>?OQST		'2& Tu TTTuTTTTTTuTTTuTTTTTT$LUG"TTTTTTTr   c                    |j                  di       j                  di       }|j                  dd      }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j
                  |      rt        j                  |      ndt        j                  |      dz  }t        j                  d	|       d
z   d|iz  }t        t        j                  |            dx}}y)u(   비너스 엔진이 google이어야 함.r   r   enginer   googler   r   r   u(   비너스 엔진이 'google'이 아님: r   r   Nr   )r   r   r   r   r,   rA   r-   r.   s           r   test_venus_engine_is_googlez/TestDesignTeamModel.test_venus_engine_is_googleu   s     $$%5r:>>?OQST8R(!Vv!VVVvVVVVVVvVVVvVVVVVV%MfX#VVVVVVVr   c                    g d}|D ]  }||v }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j
                  |      nddt        j                         v st        j                  |      rt        j
                  |      nddz  }t        j                  d| d      d	z   d
|iz  }t        t        j                  |            d} y)u,   design-team.json 구조가 유효해야 함.)rh   	team_nameleadr   r   )z%(py0)s in %(py2)skeyr   )rP   py2u    design-team.json에 필수 키 'u   '가 없음z
>assert %(py4)spy4N)	r!   r"   r$   r%   r&   r#   r'   r(   r)   )r   r   required_keysr   rA   @py_format3@py_format5s          r    test_design_team_structure_validz4TestDesignTeamModel.test_design_team_structure_valid{   s    J  	`C**___3*______3___3______*___*____.NseS^,_______	`r   )rt   ru   rv   rw   r^   rx   dictr   r   r   r   rz   r   r   r   r   c   sd    3^^ $    U4 UD UWD WT W` `$ `r   r   c                       e Zd ZdZddZy)TestIntegrationu   통합 테스트.Nc                    t        t        dz        t        t        dz        t        t        dz        g}|D ]6  }t        |      }|j                  } |       }|st	        j
                  d|       dz   dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      dz  }t        t	        j                  |            dx}}|j                  d	      r	 |j                  d
      rddlm} |j                  d      sddl}		 t'        |d      5 }
|	j)                  |
       ddd       9 y# t        $ r&}t!        j"                  d| d|        Y d}~ed}~ww xY w# 1 sw Y   ?xY w# |	j*                  $ r&}t!        j"                  d| d|        Y d}~d}~ww xY w)u@   수정된 파일들이 구문 에러 없이 로드되어야 함.r	   r~   r   u   파일이 존재하지 않음: zC
>assert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}r   )rP   r   r   Nz.pyzteam_prompts.pyr   rd   u   Python 파일 로드 실패 (z): z.jsonr
   r   u   JSON 파싱 실패 ()ry   r   r   existsr!   r'   r$   r%   r&   r#   r(   r)   endswithr\   r[   r]   r^   r_   r   r   r   JSONDecodeError)r   files_to_check	file_pathr   rA   @py_assert3r   r[   ra   r   r   s              r   test_no_syntax_errorsz%TestIntegration.test_no_syntax_errors   s    
667
99:
BBC
 ( 	JI	?D;;O;=O=OO$CI;"OOOOOOO4OOO4OOO;OOO=OOOOOO !!%(S ))*;<E
 ##G,JdW5 %		!%#	J ! SKK"?	{#aS QRRS% %++ JKK"6ykQC HIIJsH   E3F1F%'F13	F"<FF"%F.	*F11G& G!!G&rs   )rt   ru   rv   rw   r   rz   r   r   r   r      s    Jr   r   )rw   builtinsr$   _pytest.assertion.rewrite	assertionrewriter!   osrS   pathlibr   r^   environr   r   r   r|   r   r   rz   r   r   <module>r      sj   
  	 	  "**..!13HIJ
CQ CQLA A` `>J Jr   