
    _i.                       d Z ddlm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
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                   t        ddg      }|j                  }d} ||      }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            dx}x}x}x}}y)u   첫 번째 응답 반환helloworld	responsesprompt==zN%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.complete
}(%(py4)s)
} == %(py9)sclientpy0py2py4py6py9assert %(py11)spy11N
r   complete
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation	selfr   @py_assert1@py_assert3@py_assert5@py_assert8@py_assert7@py_format10@py_format12s	            -/home/jay/workspace/tests/fakes/test_fakes.py$test_complete_returns_first_responsez6TestFakeLLMClient.test_complete_returns_first_response   s    '7);<3x3x(3G3(G3333(G333333v333v333333x333(333G33333333    c                   t        g d      }|j                  }d} ||      }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            dx}x}x}x}}|j                  }d} ||      }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            dx}x}x}x}}|j                  }d} ||      }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            dx}x}x}x}}|j                  }d} ||      }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            dx}x}x}x}}y)u   응답 목록을 순환)abcr   p1r2   r   r   r   r   r   r   Np2r3   p3r4   p4r   r%   s	            r.   test_complete_cycles_responsesz0TestFakeLLMClient.test_complete_cycles_responses   sc   9+t+t$++$++++$++++++v+++v++++++t+++$+++++++++++t+t$++$++++$++++++v+++v++++++t+++$+++++++++++t+t$++$++++$++++++v+++v++++++t+++$+++++++++++t+t$++$++++$++++++v+++v++++++t+++$+++++++++++r0   c                   t               }|j                  d      }t        |t              }|sddt	        j
                         v st        j                  t              rt        j                  t              nddt	        j
                         v st        j                  |      rt        j                  |      nddt	        j
                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }t        t        j                  |            d}t        |      }d}||kD  }|st        j                  d	|fd
||f      dt	        j
                         v st        j                  t              rt        j                  t              nddt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            dx}x}}y)u)   responses=None이면 기본 응답 반환testz5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}
isinstanceresultstr)r   py1r   r   Nr   >)z/%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} > %(py6)slen)r   r?   py3r   zassert %(py8)spy8)r   r   r<   r>   r   r    r   r!   r"   r#   r$   rB   r   )
r&   r   r=   r(   @py_format5@py_assert2r)   @py_assert4@py_format7@py_format9s
             r.   (test_complete_default_response_when_nonez:TestFakeLLMClient.test_complete_default_response_when_none%   s*   (&#&&&&&&&&z&&&z&&&&&&&&&&&&&&&&&#&&&#&&&&&&&&&&6{Q{Q{Qss66{Qr0   c                   t        dg      }|j                  }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}|j                  d       |j                  }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}|j                  d       |j                  }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}y
)u   호출 횟수 카운트rr   r   r   z2%(py2)s
{%(py2)s = %(py0)s.call_count
} == %(py5)sr   r   r   py5assert %(py7)spy7Nr2      r3      )r   
call_countr   r   r   r    r!   r"   r#   r$   r   r&   r   r'   rG   r(   @py_format6@py_format8s          r.   test_call_count_incrementsz,TestFakeLLMClient.test_call_count_increments,   s|   #/  %A% A%%%% A%%%%%%v%%%v%%% %%%A%%%%%%%  %A% A%%%% A%%%%%%v%%%v%%% %%%A%%%%%%%  %A% A%%%% A%%%%%%v%%%v%%% %%%A%%%%%%%r0   c                ^   t        dg      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            dx}x}}|j                  d
       |j                  }d
}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            dx}x}}y)u   마지막 프롬프트 저장xr   Nisz3%(py2)s
{%(py2)s = %(py0)s.last_prompt
} is %(py5)sr   rN   rP   rQ   z	my promptr   )z3%(py2)s
{%(py2)s = %(py0)s.last_prompt
} == %(py5)s)r   last_promptr   r   r   r    r!   r"   r#   r$   r   rU   s          r.   test_last_prompt_storedz)TestFakeLLMClient.test_last_prompt_stored5   s    #/!!)T)!T))))!T))))))v)))v)))!)))T)))))))$!!0[0![0000![000000v000v000!000[0000000r0   c                b   t        dg      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            dx}x}}|j                  d
d       |j                  }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            dx}x}}y)u   마지막 모델 저장rZ   r   Nr[   z2%(py2)s
{%(py2)s = %(py0)s.last_model
} is %(py5)sr   rN   rP   rQ   pzcustom-model)modelr   )z2%(py2)s
{%(py2)s = %(py0)s.last_model
} == %(py5)s)r   
last_modelr   r   r   r    r!   r"   r#   r$   r   rU   s          r.   test_last_model_storedz(TestFakeLLMClient.test_last_model_stored<   s   #/  (D( D(((( D((((((v(((v((( (((D(((((((>2  2N2 N2222 N222222v222v222 222N2222222r0   c                ,   t        ddg      }|j                  d       |j                  d       |j                          |j                  }d}||k(  }|st	        j
                  d|fd||f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      d	z  }d
