
    עiD                        d Z ddlmZ ddlmZ ddlmZ ddlZddlmZm	Z	 ddl
mZmZ ddlmZ ddlZg d	Z ej                   d
      d        Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej6                  j8                  d        Zej6                  j8                  d        Zej6                  j8                  d        Zej6                  j8                  d        Z ej6                  j8                  d        Z!ej6                  j8                  d        Z"ej6                  j8                  d        Z#ej6                  j8                  d        Z$ej6                  j8                  d        Z%y)zTests for Interactions API.   Client)	_base_url    )mockN)RequestResponse)AsyncHttpxClientBaseApiClient)GOOGLE_CLOUD_PROJECTGEMINI_API_KEYGOOGLE_API_KEYGOOGLE_CLOUD_LOCATIONT)autousec                 @    t         D ]  }| j                  |d        y )NF)raising)ENV_VARSdelenv)monkeypatchvars     j/sites/domain-asset-master/.venv/lib/python3.12/site-packages/google/genai/tests/interactions/test_auth.pyclear_env_varsr   #   s$     /3./    c                    | j                  dd       t               }t        j                  j	                  t
        d      5 }t        dt        dd            |_        |j                  j                  dd	
       |j                          |j                  d   d   }t        |j                        j                  d      sJ |j                   d   dk(  sJ 	 d d d        y # 1 sw Y   y xY wNr   test-api-keysend   POST requestgemini-1.5-flashHellomodelinputr   z/v1beta/interactionsx-goog-api-key)setenvr   r   patchobject
HTTPClientr	   r   return_valueinteractionscreateassert_called_once	call_argsstrurlendswithheadersr   client	mock_sendr"   s       r   test_interactions_gemini_urlr9   (   s    '8XF 
		:v	. 	C)!)#wvr7J!K	""$ 	# 	
 	$$&%%a(+7;;(()?@@@/0NBBB	C 	C 	Cs   BC!!C*c           	         | j                  dd       t               }t        j                  j	                  t
        d      5 }t        j                  j	                  t        d      5 }t        dt        dd            |_	        |j                  j                  d	d
       |j                          d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r   _access_tokenr   r   r   r    r!   r#   r$   r%   )r)   r   r   r*   r+   r   r,   r	   r   r-   r.   r/   assert_not_calledr   r7   mock_access_tokenr8   s       r   'test_interactions_gemini_no_vertex_authr?   9   s    '8XF 	

-9	.=N

*f-	.1:!)#wvr7J!K	""$ 	# 	
 	++-	. 	. 	. 	. 	. 	.s%   %C&A
C0CC
	CCc           
         | j                  dd       t               }d|j                  _        t        j
                  j                  t        d      5 }t        dt        dd      dd	i
      t        dt        dd      dd	i
      t        dt        dd            g|_
        |j                  j                  dd       |j                  dk(  sJ 	 d d d        y # 1 sw Y   y xY wNr   r      r     r   r    retry-after-ms1r"   r5   r   r!   r#   r$   r%   r   )r)   r   _api_clientmax_retriesr   r*   r+   r,   r	   r   side_effectr.   r/   
call_countr   r7   r8   s      r   test_interactions_gemini_retryrL   H   s    '8XF%&F"			:v	. ))S'&""5@PRU?VWS'&""5@PRU?VWS'&""56!
	
 	"");7"K##q((() ) )s   A>CC#c                    | j                  dd       t               }t        j                  j	                  t
        d      5 }t        dt        dd            |_        |j                  j                  dd	d
di       |j                          |j                  d   d   }|j                  d   dk(  sJ |j                  d   dk(  sJ 	 d d d        y # 1 sw Y   y xY wNr   r   r   r   r   r    r!   r#   r$   zX-Custom-Header	TestValuer&   r'   extra_headersr   zx-custom-headerr(   )r)   r   r   r*   r+   r,   r	   r   r-   r.   r/   r0   r1   r5   r6   s       r   &test_interactions_gemini_extra_headersrR   V   s    '8XF			:v	. 
C)!)#wvr7J!K	""$,k: 	# 	

 	$$&%%a(+01[@@@/0NBBB
C 
C 
Cs   BCCc                     ddl m}  ddlm} ddlm} t        j                         }d|_        t        ddd	|
      }t        j                  j                  | dd      5 }t        j                  j                  |dt        j                               5 }|j                  j                  dd      }|j                          |j                          |j                  \  }}	|d   j                  }
