
    jKj                         d Z ddlZddlmZ ddlmZ ddlmZ ddl	m
Z
mZ ddlmZmZmZ d Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zy)z7End-to-end tests for the FastMCP adapter (Milestone 2).    N)FastMCP)
instrument)MCPAnalyticsOptionsUserIdentity)
FakeClientevents_namedflush_backgroundc                      t        d      } | j                         dt        dt        dt        fd       }| j                         dt        fd       }| S )Nztest-serverabreturnc                     | |z   S N r   r   s     n/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/posthog/test/mcp/test_fastmcp.pyaddzmake_server.<locals>.add   s    1u    c                      t        d      )Nexplode)
ValueErrorr   r   r   boomzmake_server.<locals>.boom   s    ##r   )r   toolintstr)serverr   r   s      r   make_serverr      sa    ]#F[[]s s s   [[]$# $ $ Mr   c                    K   | j                   j                  t        j                     } |t        j                  d             d {   S 7 w)Nz
tools/list)method)_mcp_serverrequest_handlers	mcp_typesListToolsRequest)r   handlers     r   _list_toolsr%      s>       11)2L2LMG33<HIIIIs   AA	A
Ac                    K   t               } t               }t        | |       t        |        d {   }t	                d {    |j
                  j                  }t        d |D              }d|j                  d   v sJ d|j                  d   v sJ t        |d      }|sJ t        |d   d   d         dd	hk(  sJ y 7 7 w)
Nc              3   @   K   | ]  }|j                   d k(  s|  ywr   Nname.0ts     r   	<genexpr>z?test_list_tools_injects_context_and_captures.<locals>.<genexpr>0   s     8u!%Au   context
propertiesrequiredz$mcp_tools_listr   z$mcp_listed_tool_namesr   r   )r   r   r   r%   _flushroottoolsnextinputSchema_eventsset)r   clientresultr5   add_toollisteds         r   ,test_list_tools_injects_context_and_capturesr>   '   s     ]F\Fvvv&&F
(NNKKE8u88H,,\::::,,Z8888V./FM6vay&'?@AeV_TTT 's"   /CCCCA?CCc                    K   t               } t               }t        | |t        d             t	        |        d {   }t        d |j                  j                  D              }d|j                  j                  di       vsJ y 7 Kw)NF)r0   c              3   @   K   | ]  }|j                   d k(  s|  ywr(   r)   r+   s     r   r.   z9test_context_injection_can_be_disabled.<locals>.<genexpr>?   s     D0!AFFeOA0r/   r0   r1   )
r   r   r   r   r%   r6   r4   r5   r7   get)r   r:   r;   r<   s       r   &test_context_injection_can_be_disabledrB   9   ss     ]F\Fvv25ABv&&FDv{{00DDHH0044\2FFFF 's   :B
BAB
c                  l  K   t               } t               }t        | |       i | j                  j	                  d      j
                  dt        dt        dt        ffd}|| j                  j	                  d      _        | j                  j                  ddddd	       d {    t                d {    d
   dddk(  sJ t        |d      }t        |      dk(  sJ |d   d   }|d   dk(  sJ |d   dk(  sJ |d   dk(  sJ |d   du sJ d|v sJ d|d   d   d   d   vsJ y 7 7 ww)Nr   r   r   r   c                 &    | |dd<    | |      S )Nr   argsr   )r   r   original_addreceiveds     r   spy_addzBtest_tool_call_captures_intent_and_strips_context.<locals>.spy_addN   s    !"+Aq!!r         z)summing two numbers for the user's reportr   r   r0   rE   r   $mcp_tool_call   r   r1   z$mcp_tool_namez$mcp_intentz$mcp_intent_sourcecontext_parameter$mcp_is_errorFz$mcp_duration_msr0   z$mcp_parametersrequestparams	arguments)r   r   r   _tool_managerget_toolfnr   	call_toolr3   r8   len)r   r:   rH   callspropsrF   rG   s        @@r   1test_tool_call_captures_intent_and_strips_contextrZ   F   s|    ]F\FvvH''007::L"3 "3 "3 " /6F!!%(+



(
(QQ+VW   (NN FQQ////F,-Eu:??!H\"E!"e+++#NNNN%&*====!U***&&&E"34Y?I+VVVV# s%   B$D4(D0)D4:D2;A6D42D4c                    K   t               } t               }t        | |       | j                  j	                  ddddd       d {    | j                  j	                  ddddd       d {    t                d {    t        t        |d            dk(  sJ t        t        |d            dk(  sJ y 7 s7 M7 =w)	Nr   rM   zfirst call to warm uprK   rI   zsecond call for the totalz$mcp_initializerL   )r   r   r   rS   rV   r3   rW   r8   )r   r:   s     r   (test_initialize_emitted_once_per_sessionr\   h   s     ]F\Fvv



(
(QQ+BC   


(
(QQ+FG   (NNwv012a777wv/01Q666 s6   AC B:'C .B</C  B>:C <C >C c                    K   t               } t               }t        | |       t        j                  t
              5  | j                  j                  dddi       d {    d d d        t                d {    t        |d      }|r|d   d   d   du sJ t        |d	      }|sJ |d   d   d
   d   d   dk(  sJ y 7 b# 1 sw Y   axY w7 Vw)Nr   r0   zattempting the risky operationrL   r   r1   rO   Tz
$exceptionz$exception_listvaluer   )
r   r   r   pytestraises	ExceptionrS   rV   r3   r8   )r   r:   rX   
exceptionss       r   -test_tool_call_error_is_captured_and_reraisedrc   y   s     ]F\Fvv	y	!"",,Y @A
 	
 	
 
" (NNF,-EU1Xl+O<DDD.J:a=&'89!<WERRR	
 
"	! s;   :C"CCC#C8C9ACCCCc                  j  K   t               } t               }t        | |t        d              | j                  j                  ddddd       d {    t                d {    t        |d      }|d	   d
   dk(  sJ |d	   d   d   ddik(  sJ d|d	   d   vsJ t        |d      sJ y 7 \7 Lw)Nc                 &    t        dddiddi      S )Nuser_42planproorganizationorg_7)distinct_idr1   groups)r   )rP   extras     r   <lambda>z;test_identify_sets_distinct_id_and_groups.<locals>.<lambda>   s    L%"E?&0-r   )identifyr   rM   rI   zchecking identity flows throughrK   rL   r   rk   rf   r1   z$groupsri   rj   z$process_person_profilez	$identify)r   r   r   r   rS   rV   r3   r8   )r   r:   rX   s      r   )test_identify_sets_distinct_id_and_groupsrp      s     ]F\F	

 


(
(QQ+LM   (NNF,-E8M"i///8L!),0IIII$E!H\,BBBB6;''' s%   AB3B/B3$B1%AB31B3c                     K   t               } t               }t        | |       | j                  j                  }t        | |       | j                  j                  |u sJ y wr   )r   r   r   rS   rV   )r   r:   wrapped_calls      r   test_instrument_is_idempotentrs      sS     ]F\Fvv''11Lvv))\999s   AA c                  z   K   t        t               t                     } | j                  d       d {    y 7 w)Nanything)r   objectr   capture)handles    r   +test_unsupported_server_returns_noop_handlery      s(     *,/F
..
$$$s   1;9;)__doc__r_   	mcp.typestypesr"   mcp.server.fastmcpr   posthog.mcpr   posthog.mcp.typesr   r   posthog.test.mcp._helpersr   r   r8   r	   r3   r   r%   r>   rB   rZ   r\   rc   rp   rs   ry   r   r   r   <module>r      sY    =   & " ? JU$GWD7"S$(8:%r   