d|iz  }t        t	        j                  |            dx}x}}|j                  }d}||u }|st	        j
                  d|fd||f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      d	z  }d
d|iz  }t        t	        j                  |            dx}x}}|j                  }d}||u }|st	        j
                  d|fd||f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      d	z  }d
d|iz  }t        t	        j                  |            dx}x}}|j                  }d} ||      }d}||k(  }	|	st	        j
                  d|	fd||f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      t	        j                  |      t	        j                  |      dz  }
dd|
iz  }t        t	        j                  |            dx}x}x}x}	}y)   reset() 후 상태 초기화r2   r3   r   rb   r   r   rM   r   rN   rP   rQ   Nr[   r]   ra   r   r   r   r   )r   r   resetrT   r   r   r   r    r!   r"   r#   r$   r^   rd   )r&   r   r'   rG   r(   rV   rW   r)   r*   r+   r,   r-   s               r.   test_reset_clears_statez)TestFakeLLMClient.test_reset_clears_stateC   s   #s4  %A% A%%%% A%%%%%%v%%%v%%% %%%A%%%%%%%!!)T)!T))))!T))))))v)))v)))!)))T)))))))  (D( D(((( D((((((v(((v((( (((D(((((((*s*s#*s*#s****#s******v***v******s***#***s********r0   c                <   t        dg      }|j                  ddg       |j                  }d} ||      }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      d	z  }d
d|iz  }t        t        j                  |            dx}x}x}x}}|j                  }d} ||      }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      d	z  }d
d|iz  }t        t        j                  |            dx}x}x}x}}y)u'   set_responses()로 응답 목록 교체oldr   new1new2rb   r   r   r   r   r   r   N)r   set_responsesr   r   r   r   r    r!   r"   r#   r$   r%   s	            r.   test_set_responses_replacesz-TestFakeLLMClient.test_set_responses_replacesO   sN   %1ff-.-s-s#-v-#v----#v------v---v------s---#---v--------s-s#-v-#v----#v------v---v------s---#---v--------r0   c                8   t        dg      }|j                  d      }ddl}|j                  } ||      }|sddt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      d	z  }t        t        j                  |            dx}}|j                          y)
u"   complete_async는 코루틴 반환async_resultr   r   r   NzMassert %(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s.iscoroutine
}(%(py3)s)
}inspectcoror   r   rC   rO   )r   complete_asyncrr   iscoroutiner   r    r   r!   r"   r#   r$   close)r&   r   rs   rr   r'   rG   rV   s          r.   %test_complete_async_returns_coroutinez7TestFakeLLMClient.test_complete_async_returns_coroutineV   s    .)9:$$X.""("4((((((((w(((w((("((((((4(((4((((((((((

r0   c                   t        dg      fd}t        j                   |             }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}}y
)u#   complete_async 실행 결과 확인async_hellor   c                 B   K    j                  d       d {   S 7 w)Nr;   )ru   )r   s   r.   runzCTestFakeLLMClient.test_complete_async_returns_response.<locals>.rund   s     ..v6666s   r   z%(py0)s == %(py3)sr=   r   rC   assert %(py5)srO   N)r   asyncior|   r   r   r   r    r!   r"   r#   r$   )r&   r|   r=   rF   r'   @py_format4rV   r   s          @r.   $test_complete_async_returns_responsez6TestFakeLLMClient.test_complete_async_returns_response`   s    -9	7 SU#&&v&&&&v&&&&&&v&&&v&&&&&&&&&&r0   c                   t        dg      }|j                  dd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  }dd|iz  }t        t        j                  |            dx}}y)&   추가 kwargs 전달 시 에러 없음okr   rb   mgffffff?d   )rc   temperature
max_tokensr   r}   r=   r~   r   rO   Nr   )r&   r   r=   rF   r'   r   rV   s          r.   test_complete_with_kwargsz+TestFakeLLMClient.test_complete_with_kwargsj   s|    $0CSSQv~vvvr0   NreturnNone)__name__
__module____qualname____doc__r/   r9   rJ   rX   r_   re   ri   ro   rx   r   r    r0   r.   r   r      s<    !4
,&13
+.'r0   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                <   t               }|j                  dd      }|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}y
)u    dispatch()는 status='ok' 반환zteam-aztask-1statusr   r   z%(py1)s == %(py4)sr?   r   assert %(py6)sr   Nr   dispatchr   r   r"   r#   r$   r&   fdr=   @py_assert0r(   rF   rE   rH   s           r.   test_dispatch_returns_ok_statusz0TestFakeDispatch.test_dispatch_returns_ok_statust   sk    ^Xx0h'4'4''''4''''''4'''''''r0   c                <   t               }|j                  dd      }|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}}y	)
u    dispatch() 결과에 team 포함zdev-teamzbuild somethingteamr   r   r   r   r   Nr   r   s           r.   test_dispatch_returns_teamz+TestFakeDispatch.test_dispatch_returns_teamz   sh    ^Z):;f~++~++++~+++~++++++++++r0   c                L   t               }|j                  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  }dd	|iz  }t        t        j                  |            d
x}}|d   }t        |t              }|sddt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }t        t        j                  |            d
x}}|d   }t        |      }	d}
|	|
kD  }|st        j                  d|fd|	|
f      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            d
x}x}	x}}
y
)u#   dispatch() 결과에 task_id 포함r   tasktask_id)in)z%(py1)s in %(py3)sr=   )r?   rC   r   rO   Nz5assert %(py5)s
{%(py5)s = %(py0)s(%(py2)s, %(py3)s)
}r<   r>   rt   r   r@   )z/%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} > %(py7)srB   )r   r   r   rQ   zassert %(py9)sr   )r   r   r   r   r"   r   r    r!   r#   r$   r<   r>   rB   )r&   r   r=   r   rF   r   rV   r'   rG   r(   @py_assert6r)   rW   r,   s                 r.   test_dispatch_returns_task_idz.TestFakeDispatch.test_dispatch_returns_task_id   sz   ^VV,"yF""""yF"""y""""""F"""F""""""" +1z+S11111111z111z111+111111S111S1111111111)$)s$%))%))))%))))))s)))s)))$)))%))))))))))r0   c                   t               }|j                  }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}|j                  d	d
       |j                  }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}|j                  d	d       |j                  }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}y)u   dispatch_count 카운트r   r   z6%(py2)s
{%(py2)s = %(py0)s.dispatch_count
} == %(py5)sr   rN   rP   rQ   Nttask1rR   task2rS   )r   dispatch_countr   r   r   r    r!   r"   r#   r$   r   r&   r   r'   rG   r(   rV   rW   s          r.   test_dispatch_count_incrementsz/TestFakeDispatch.test_dispatch_count_increments   s{   ^  %A% A%%%% A%%%%%%r%%%r%%% %%%A%%%%%%%
C!  %A% A%%%% A%%%%%%r%%%r%%% %%%A%%%%%%%
C!  %A% A%%%% A%%%%%%r%%%r%%% %%%A%%%%%%%r0   c                Z   t               }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}|j                  dd	       |j                  }d}||k(  }|st        j                  d
|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}y)u   마지막 team 저장Nr[   z1%(py2)s
{%(py2)s = %(py0)s.last_team
} is %(py5)sr   rN   rP   rQ   alpharZ   r   )z1%(py2)s
{%(py2)s = %(py0)s.last_team
} == %(py5)s)r   	last_teamr   r   r   r    r!   r"   r#   r$   r   r   s          r.   test_last_team_storedz&TestFakeDispatch.test_last_team_stored   s    ^||#t#|t####|t######r###r###|###t#######
GS!||&w&|w&&&&|w&&&&&&r&&&r&&&|&&&w&&&&&&&r0   c                Z   t               }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}|j                  dd	       |j                  }d	}||k(  }|st        j                  d
|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}y)u   마지막 task 저장Nr[   z1%(py2)s
{%(py2)s = %(py0)s.last_task
} is %(py5)sr   rN   rP   rQ   r   zmy-taskr   )z1%(py2)s
{%(py2)s = %(py0)s.last_task
} == %(py5)s)r   	last_taskr   r   r   r    r!   r"   r#   r$   r   r   s          r.   test_last_task_storedz&TestFakeDispatch.test_last_task_stored   s    ^||#t#|t####|t######r###r###|###t#######
C#||(y(|y((((|y((((((r(((r(((|(((y(((((((r0   c                   t               }|j                  dd       |j                  dd       |j                  }t        |      }d}||k(  }|s
t	        j
                  d|fd||f      dt        j                         v st	        j                  t              rt	        j                  t              ndd	t        j                         v st	        j                  |      rt	        j                  |      nd	t	        j                  |      t	        j                  |      t	        j                  |      d
z  }dd|iz  }t        t	        j                  |            dx}x}x}}|j                  d   d   }d}	||	k(  }|slt	        j
                  d|fd||	f      t	        j                  |      t	        j                  |	      dz  }
dd|
iz  }t        t	        j                  |            dx}x}}	|j                  d   d   }d}	||	k(  }|slt	        j
                  d|fd||	f      t	        j                  |      t	        j                  |	      dz  }
dd|
iz  }t        t	        j                  |            dx}x}}	y)u)   dispatched 목록에 모든 위임 기록t1r   t2r   rS   r   )zP%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.dispatched
})
} == %(py8)srB   r   )r   r?   rC   rO   rD   zassert %(py10)spy10Nr   r   r   r   r   r   rR   )r   r   
dispatchedrB   r   r   r   r    r!   r"   r#   r$   )r&   r   rF   rG   r+   r   rI   @py_format11r   r(   rE   rH   s               r.    test_dispatched_list_records_allz1TestFakeDispatch.test_dispatched_list_records_all   s   ^
D'"
D'"==&s=!&Q&!Q&&&&!Q&&&&&&s&&&s&&&&&&2&&&2&&&=&&&!&&&Q&&&&&&&}}Q'/4/'4////'4///'///4///////}}Q'/4/'4////'4///'///4///////r0   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()가 예외 발생Tr   r   N)r   set_failurepytestraises	Exceptionr   )r&   r   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(  }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      d	z  }d
d|iz  }t        t        j                  |            dx}x}}y)u   set_failure(False)로 복구TFr   r   r   r   r   r   r   r   r   N)r   r   r   r   r   r"   r#   r$   r   s           r.   test_set_failure_false_restoresz0TestFakeDispatch.test_set_failure_false_restores   s    ^
t
uS&)h'4'4''''4''''''4'''''''r0   c                   t               }|j                  dd       |j                  d       |j                          |j                  }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            dx}x}}|j                  }d}||u }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            dx}x}}|j                  }d}||u }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            dx}x}}|j                  }g }||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            dx}x}}|j                  dd      }|d   }d}||k(  }	|	slt        j                  d|	fd||f      t        j                  |      t        j                  |      dz  }
dd|
iz  }t        t        j                  |            dx}x}	}y)rg   r   r   Tr   r   r   r   rN   rP   rQ   Nr[   r   r   )z2%(py2)s
{%(py2)s = %(py0)s.dispatched
} == %(py5)sr   r   r   r   r   r   )r   r   r   rh   r   r   r   r   r    r!   r"   r#   r$   r   r   r   )r&   r   r'   rG   r(   rV   rW   r=   r   rF   rE   rH   s               r.   ri   z(TestFakeDispatch.test_reset_clears_state   sG   ^
C 
t

  %A% A%%%% A%%%%%%r%%%r%%% %%%A%%%%%%%||#t#|t####|t######r###r###|###t#######||#t#|t####|t######r###r###|###t#######}}""}""""}""""""r"""r"""}""""""""""S&)h'4'4''''4''''''4'''''''r0   c                B   t               }|j                  dddd      }|d   }d}||k(  }|slt        j                  d|fd	||f      t        j                  |      t        j                  |      d
