
    hj$N                     V   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j        j        d             Zej        j        d             Zej        j        d             Zej        j        d             Z ej        j        d             Z!ej        j        d             Z"ej        j        d             Z#ej        j        d             Z$ej        j        d             Z%dS )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                 H    t           D ]}|                     |d           d S )NF)raising)ENV_VARSdelenv)monkeypatchvars     m/var/www/app.qaans.com/backend/venv/lib/python3.11/site-packages/google/genai/tests/interactions/test_auth.pyclear_env_varsr   #   s7     / /3..../ /    c                    |                      dd           t                      }t          j                            t
          d          5 }t          dt          dd          ddid	
          |_        |j	        
                    dd           |                                 |j        d         d         }t          |j                                      d          sJ |j        d         dk    sJ 	 d d d            d S # 1 swxY w Y   d S Nr   test-api-keysend   POST content-typeapplication/json{"status": "completed"}requestheaderscontent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endswithr&   r   client	mock_sendr%   s       r   test_interactions_gemini_urlr=   (   su   '888XXF 
		:v	.	. 	C)!)#wvr7J7JUcewTx  C\  "]  "]  "]	""$ 	# 	
 	
 	
 	$$&&&%a(+7;(()?@@@@@/0NBBBBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	Cs   
B(D  DDc           	         |                      dd           t                      }t          j                            t
          d          5 }t          j                            t          d          5 }t          dt          dd          dd	id
          |_	        |j
                            dd           |                                 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   r   _access_tokenr   r   r   r    r!   r"   r#   r$   r(   r)   r*   )r.   r   r   r/   r0   r   r1   r	   r   r2   r3   r4   assert_not_calledr   r;   mock_access_tokenr<   s       r   'test_interactions_gemini_no_vertex_authrC   9   s{   '888XXF 	
-99	.=N
*f--	.1:!)#wvr7J7JUcewTx  C\  "]  "]  "]	""$ 	# 	
 	
 	
 	++---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s7   
&C-0AC	C-C	C-C	C--C14C1c           
         |                      dd           t                      }d|j        _        t          j                            t          d          5 }t          dt          dd          dd	d
d          t          dt          dd          dd	d
d          t          dt          dd          dd	id          g|_
        |j                            dd           |j        dk    sJ 	 d d d            d S # 1 swxY w Y   d S Nr   r      r     r   r    1r"   zretry-after-msr!   r#   r$   r   r!   r(   r)   r*   r   )r.   r   _api_clientmax_retriesr   r/   r0   r1   r	   r   side_effectr3   r4   
call_countr   r;   r<   s      r   test_interactions_gemini_retryrO   H   s   '888XXF%&F"			:v	.	. ))S'&""5"5RUgy?z?z  E^  _  _  _S'&""5"5RUgy?z?z  E^  _  _  _S'&""5"5Pb?c  nG  H  H  H!
	
 	"");7"KKK#q((((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )s   BC==DDc                    |                      dd           t                      }t          j                            t
          d          5 }t          dt          dd          ddid	
          |_        |j	        
                    ddddi           |                                 |j        d         d         }|j        d         dk    sJ |j        d         dk    sJ 	 d d d            d S # 1 swxY w Y   d S Nr   r   r   r   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/   r0   r1   r	   r   r2   r3   r4   r5   r6   r&   r:   s       r   &test_interactions_gemini_extra_headersrU   V   so   '888XXF			:v	.	. 
