
    iU                         d Z ddlZddlmZmZ  G d dej
                        Z G d dej
                        Z G d d	ej
                        Ze	d
k(  r ej                          yy)u*   test_mutator.py - mutator 모듈 테스트    N)	MagicMockpatchc                   (    e Zd ZdZd Zd Zd Zd Zy)TestBuildMutationPromptu&   build_mutation_prompt 함수 테스트c                 0    ddl m}m} || _        || _        y )Nr   )MUTATION_PROMPT_TEMPLATEbuild_mutation_prompt)autoresearch.mutatorr   r	   template)selfr   r	   s      X/home/jay/workspace/.worktrees/task-2116-dev1/scripts/autoresearch/tests/test_mutator.pysetUpzTestBuildMutationPrompt.setUp
   s    X%:"0    c                     | j                  ddd      }| j                  d|       | j                  d|       | j                  d|       y)u7   템플릿 변수가 올바르게 삽입되는지 확인u   # 스킬 내용zitems:
  - id: c1u   - 2024-01-01: 규칙 추가)current_skill_mdchecklist_yamlrecent_changelogNr	   assertInr   results     r   test_variables_insertedz/TestBuildMutationPrompt.test_variables_inserted   sO    ++./: , 

 	'0*F33V<r   c                 V    | j                  ddd      }| j                  |t               y)u   문자열 반환 확인mdyamllogN)r	   assertIsInstancestrr   s     r   test_returns_stringz+TestBuildMutationPrompt.test_returns_string   s&    ++D&%@fc*r   c                 N    | j                  ddd      }| j                  d|       y)u.   프롬프트에 구분자 지시 포함 확인r   r   r   z---MODIFIED_SKILL---Nr   r   s     r   *test_prompt_contains_separator_instructionzBTestBuildMutationPrompt.test_prompt_contains_separator_instruction    s%    ++D&%@,f5r   N)__name__
__module____qualname____doc__r   r   r   r!    r   r   r   r      s    01	=+
6r   r   c                   N    e Zd ZdZd ZddZd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zy)TestParseMutationResponseu(   parse_mutation_response 함수 테스트c                     ddl m} || _        y )Nr   )parse_mutation_response)r
   r*   parse)r   r*   s     r   r   zTestParseMutationResponse.setUp)   s    @,
r   c                     d| d| d| S )Nu   변경 유형: u   
변경 설명: z

---MODIFIED_SKILL---
r&   )r   mutation_typedescriptionbodys       r   _make_responsez(TestParseMutationResponse._make_response.   s     /D[MQrvzu{||r   c                     | j                  ddd      }| j                  |      }| j                  |d   d       | j                  |d   d       | j                  |d   d       y)	u   정상 응답 파싱   규칙 추가u   금지 단어 목록 추가u    # 스킬

## 규칙
- 새 규칙)r-   r.   r/   r-   mutation_descriptionmodified_skill_mdNr0   r+   assertEqualr   responser   s      r   test_parse_normal_responsez4TestParseMutationResponse.test_parse_normal_response1   ss    &&)56 ' 

 H%0/B 679VW 346[\r   c                 ~    d}| j                  |      }| j                  |d   d       | j                  |d   d       y)u   값 앞뒤 공백 제거 확인uc   변경 유형:  예시 삽입  
변경 설명:  좋은 예시 추가  

---MODIFIED_SKILL---
본문r-   u   예시 삽입r3   u   좋은 예시 추가Nr+   r6   r7   s      r   test_parse_strips_whitespacez6TestParseMutationResponse.test_parse_strips_whitespace=   sA    |H%0/B 679OPr   c                 x    d}| j                  |      }| j                  |      }| j                  |d   |       y)u   여러 줄 본문 파싱u   # 제목

줄1
줄2
줄3)r/   r4   Nr5   )r   r/   r8   r   s       r   test_parse_multiline_bodyz3TestParseMutationResponse.test_parse_multiline_bodyD   s>    -&&D&1H% 34d;r   c                 ~    d}| j                  t              5  | j                  |       ddd       y# 1 sw Y   yxY w)u   구분자 없으면 ValueErroru=   변경 유형: 규칙 추가
변경 설명: 설명

본문만NassertRaises
ValueErrorr+   r   r8   s     r   test_missing_separator_raisesz7TestParseMutationResponse.test_missing_separator_raisesK   s6    Uz* 	!JJx 	! 	! 	!   3<c                 ~    d}| j                  t              5  | j                  |       ddd       y# 1 sw Y   yxY w)u"   변경 유형 없으면 ValueErroru2   변경 설명: 설명