t!        d |
j#                         D              sJ t!        d |
j#                         D              sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r   SyncAPIClientr   r   test-quota-projectTtest-projectus-central1vertexaiprojectlocationcredentialsr;   fake-vertex-tokenr-   r   gemini-2.5-flash/What is the largest planet in our solar system?r%   c              3   :   K   | ]  \  }}|d k(  xr |dk(    ywauthorizationzBearer fake-vertex-tokenN .0keyvalues      r   	<genexpr>z7test_interactions_vertex_auth_header.<locals>.<genexpr>   /      +C 	F5,F#FF+   c              3   :   K   | ]  \  }}|d k(  xr |dk(    ywzx-goog-user-projectrW   Nrf   rg   s      r   rk   z7test_interactions_vertex_auth_header.<locals>.<genexpr>   0      +C 	$$F2F)FF+rm   )rG   r   _interactions._base_clientrV   httpxr   r   Mockquota_project_idr*   r+   r.   r/   r0   r1   r5   anyitems)r   rV   r,   credsr7   r>   r8   responseargskwargsr5   s              r   $test_interactions_vertex_auth_headerr{   g   sN   *9(
))+%/%4-]bc& jj
7J  + 
jj
fyy{  	+  "")) ? * H
   "((*&&LD&1gooG +!--/+ + + +  +!--/+ + + +-+ + + + + +s%   5EB E5EE	EEc                  Z   ddl m}  ddlm} t	        j
                         }t        dd      }t        j                  j                  | dd	
      5 }t        j                  j                  |dt	        j
                         
      5 }|j                  j                  dd      }|j                          |j                          |j                  \  }}|d   j                  }	t        d |	j                         D              sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   rT   r   r   Tr   r[   api_keyr;   r_   r`   r   ra   rb   r%   c              3   :   K   | ]  \  }}|d k(  xr |dk(    ywr(   r   Nrf   rg   s      r   rk   z>test_interactions_vertex_key_no_auth_header.<locals>.<genexpr>   /      +C 	;E^$;;+rm   )rG   r   rr   r   r   rs   r*   r+   r.   r/   r0   r<   r1   r5   ru   rv   )
r   r,   rw   r7   r>   r8   rx   ry   rz   r5   s
             r   +test_interactions_vertex_key_no_auth_headerr      s   *(
))+%48& jj
7J  + 
jj
fyy{  	+  "")) ? * H
   "'')&&LD&1gooG +!--/+ + + +'+ + + + + +s%   5D!A>DD!D	D!!D*c                     t        j                         } d| _        t        ddd|       }t        j                  d      5 }t        dt        dd	      
      |_        |j                  j                  dd       |j                          |j                  d   d   }t        |j                        dk(  sJ 	 d d d        y # 1 sw Y   y xY w)NrW   TrX   rY   rZ   zhttpx.Client.sendr   r   r    r!   r#   r$   r%   r   nhttps://us-central1-aiplatform.googleapis.com/v1beta1/projects/test-project/locations/us-central1/interactions)r   rs   rt   r   r*   r	   r   r-   r.   r/   r0   r1   r2   r3   )rw   r7   r8   r"   s       r   test_interactions_vertex_urlr      s    IIKE1ET>M_deF	'	( TI!)#wvr7J!K	""$ 	# 	
 	$$&%%a(+7;;  $T  T  	T  TT T Ts    A6C  C	c                  0  
 ddl m}  ddlm} t	        j
                         }d|_        t        ddd|	      }d
|j                   _        g d}t        |      

fd}t        j                  j                  | d|      5 }t        j                  j                  |d      5 }t        dt        dd      ddi      t        dt        dd      ddi      t        dt        dd            g|_        |j                  j                  dd       |j                   dk(  sJ |j                   dk(  sJ t#        d      D ]1  }|j$                  |   d   d   j&                  }	|	d   d||    k(  r1J  	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   rT   r   r   rW   TrX   rY   rZ   rB   token1token2token3c                      t               S Nnext
token_iters   r   	get_tokenzAtest_interactions_vertex_auth_refresh_on_retry.<locals>.get_token   s    Jr   r;   rI   r   rC   r   r    rD   rE   rF   r   r!   r#   r$   r%   re   Bearer )rG   r   rr   r   r   rs   rt   rH   iterr*   r+   r	   r   rI   r.   r/   rJ   rangecall_args_listr5   )r   r,   rw   r7   token_valuesr   r>   r8   ir5   r   s             @r   .test_interactions_vertex_auth_refresh_on_retryr      s   ,*IIKE1ET>M_deF%&F"1Ll#J  	

-iPKTe

*f-K1: S'&""5@PRU?VWS'&""5@PRU?VWS'&""56!
	 	"");7"K ++q000##q(((q 	KA..q1!4Q7??G?+a8I/JJJJ	KK K K K K Ks+   ?!F C
F +F /F F		FFc            	      d   ddl m}  ddlm} t	        j
                         }d|_        t        ddd|	      }t        j                  j                  | d
d      5 }t        j                  j                  |d      5 }t        dt        dd            |_        |j                  j                  ddddi       |j                          |j                  d   d   j                   }|d   dk(  sJ |j#                          |j%                          |j%                          |j                  j                  ddddi       |j                          |j                  d   d   j                   }|d   dk(  sJ d|vsJ |j#                          d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   rT   r   r   rW   TrX   rY   rZ   r;   default-tokenr`   r   r   r   r    r!   r#   r$   AuthorizationBearer manual-tokenrP   re   r(   
manual-key)rG   r   rr   r   r   rs   rt   r*   r+   r	   r   r-   r.   r/   r0   r1   r5   r<   
reset_mock)r   r,   rw   r7   r>   r8   r5   s          r   /test_interactions_vertex_extra_headers_overrider      s   ,*IIKE1ET>M_deF 	