C)!)#wvr7J7JUcewTx  C\  "]  "]  "]	""$,k: 	# 	
 	
 	

 	$$&&&%a(+01[@@@@/0NBBBBB
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
Cs   
BC--C14C1c                     ddl m}  ddlm} t	          j                    }d|_        t          ddd|	          }t          j                            | d
d          5 }t          j                            |dt          dt          dd          ddid                    5 }|j                            dd          }|                                 |                                 |j        \  }}|d         j        }	t!          d |	                                D                       sJ t!          d |	                                D                       sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   r   r   r   test-quota-projectTtest-projectus-central1vertexaiprojectlocationcredentialsr?   fake-vertex-tokenr2   r   r   r   r    r!   r"   r#   r$   gemini-2.5-flash/What is the largest planet in our solar system?r*   c              3   4   K   | ]\  }}|d k    o|dk    V  dS authorizationzBearer fake-vertex-tokenN .0keyvalues      r   	<genexpr>z7test_interactions_vertex_auth_header.<locals>.<genexpr>   J       + +C 	F5,F#F+ + + + + +r   c              3   4   K   | ]\  }}|d k    o|dk    V  dS zx-goog-user-projectrX   Nrg   rh   s      r   rl   z7test_interactions_vertex_auth_header.<locals>.<genexpr>   K       + +C 	$$F2F)F+ + + + + +r   )rJ   r   httpxr   r   Mockquota_project_idr/   r0   r	   r   r3   r4   r5   r6   r&   anyitems
r   r1   credsr;   rB   r<   responseargskwargsr&   s
             r   $test_interactions_vertex_auth_headerr{   g   sm   ******((((((
)++%/%4-]bccc& j
7J   + 
j
fWVR-@-@>[mJn  yR  S  S  S   	+  ")) ? *  H
   """((***&LD&1goG + +!--//+ + + + + + + +  + +!--//+ + + + + + + + +-+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +s8   AE; B6E#E;#E'	'E;*E'	+E;;E?E?c                     ddl m}  ddlm} t	          j                    }t          dd          }t          j                            | dd	
          5 }t          j                            |dt          dt          dd          ddid          
          5 }|j
                            dd          }|                                 |                                 |j        \  }}|d         j        }	t!          d |	                                D                       sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   rW   r   r   Tr   r\   api_keyr?   r`   ra   r   r   r   r    r!   r"   r#   r$   rb   rc   r*   c              3   4   K   | ]\  }}|d k    o|dk    V  dS r-   r   Nrg   rh   s      r   rl   z>test_interactions_vertex_key_no_auth_header.<locals>.<genexpr>   J       + +C 	;E^$;+ + + + + +r   )rJ   r   rq   r   r   rr   r/   r0   r	   r   r3   r4   r5   r@   r6   r&   rt   ru   rv   s
             r   +test_interactions_vertex_key_no_auth_headerr      s   ******((((((
)++%4888& j
7J   + 
j
fWVR-@-@>[mJn  yR  S  S  S   	+  ")) ? *  H
   """'')))&LD&1goG + +!--//+ + + + + + + + +'+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +s8   AEB	D-!E-D1	1E4D1	5EE	E	c            	      D   t          j                    } d| _        t          ddd|           }t           j                            t          dd          5 }t          j        d	          5 }t          d
t          dd          ddid          |_	        |j
                            dd           |                                 |j        d         d         }t          |j                  dk    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NrX   TrY   rZ   r[   r?   
fake-tokenra   zhttpx.Client.sendr   r   r    r!   r"   r#   r$   r(   r)   r*   r   nhttps://us-central1-aiplatform.googleapis.com/v1beta1/projects/test-project/locations/us-central1/interactions)r   rr   rs   r   r/   r0   r   r	   r   r2   r3   r4   r5   r6   r7   r8   )rw   r;   rB   r<   r%   s        r   test_interactions_vertex_urlr      s   IKKE1ET>M_deeeF 	
-|TTTXi
&''T+4!)#wvr7J7JUcewTx  C\  "]  "]  "]	""$ 	# 	
 	
 	
 	$$&&&%a(+7;  $T  T  T  T  T  TT T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T Ts7   D*BC=1D=D	DD	DDDc                     ddl m}  ddlm} t	          j                    }d|_        t          ddd|	          }d
|j         _        g d}t          |          fd}t          j	        
                    | d|          5 }t          j	        
                    |d          5 }t          dt          dd          dddd          t          dt          dd          dddd          t          dt          dd          ddid          g}t          |          g fd}	|	|_        |j                            dd           |j        dk    sJ |j        dk    sJ t#          d          D ]}