---MODIFIED_SKILL---
본문Nr@   rC   s     r   !test_missing_mutation_type_raisesz;TestParseMutationResponse.test_missing_mutation_type_raisesQ   s6    Jz* 	!JJx 	! 	! 	!rE   c                 ~    d}| j                  t              5  | j                  |       ddd       y# 1 sw Y   yxY w)u"   변경 설명 없으면 ValueErroru9   변경 유형: 규칙 추가

---MODIFIED_SKILL---
본문Nr@   rC   s     r   (test_missing_mutation_description_raiseszBTestParseMutationResponse.test_missing_mutation_description_raisesW   s6    Qz* 	!JJx 	! 	! 	!rE   c                 T    d}| j                  |      }| j                  |d   d       y)uB   빈 본문도 허용 (구분자 뒤에 아무것도 없는 경우)uZ   변경 유형: 규칙 삭제
변경 설명: 불필요 규칙 제거

---MODIFIED_SKILL---
r4    Nr;   r7   s      r   test_empty_body_allowedz1TestParseMutationResponse.test_empty_body_allowed]   s+    sH% 34b9r   c                     | j                  | j                               }| j                  d|       | j                  d|       | j                  d|       y)u   반환 dict 키 확인r-   r3   r4   N)r+   r0   r   r   s     r   test_result_keysz*TestParseMutationResponse.test_result_keysc   sE    D//12ov.,f5)62r   N)r2   u   새 규칙 1개 추가   # 변경된 스킬)r"   r#   r$   r%   r   r0   r9   r<   r>   rD   rG   rI   rL   rN   r&   r   r   r(   r(   &   s:    2-
}
]Q<!!!:3r   r(   c                       e Zd ZdZ ed      d        Z ed      d        Z ed      d        Z ed      d        Zy)TestGenerateMutationu7   generate_mutation 함수 테스트 (call_claude 모킹)z autoresearch.mutator.call_claudec                    d}||_         ddlm}  |dddd      }| j                  |d	   d
       | j                  |d   d       | j                  |d   d       | j	                  |d   d       | j	                  |d   d       y)u9   generate_mutation이 파싱 결과 + 토큰 정보 반환ue   변경 유형: 규칙 추가
변경 설명: 테스트 규칙

---MODIFIED_SKILL---
# 변경된 스킬r   generate_mutationu   # 원본z	items: []u   없음zclaude-sonnet-4-6)r   r   r   modelr-   r2   r3   u   테스트 규칙r4   rO   input_tokensoutput_tokensN)return_valuer
   rT   r6   assertGreater)r   mock_call_claudellm_textrT   r   s        r   /test_generate_returns_parsed_result_with_tokenszDTestGenerateMutation.test_generate_returns_parsed_result_with_tokensn   s     K(0%:"'&%%	
 	0/B 679KL 346JK6.1156/2A6r   c                     d}||_         ddlm}  |dddd       |j                  }| j	                  |j
                  d	   d       y
)u-   지정한 모델로 call_claude 호출 확인uV   변경 유형: 예시 삽입
변경 설명: 예시 추가

---MODIFIED_SKILL---
본문r   rS   r   r   r   zclaude-opus-4-6)rU   rU   NrX   r
   rT   	call_argsr6   kwargsr   rZ   r[   rT   call_kwargss        r    test_generate_uses_correct_modelz5TestGenerateMutation.test_generate_uses_correct_model   sL     |(0%:$5FG&00++G46GHr   c                     d}||_         ddlm}  |ddd       |j                  }| j	                  |j
                  d   d       y	)
u,   max_tokens=8192로 call_claude 호출 확인uR   변경 유형: 표현 수정
변경 설명: 명확화

---MODIFIED_SKILL---
본문r   rS   r   r   r   
max_tokensi    Nr^   ra   s        r   test_generate_max_tokens_8192z2TestGenerateMutation.test_generate_max_tokens_8192   sH     x(0%:$.&00++L94@r   c                 V    d}||_         ddlm}  |ddd       |j                          y)u%   call_claude가 호출되는지 확인uV   변경 유형: 구조 변경
변경 설명: 구조 변경

---MODIFIED_SKILL---
본문r   rS   r   r   r   N)rX   r
   rT   assert_called_once)r   rZ   r[   rT   s       r   test_generate_calls_call_claudez4TestGenerateMutation.test_generate_calls_call_claude   s.     |(0%:$.++-r   N)	r"   r#   r$   r%   r   r\   rc   rf   ri   r&   r   r   rQ   rQ   k   so    A
-.7 /7( -.
I /
I -.
A /
A -.	. /	.r   rQ   __main__)r%   unittestunittest.mockr   r   TestCaser   r(   rQ   r"   mainr&   r   r   <module>ro      sb    0  *6h// 6>B3 1 1 B3J<.8,, <.~ zHMMO r   