
    i.                       d Z ddlmZ ddlZddlZddlmZ ddlZej                  j                  d e
 ee      j                  j                  j                               ddlmZ ddlmZ  G d d      Z G d	 d
      Zy)ux   tests/fakes/ — FakeLLMClient, FakeDispatch 테스트 스위트 (M-24)

모리건(테스터) 작성 — TDD RED 단계
    )annotationsN)Path)FakeDispatch)FakeLLMClientc                  h    e Zd ZdZddZddZddZddZddZddZ	ddZ
dd	Zdd
ZddZddZy)TestFakeLLMClientu   FakeLLMClient 테스트c                L    t        ddg      }|j                  d      dk(  sJ y)u   첫 번째 응답 반환helloworld	responsespromptNr   completeselfclients     G/home/jay/workspace/.worktrees/task-2116-dev1/tests/fakes/test_fakes.py$test_complete_returns_first_responsez6TestFakeLLMClient.test_complete_returns_first_response   s(    '7);<x(G333    c                    t        g d      }|j                  d      dk(  sJ |j                  d      dk(  sJ |j                  d      dk(  sJ |j                  d	      dk(  sJ y
)u   응답 목록을 순환)abcr   p1r   p2r   p3r   p4Nr   r   s     r   test_complete_cycles_responsesz0TestFakeLLMClient.test_complete_cycles_responses   sh    9t$+++t$+++t$+++t$+++r   c                ~    t               }|j                  d      }t        |t              sJ t	        |      dkD  sJ y)u)   responses=None이면 기본 응답 반환testr   N)r   r   
isinstancestrlenr   r   results      r   (test_complete_default_response_when_nonez:TestFakeLLMClient.test_complete_default_response_when_none%   s7    (&#&&&6{Qr   c                    t        dg      }|j                  dk(  sJ |j                  d       |j                  dk(  sJ |j                  d       |j                  dk(  sJ y)	u   호출 횟수 카운트rr   r   r      r      N)r   
call_countr   r   s     r   test_call_count_incrementsz,TestFakeLLMClient.test_call_count_increments,   sb    #/  A%%%  A%%%  A%%%r   c                ~    t        dg      }|j                  J |j                  d       |j                  dk(  sJ y)u   마지막 프롬프트 저장xr   Nz	my prompt)r   last_promptr   r   s     r   test_last_prompt_storedz)TestFakeLLMClient.test_last_prompt_stored5   s@    #/!!)))$!![000r   c                    t        dg      }|j                  J |j                  dd       |j                  dk(  sJ y)u   마지막 모델 저장r/   r   Npzcustom-model)model)r   
last_modelr   r   s     r   test_last_model_storedz(TestFakeLLMClient.test_last_model_stored<   sD    #/  (((>2  N222r   c                
   t        ddg      }|j                  d       |j                  d       |j                          |j                  dk(  sJ |j                  J |j
                  J |j                  d      dk(  sJ y)   reset() 후 상태 초기화r   r   r   r3   r   N)r   r   resetr,   r0   r5   r   s     r   test_reset_clears_statez)TestFakeLLMClient.test_reset_clears_stateC   s    #s4  A%%%!!)))  (((s#s***r   c                    t        dg      }|j                  ddg       |j                  d      dk(  sJ |j                  d      dk(  sJ y)u'   set_responses()로 응답 목록 교체oldr   new1new2r3   N)r   set_responsesr   r   s     r   test_set_responses_replacesz-TestFakeLLMClient.test_set_responses_replacesO   sO    %1ff-.s#v---s#v---r   c                    t        dg      }|j                  d      }ddl}|j                  |      sJ |j	                          y)u"   complete_async는 코루틴 반환async_resultr   r   r   N)r   complete_asyncinspectiscoroutineclose)r   r   cororD   s       r   %test_complete_async_returns_coroutinez7TestFakeLLMClient.test_complete_async_returns_coroutineV   s?    .)9:$$X.""4(((

r   c                l    t        dg      fd}t        j                   |             }|dk(  sJ y)u#   complete_async 실행 결과 확인async_hellor   c                 B   K    j                  d       d {   S 7 w)Nr!   )rC   )r   s   r   runzCTestFakeLLMClient.test_complete_async_returns_response.<locals>.rund   s     ..v6666s   N)r   asynciorL   )r   rL   r&   r   s      @r   $test_complete_async_returns_responsez6TestFakeLLMClient.test_complete_async_returns_response`   s4    -9	7 SU#&&&r   c                V    t        dg      }|j                  dddd      }|dk(  sJ y)	&   추가 kwargs 전달 시 에러 없음okr   r3   mgffffff?d   )r4   temperature
max_tokensNr   r%   s      r   test_complete_with_kwargsz+TestFakeLLMClient.test_complete_with_kwargsj   s0    $0CSSQ~~r   NreturnNone)__name__
__module____qualname____doc__r   r   r'   r-   r1   r6   r:   r@   rH   rN   rV    r   r   r   r      s<    !4
,&13
+.'r   r   c                  p    e Zd ZdZddZddZddZddZddZddZ	ddZ
dd	Zdd
ZddZddZddZy)TestFakeDispatchu   FakeDispatch 테스트c                P    t               }|j                  dd      }|d   dk(  sJ y)u    dispatch()는 status='ok' 반환zteam-aztask-1statusrQ   Nr   dispatchr   fdr&   s      r   test_dispatch_returns_ok_statusz0TestFakeDispatch.test_dispatch_returns_ok_statust   s,    ^Xx0h4'''r   c                P    t               }|j                  dd      }|d   dk(  sJ y)u    dispatch() 결과에 team 포함zdev-teamzbuild somethingteamNrc   re   s      r   test_dispatch_returns_teamz+TestFakeDispatch.test_dispatch_returns_teamz   s,    ^Z):;f~+++r   c                    t               }|j                  dd      }d|v sJ t        |d   t              sJ t	        |d         dkD  sJ y)u#   dispatch() 결과에 task_id 포함ri   tasktask_idr   N)r   rd   r"   r#   r$   re   s      r   test_dispatch_returns_task_idz.TestFakeDispatch.test_dispatch_returns_task_id   sT    ^VV,F"""&+S1116)$%)))r   c                    t               }|j                  dk(  sJ |j                  dd       |j                  dk(  sJ |j                  dd       |j                  dk(  sJ y)u   dispatch_count 카운트r   ttask1r*   task2r+   N)r   dispatch_countrd   r   rf   s     r   test_dispatch_count_incrementsz/TestFakeDispatch.test_dispatch_count_increments   sa    ^  A%%%
C!  A%%%
C!  A%%%r   c                z    t               }|j                  J |j                  dd       |j                  dk(  sJ y)u   마지막 team 저장Nalphar/   )r   	last_teamrd   rt   s     r   test_last_team_storedz&TestFakeDispatch.test_last_team_stored   s9    ^||###
GS!||w&&&r   c                z    t               }|j                  J |j                  dd       |j                  dk(  sJ y)u   마지막 task 저장Nrp   zmy-task)r   	last_taskrd   rt   s     r   test_last_task_storedz&TestFakeDispatch.test_last_task_stored   s9    ^||###
C#||y(((r   c                    t               }|j                  dd       |j                  dd       t        |j                        dk(  sJ |j                  d   d   dk(  sJ |j                  d   d   dk(  sJ y	)
u)   dispatched 목록에 모든 위임 기록t1rq   t2rr   r+   r   ri   r*   N)r   rd   r$   
dispatchedrt   s     r    test_dispatched_list_records_allz1TestFakeDispatch.test_dispatched_list_records_all   st    ^
D'"
D'"2==!Q&&&}}Q'4///}}Q'4///r   c                    t               }|j                  d       t        j                  t              5  |j                  dd       ddd       y# 1 sw Y   yxY w)u1   set_failure(True) 시 dispatch()가 예외 발생Trp   rl   N)r   set_failurepytestraises	Exceptionrd   rt   s     r   !test_set_failure_raises_exceptionz2TestFakeDispatch.test_set_failure_raises_exception   sD    ^
t]]9% 	%KKV$	% 	% 	%s   AAc                    t               }|j                  d       |j                  d       |j                  dd      }|d   dk(  sJ y)u   set_failure(False)로 복구TFrp   rl   rb   rQ   N)r   r   rd   re   s      r   test_set_failure_false_restoresz0TestFakeDispatch.test_set_failure_false_restores   sD    ^
t
uS&)h4'''r   c                2   t               }|j                  dd       |j                  d       |j                          |j                  dk(  sJ |j
                  J |j                  J |j                  g k(  sJ |j                  dd      }|d   dk(  sJ y)r8   rp   rl   Tr   Nrb   rQ   )r   rd   r   r9   rs   rx   r{   r   re   s      r   r:   z(TestFakeDispatch.test_reset_clears_state   s    ^
C 
t

  A%%%||###||###}}"""S&)h4'''r   c                V    t               }|j                  dddd      }|d   dk(  sJ y)	rP   ri   rl   highz
2024-01-01)prioritydeadlinerb   rQ   Nrc   re   s      r   test_dispatch_with_kwargsz*TestFakeDispatch.test_dispatch_with_kwargs   s2    ^VVf|Th4'''r   c                    t               }t        d      D cg c]  }|j                  dd|       d    }}t        t	        |            dk(  sJ yc c}w )u+   각 dispatch 호출마다 고유한 task_id   rp   rl   rm   N)r   rangerd   r$   set)r   rf   iidss       r   test_unique_task_idsz%TestFakeDispatch.test_unique_task_ids   sR    ^@EaI1r{{3$qc
+I6II3s8}!!! Js   ANrW   )rZ   r[   r\   r]   rg   rj   rn   ru   ry   r|   r   r   r   r:   r   r   r^   r   r   r`   r`   q   sA     (,*&')0%((("r   r`   )r]   
__future__r   rM   syspathlibr   r   pathinsertr#   __file__parenttests.fakes.fake_dispatchr   tests.fakes.fake_llm_clientr   r   r`   r^   r   r   <module>r      sg   
 #  
   3tH~,,33::; < 2 5Y Yx^" ^"r   