|
         d         d||
          k    sJ  	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S ) Nr   rW   r   r   rX   TrY   rZ   r[   rF   token1token2token3c                  "    t                     S Nnext
token_iters   r   	get_tokenzAtest_interactions_vertex_auth_refresh_on_retry.<locals>.get_token       Jr   r?   rL   r   rG   r   r    rH   r"   rI   r#   r$   r   r!   c                 p                         t          | j                             t                    S r   appenddictr&   r   reqry   rz   recorded_headersresponse_iters      r   my_sendz?test_interactions_vertex_auth_refresh_on_retry.<locals>.my_send   s/    ##D$5$5666&&&r   r(   r)   r*   rf   Bearer )rJ   r   rq   r   r   rr   rs   rK   iterr/   r0   r	   r   rL   r3   r4   rM   range)r   r1   rw   r;   token_valuesr   rB   r<   	responsesr   ir   r   r   s              @@@r   .test_interactions_vertex_auth_refresh_on_retryr      s   ,,,,,,******IKKE1ET>M_deeeF%&F"111Ll##J          	
-iPPWTe
*f--W1: S'&""5"5RUgy?z?z  E^  _  _  _S'&""5"5RUgy?z?z  E^  _  _  _S'&""5"5Pb?c  nG  H  H  H
	
 Y	' 	' 	' 	' 	' 	' !(	"");7"KKK +q0000#q((((q 	W 	WA#A&7;V\RS_;V;VVVVVV	W+W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W Ws7   !F7$C.FF7F#	#F7&F#	'F77F;>F;c            	      p   ddl m}  ddlm} t	          j                    }d|_        t          ddd|	          }t          j                            | d
d          5 }t          j                            |d          5 }t          dt          dd          ddid          |_        |j                            ddddi           |                                 |j        d         d         j        }|d         dk    sJ |                                 |                                 |j                            ddddi           |                                 |j        d         d         j        }|d         dk    sJ d|vsJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   rW   r   r   rX   TrY   rZ   r[   r?   default-tokenra   r   r   r   r    r!   r"   r#   r$   r(   r)   AuthorizationBearer manual-tokenrS   rf   r-   
manual-key)rJ   r   rq   r   r   rr   rs   r/   r0   r	   r   r2   r3   r4   r5   r6   r&   
reset_mock)r   r1   rw   r;   rB   r<   r&   s          r   /test_interactions_vertex_extra_headers_overrider      s   ,,,,,,******IKKE1ET>M_deeeF 	
-WW.[l
*f--.1:!)#wvr7J7JUcewTx  C\  "]  "]  "]	 	""$*,AB 	# 	
 	
 	

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

 	$$&&&%a(+3'(L8888g-----9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .s7   !F+=D	FF+F	F+F	F++F/2F/c                 4  K   |                      dd           t                      }t          j                            t
          d          5 }t          dt          dd          ddid	
          |_        |j	        j
                            dd           d {V  |                                 |j        d         d         }t          |j                                      d          sJ |j        d         dk    sJ 	 d d d            d S # 1 swxY w Y   d S r   )r.   r   r   r/   r0   r
   r	   r   r2   aior3   r4   r5   r6   r7   r8   r9   r&   r:   s       r   "test_async_interactions_gemini_urlr     s     '888XXF			+V	4	4 	C	!)#wvr7J7JUcewTx  C\  "]  "]  "]	j%,,$ - 
 
 	
 	
 	
 	
 	
 	
 	
 	$$&&&%a(+7;(()?@@@@@/0NBBBBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	Cs   B3DDDc           	        K   |                      dd           t                      }t          j                            t
          d          5 }t          j                            t          d          5 }t          dt          dd          dd	id
          |_	        |j
        j                            dd           d {V  |                                 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   r   _async_access_tokenr   r   r   r    r!   r"   r#   r$   r(   r)   r*   )r.   r   r   r/   r0   r   r
   r	   r   r2   r   r3   r4   r@   rA   s       r   -test_async_interactions_gemini_no_vertex_authr     s     '888XXF 	
-)>??	.CT
*F33	.7@!)#wvr7J7JUcewTx  C\  "]  "]  "]	j%,,$ - 
 
 	
 	
 	
 	
 	
 	
 	
 	++---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s7   &C:2A$C"C:"C&	&C:)C&	*C::C>C>c           
      8  K   |                      dd           t                      }d|j        j        _        t
          j                            t          d          5 }t          dt          dd          dd	d