z  }dd|iz  }t        t        j                  |            dx}x}}y)r   r   r   highz
2024-01-01)prioritydeadliner   r   r   r   r   r   r   Nr   r   s           r.   test_dispatch_with_kwargsz*TestFakeDispatch.test_dispatch_with_kwargs   sq    ^VVf|Th'4'4''''4''''''4'''''''r0   c           	     t   t               }t        d      D cg c]  }|j                  dd|       d    }}t        |      }t	        |      }d}||k(  }|sSt        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  t              rt        j                  t              ndd	t        j                         v st        j                  |      rt        j                  |      nd	t        j                  |      t        j                  |      t        j                  |      d
z  }dd|iz  }	t        t        j                  |	            dx}x}x}}yc c}w )u+   각 dispatch 호출마다 고유한 task_id   r   r   r   r   )zN%(py6)s
{%(py6)s = %(py0)s(%(py4)s
{%(py4)s = %(py1)s(%(py2)s)
})
} == %(py9)srB   setids)r   r?   r   r   r   r   r   r   N)r   ranger   r   rB   r   r   r   r    r!   r"   r#   r$   )
r&   r   ir   r(   r)   r*   r+   r,   r-   s
             r.   test_unique_task_idsz%TestFakeDispatch.test_unique_task_ids   s    ^@EaI1r{{3$qc
+I6IIs8!s8}!!}!!!!}!!!!!!s!!!s!!!!!!3!!!3!!!!!!s!!!s!!!8!!!}!!!!!!!!!! Js   F5Nr   )r   r   r   r   r   r   r   r   r   r   r   r   r   ri   r   r   r   r0   r.   r   r   q   sA     (,*&')0%((("r0   r   )r   
__future__r   builtinsr   _pytest.assertion.rewrite	assertionrewriter   r   syspathlibr   r   pathinsertr>   __file__parenttests.fakes.fake_dispatchr   tests.fakes.fake_llm_clientr   r   r   r   r0   r.   <module>r      sk   
 #    
   3tH~,,33::; < 2 5Y Yx^" ^"r0   