-W.[l

*f-.1:!)#wvr7J!K	 	""$*,AB 	# 	

 	$$&%%a(+33'+@@@@++-$$& 	""$+\: 	# 	

 	$$&%%a(+33'(L888g---++-=. . . . . .s%   !F&:DF	F&F#	F&&F/c                 
  K   | j                  dd       t               }t        j                  j	                  t
        d      5 }t        dt        dd            |_        |j                  j                  j                  dd	
       d {    |j                          |j                  d   d   }t        |j                        j!                  d      sJ |j"                  d   dk(  sJ 	 d d d        y 7 j# 1 sw Y   y xY wwr   )r)   r   r   r*   r+   r
   r	   r   r-   aior.   r/   r0   r1   r2   r3   r4   r5   r6   s       r   "test_async_interactions_gemini_urlr     s     '8XF			+V	4 	C	!)#wvr7J!K	jj%%,,$ - 
 	
 	
 	$$&%%a(+7;;(()?@@@/0NBBB	C 	C	
	C 	Cs2   ADAC7
C5A C7,	D5C77D <Dc           	        K   | j                  dd       t               }t        j                  j	                  t
        d      5 }t        j                  j	                  t        d      5 }t        dt        dd            |_	        |j                  j                  j                  d	d
       d {    |j                          d d d        d d d        y 7 %# 1 sw Y   xY w# 1 sw Y   y xY ww)Nr   r   _async_access_tokenr   r   r   r    r!   r#   r$   r%   )r)   r   r   r*   r+   r   r
   r	   r   r-   r   r.   r/   r<   r=   s       r   -test_async_interactions_gemini_no_vertex_authr     s     '8XF 	

-)>?	.CT