d          t          dt          dd          dd	d
d          t          dt          dd          dd	id          g|_        |j        j                            dd           d {V  |j        dk    sJ 	 d d d            d S # 1 swxY w Y   d S rE   )r.   r   r   rJ   rK   r   r/   r0   r
   r	   r   rL   r3   r4   rM   rN   s      r   $test_async_interactions_gemini_retryr   '  s     '888XXF)*FJ&			+V	4	4 )	S'&""5"5RUgy?z?z  E^  _  _  _S'&""5"5RUgy?z?z  E^  _  _  _S'&""5"5Pb?c  nG  H  H  H!
	
 j%,,3EW,UUUUUUUUU#q((((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )s   B$DDDc                   K   |                      dd           t                      }t          j                            t
          d          5 }t          dt          dd          ddid	
          |_        |j	        j
                            ddddi           d {V  |                                 |j        d         d         }|j        d         dk    sJ |j        d         dk    sJ 	 d d d            d S # 1 swxY w Y   d S rQ   )r.   r   r   r/   r0   r
   r	   r   r2   r   r3   r4   r5   r6   r&   r:   s       r   ,test_async_interactions_gemini_extra_headersr   6  s     '888XXF			+V	4	4 
C	!)#wvr7J7JUcewTx  C\  "]  "]  "]	j%,,$,k: - 
 
 	
 	
 	
 	
 	
 	
 	

 	$$&&&%a(+01[@@@@/0NBBBBB
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
Cs   B C::C>C>c                  *  K   ddl m}  ddl m} t          j                    }d|_        t          ddd|          }t          j                            | d	d
          5 }t          j                            |dt          dt          dd          ddid                    5 }|j        j                            dd           d {V }|                                 |                                 |j        \  }}|d         j        }	t#          d |	                                D                       sJ t#          d |	                                D                       sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   rW   r
   rX   TrY   rZ   r[   r?   r`   ra   r   r   r   r    r!   r"   r#   r$   rb   rc   r*   r   c              3   4   K   | ]\  }}|d k    o|dk    V  dS re   rg   rh   s      r   rl   z=test_async_interactions_vertex_auth_header.<locals>.<genexpr>c  rm   r   c              3   4   K   | ]\  }}|d k    o|dk    V  dS ro   rg   rh   s      r   rl   z=test_async_interactions_vertex_auth_header.<locals>.<genexpr>f  rp   r   )rJ   r   r
   r   rr   rs   r   r/   r0   r	   r   r   r3   r4   r5   r6   r&   rt   ru   )
r   r
   rw   r;   rB   r<   rx   ry   rz   r&   s
             r   *test_async_interactions_vertex_auth_headerr   G  s     ******------
)++%/%4-]bccc& j
7J   + 
j
FWVR-@-@>[mJn  yR  S  S  S   	+  Z,33 ? 4        H
   """((***&LD&1goG + +!--//+ + + + + + + +  + +!--//+ + + + + + + + +-+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +s8   AF"CE0$F0E4	4F7E4	8FFFc                    K   ddl m}  t          dd          }t          j                            | dd          5 }t          j                            t          d	t          d
t          dd          ddid                    5 }|j	        j
                            dd           d {V }|                                 |                                 |j        \  }}|d         j        }t!          d |                                D                       sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   rW   Tr   r}   r   r`   ra   r   r   r   r    r!   r"   r#   r$   rb   rc   r*   r   c              3   4   K   | ]\  }}|d k    o|dk    V  dS r   rg   rh   s      r   rl   zDtest_async_interactions_vertex_key_no_auth_header.<locals>.<genexpr>  r   r   )rJ   r   r   r   r/   r0   r
   r	   r   r   r3   r4   r5   r@   r6   r&   rt   ru   )r   r;   rB   r<   rx   ry   rz   r&   s           r   1test_async_interactions_vertex_key_no_auth_headerr   j  s&     ******4888& j
.=P   + 
j
FWVR-@-@>[mJn  yR  S  S  S   	+  Z,33 ? 4        H
   """'')))&LD&1goG + +!--//+ + + + + + + + +'+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +s7   A	D>BD&D>&D*	*D>-D*	.D>>EEc            	        K   ddl m}  t          j                    }d|_        t          ddd|          }t          j                            t          dd	
          5 }t          j                            | d          5 }t          dt          dd          ddid          |_        |j        j                            dd           d {V  |                                 |j        d         d         }t#          |j                  dk    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   r   rX   TrY   rZ   r[   r?   r   ra   r   r   r   r    r!   r"   r#   r$   r(   r)   r*   r   r   )rJ   r
   r   rr   rs   r   r/   r0   r   r	   r   r2   r   r3   r4   r5   r6   r7   r8   )r
   rw   r;   rB   r<   r%   s         r   "test_async_interactions_vertex_urlr     s'     //////IKKE1ET>M_deeeF 	
-|TTTXi
*F33T7@!)#wvr7J7JUcewTx  C\  "]  "]  "]	j%,,$ - 
 
 	
 	
 	
 	
 	
 	
 	
 	$$&&&%a(+7;  $T  T  T  T  T  TT T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T Ts7   !D4>BDD4D 	 D4#D 	$D44D8;D8c                    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
                            | d|          5 }t          j
                            |d          5 }t          dt          dd          dddd          t          dt          dd          dddd          t          dt          dd          ddid          g}t          |          g fd}	|	|_        |j        j                            dd           d {V  |j        dk    sJ |j        dk    sJ t%          d          D ]}
|
         d         d||
          k    sJ  	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   rW   r   rX   TrY   rZ   r[   rF   r   c                  "    t                     S r   r   r   s   r   r   zGtest_async_interactions_vertex_auth_refresh_on_retry.<locals>.get_token  r   r   r?   r   r   rG   r   r    rH   r"   rI   r#   r$   r   r!   c                 t   K                        t          | j                             t                    S r   r   r   s      r   r   zEtest_async_interactions_vertex_auth_refresh_on_retry.<locals>.my_send  s3      ##D$5$5666&&&r   r(   r)   r*   rf   r   )rJ   r   r
   r   rr   rs   r   r   rK   r   r/   r0   r	   r   rL   r3   r4   rM   r   )r   r
   rw   r;   r   r   rB   r<   r   r   r   r   r   r   s              @@@r   4test_async_interactions_vertex_auth_refresh_on_retryr     s)     ,,,,,,//////IKKE1ET>M_deeeF)*FJ&111Ll##J          	
-iPPWTe
*F33W7@ S'&""5"5RUgy?z?z  E^  _  _  _S'&""5"5RUgy?z?z  E^  _  _  _S'&""5"5Pb?c  nG  H  H  H
	
 Y	' 	' 	' 	' 	' 	' !(	j%,,3EW,UUUUUUUUU +q0000#q((((q 	W 	WA#A&7;V\RS_;V;VVVVVV	W)W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W Ws7   
!G	+C9F1%G	1F5	5G	8F5	9G		GGc            	        K   ddl m}  ddl m} t          j                    }d|_        t          ddd|          }t          j                            | d	d
          5 }t          j                            |d          5 }t          dt          dd          ddid          |_        |j        j                            ddddi           d {V  |                                 |j        d         d         j        }|d         dk    sJ |                                 |                                 |j        j                            ddddi           d {V  |                                 |j        d         d         j        }|d         dk    sJ d|vsJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   rW   r   rX   TrY   rZ   r[   r?   r   ra   r   r   r   r    r!   r"   r#   r$   r(   r)   r   r   rS   r   rf   r-   r   )rJ   r   r
   r   rr   rs   r   r/   r0   r	   r   r2   r   r3   r4   r5   r6   r&   r   )r   r
   rw   r;   rB   r<   r&   s          r   5test_async_interactions_vertex_extra_headers_overrider     s     ,,,,,,//////IKKE1ET>M_deeeF 	
-WW.[l
*F33.7@!)#wvr7J7JUcewTx  C\  "]  "]  "]	 j%,,$*,AB - 
 
 	
 	
 	
 	
 	
 	
 	

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

 	$$&&&%a(+3'(L8888g-----9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .s7   !G?DF+G+F/	/G2F/	3GG
G)&__doc__r    r   r   unittestr   pytestrq   r   r	   rJ   r
   r   r1   osr   fixturer   r=   rC   rO   rU   r{   r   r   r   r   markasyncior   r   r   r   r   r   r   r   r   rg   r   r   <module>r      s  " " !                    # # # # # # # # : : : : : : : : & & & & & & 				   / / /C C C". . .) ) )C C C" +  +  +D+ + +<T T T$%W %W %WP$. $. $.L C C C . . . ) ) ) C C C   +  +  +D + + +6 T T T& $W $W $WL $. $. $. $. $.r   