*F3	.7@!)#wvr7J!K	jj%%,,$ - 
 	
 	
 	++-	. 	. 	.
	
	. 	. 	. 	.sI   AC/%C#(AC/C0CC#	C/CC 	C##C,(C/c           
        K   | j                  dd       t               }d|j                  j                  _        t
        j                  j                  t        d      5 }t        dt        dd      dd	i
      t        dt        dd      dd	i
      t        dt        dd            g|_        |j                  j                  j                  dd       d {    |j                  dk(  sJ 	 d d d        y 7 # 1 sw Y   y xY wwrA   )r)   r   r   rG   rH   r   r*   r+   r
   r	   r   rI   r.   r/   rJ   rK   s      r   $test_async_interactions_gemini_retryr   "  s     '8XF)*FJJ&			+V	4 )	S'&""5@PRU?VWS'&""5@PRU?VWS'&""56!
	
 jj%%,,3EW,UUU##q((() ) 	V) )s1   ADA:C:C8C:/	D8C::D?Dc                   K   | j                  dd       t               }t        j                  j	                  t
        d      5 }t        dt        dd            |_        |j                  j                  j                  dd	d
di       d {    |j                          |j                  d   d   }|j                  d   dk(  sJ |j                  d   dk(  sJ 	 d d d        y 7 X# 1 sw Y   y xY wwrN   )r)   r   r   r*   r+   r
   r	   r   r-   r   r.   r/   r0   r1   r5   r6   s       r   ,test_async_interactions_gemini_extra_headersr   1  s     '8XF			+V	4 
C	!)#wvr7J!K	jj%%,,$,k: - 
 	
 	

 	$$&%%a(+01[@@@/0NBBB
C 
C	

C 
Cs2   AC4A
C(C&AC(	C4&C((C1-C4c                    K   ddl m}  ddlm} ddl m} t        j                         }d|_        t        ddd|	      }t
        j                  j                  | d
d      5 }t
        j                  j                  |dt        j                               5 }|j                  j                  j                  dd       d {   }|j                          |j                          |j                  \  }}	|d   j                   }
t#        d |
j%                         D              sJ t#        d |
j%                         D              sJ 	 d d d        d d d        y 7 # 1 sw Y   xY w# 1 sw Y   y xY ww)Nr   rT   rU   r
   rW   TrX   rY   rZ   r   r_   r`   r   ra   rb   r%   r   c              3   :   K   | ]  \  }}|d k(  xr |dk(    ywrd   rf   rg   s      r   rk   z=test_async_interactions_vertex_auth_header.<locals>.<genexpr>_  rl   rm   c              3   :   K   | ]  \  }}|d k(  xr |dk(    ywro   rf   rg   s      r   rk   z=test_async_interactions_vertex_auth_header.<locals>.<genexpr>b  rp   rm   )rG   r   rq   rV   r
   r   rs   rt   r   r*   r+   r   r.   r/   r0   r1   r5   ru   rv   )r   rV   r
   rw   r7   r>   r8   rx   ry   rz   r5   s              r   *test_async_interactions_vertex_auth_headerr   B  sf    *9-
))+%/%4-]bc& jj
.=P  + 
jj
Fyy{  	+  ZZ,,33 ? 4  H
   "((*&&LD&1gooG +!--/+ + + +  +!--/+ + + +-+ + ++ + + +sI   AE4!5E(+EEBE	E(	E4EE%	!E((E1-E4c                  ^  K   ddl m}  t        dd      }t        j                  j                  | dd      5 }t        j                  j                  t        d	t        j                               5 }|j                  j                  j                  d
d       d {   }|j                          |j                          |j                  \  }}|d   j                  }t        d |j!                         D              sJ 	 d d d        d d d        y 7 v# 1 sw Y   xY w# 1 sw Y   y xY ww)Nr   rT   Tr   r}   r   r_   r`   r   ra   rb   r%   r   c              3   :   K   | ]  \  }}|d k(  xr |dk(    ywr   rf   rg   s      r   rk   zDtest_async_interactions_vertex_key_no_auth_header.<locals>.<genexpr>~  r   rm   )rG   r   r   r   r*   r+   r
   rs   r   r.   r/   r0   r<   r1   r5   ru   rv   )r   r7   r>   r8   rx   ry   rz   r5   s           r   1test_async_interactions_vertex_key_no_auth_headerr   f  s!    *48& jj
.=P  + 
jj
Fyy{  	+  ZZ,,33 ? 4  H
   "'')&&LD&1gooG +!--/+ + + +'+ + ++ + + +sG   6D-9D!1+DDA$DD!
	D-DD	D!!D*&D-c                    K   ddl m}  t        j                         }d|_        t        ddd|      }t        j                  j                  | d      5 }t        d	t        d
d            |_
        |j                  j                  j                  dd       d {    |j                          |j                  d   d   }t!        |j"                        dk(  sJ 	 d d d        y 7 J# 1 sw Y   y xY ww)Nr   r   rW   TrX   rY   rZ   r   r   r   r    r!   r#   r$   r%   r   r   )rG   r
   r   rs   rt   r   r*   r+   r	   r   r-   r   r.   r/   r0   r1   r2   r3   )r
   rw   r7   r8   r"   s        r   "test_async_interactions_vertex_urlr     s     /IIKE1ET>M_deF			+V	4 T	!)#wvr7J!K	jj%%,,$ - 
 	
 	
 	$$&%%a(+7;;  $T  T  	T  TT T	
T Ts2   AC3AC'C%A C'	C3%C''C0,C3c                  t  
K   ddl m}  ddl m} t        j                         }d|_        t        ddd|      }d	|j                  j                   _        g d
}t        |      

fd}t        j                  j                  | d|      5 }t        j                  j                  |d      5 }t        dt        dd      ddi      t        dt        dd      ddi      t        dt        dd            g|_        |j                  j                  j!                  dd       d {    |j"                  dk(  sJ |j"                  dk(  sJ t%        d      D ]1  }|j&                  |   d   d   j(                  }	|	d   d||    k(  r1J  	 d d d        d d d        y 7 w# 1 sw Y   xY w# 1 sw Y   y xY ww)Nr   rT   r   rW   TrX   rY   rZ   rB   r   c                  "   K   t               S wr   r   r   s   r   r   zGtest_async_interactions_vertex_auth_refresh_on_retry.<locals>.get_token  s     Js   r   r   r   rC   r   r    rD   rE   rF   r   r!   r#   r$   r%   r   re   r   )rG   r   r
   r   rs   rt   r   r   rH   r   r*   r+   r	   r   rI   r.   r/   rJ   r   r   r5   )r   r
   rw   r7   r   r   r>   r8   r   r5   r   s             @r   4test_async_interactions_vertex_auth_refresh_on_retryr     s    ,/IIKE1ET>M_deF)*FJJ&1Ll#J  	

-)>IVKZk

*F3K7@ S'&""5@PRU?VWS'&""5@PRU?VWS'&""56!
	 jj%%,,3EW,UUU ++q000##q(((q 	KA..q1!4Q7??G?+a8I/JJJJ	KK K K 	VK K K KsP   BF8!F,,A:F &F'A!F 	F F,	F8F  F)	%F,,F51F8c            	        K   ddl m}  ddl m} t        j                         }d|_        t        ddd|      }t        j                  j                  | d	d
      5 }t        j                  j                  |d      5 }t        dt        dd            |_        |j                  j                  j                  ddddi       d {    |j                          |j                   d   d   j"                  }|d   dk(  sJ |j%                          |j'                          |j'                          |j                  j                  j                  ddddi       d {    |j                          |j                   d   d   j"                  }|d   dk(  sJ d|vsJ |j%                          d d d        d d d        y 7 7 c# 1 sw Y   xY w# 1 sw Y   y xY ww)Nr   rT   r   rW   TrX   rY   rZ   r   r   r`   r   r   r   r    r!   r#   r$   r   r   rP   r   re   r(   r   )rG   r   r
   r   rs   rt   r   r*   r+   r	   r   r-   r   r.   r/   r0   r1   r5   r<   r   )r   r
   rw   r7   r>   r8   r5   s          r   5test_async_interactions_vertex_extra_headers_overrider     s    ,/IIKE1ET>M_deF 	

-)>_].ar

*F3.7@!)#wvr7J!K	 jj%%,,$*,AB - 
 	
 	

 	$$&%%a(+33'+@@@@++-$$& jj%%,,$+\: - 
 	
 	

 	$$&%%a(+33'(L888g---++-=. . .	
	
+. . . .s]   AG!G<A
GG BGGAG/G7	G GGG		GGG)&__doc__r    r   r   unittestr   pytestrr   r   r	   rG   r
   r   r,   osr   fixturer   r9   r?   rL   rR   r{   r   r   r   r   markasyncior   r   r   r   r   r   r   r   r   rf   r   r   <module>r      s  " "     # : & 	 / /C".)C"!+F+<T KF&.P C C . . ) ) C C  !+ !+F + +6 T T  K KB &. &.r   