o
    pkj$N                     @   s\  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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ejjd d! Zejjd"d# Zejjd$d% Zejjd&d' Z ejjd(d) Z!ejjd*d+ Z"ejjd,d- Z#ejjd.d/ Z$ejjd0d1 Z%dS )2z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                 C   s   t D ]	}| j|dd qd S )NF)raising)ENV_VARSdelenv)monkeypatchvar r   g/home/djax/ivt_ai_plugin/venv/lib/python3.10/site-packages/google/genai/tests/interactions/test_auth.pyclear_env_vars#   s   r   c                 C   s   |  dd t }tjtd=}tdtddddid	d
|_|j	j
ddd |  |jd d }t|jds<J |jd dksEJ W d    d S 1 sPw   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"   r   r   r   test_interactions_gemini_url(   s   "r:   c              	   C   s   |  dd t }tjtdB}tjtd"}tdtdddd	id
d|_	|j
jddd |  W d    n1 s=w   Y  W d    d S W d    d S 1 sUw   Y  d S )Nr   r   _access_tokenr   r   r   r   r   r   r    r!   r%   r&   r'   )r+   r   r   r,   r-   r
   r.   r   r   r/   r0   r1   assert_not_calledr   r8   mock_access_tokenr9   r   r   r   'test_interactions_gemini_no_vertex_auth9   s   
Pr?   c              	   C   s   |  dd t }d|j_tjtdA}tdt	dddd	d
ddtdt	dddd	d
ddtdt	dddd	iddg|_
|jjddd |jdksMJ W d    d S 1 sXw   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,   r-   r.   r   r   side_effectr0   r1   
call_countr   r8   r9   r   r   r   test_interactions_gemini_retryH   s   "rJ   c                 C   s   |  dd t }tjtd?}tdtddddid	d
|_|j	j
ddddid |  |jd d }|jd dks>J |jd dksGJ W d    d S 1 sRw   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,   r-   r.   r   r   r/   r0   r1   r2   r3   r#   r7   r   r   r   &test_interactions_gemini_extra_headersV   s   "rO   c            
   
   C   s.  ddl m}  ddlm} t }d|_tddd|d	}tjj| d
ddi}tjj|dt	dt
ddddiddd<}|jjddd}|  |  |j\}}|d j}	tdd |	 D saJ tdd |	 D snJ W d    n1 sxw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   r
   r   r   test-quota-projectTtest-projectus-central1vertexaiprojectlocationcredentialsr;   fake-vertex-tokenr/   r   r   r   r   r   r   r    r!   gemini-2.5-flash/What is the largest planet in our solar system?r'   c                 s   $    | ]\}}|d ko|dkV  qdS authorizationzBearer fake-vertex-tokenNr   .0keyvaluer   r   r   	<genexpr>   
    
z7test_interactions_vertex_auth_header.<locals>.<genexpr>c                 s   r]   zx-goog-user-projectrQ   Nr   r`   r   r   r   rd      re   )rE   r
   httpxr   r   Mockquota_project_idr,   r-   r   r   r0   r1   r2   r3   r#   anyitems
r
   r.   credsr8   r>   r9   responseargskwargsr#   r   r   r   $test_interactions_vertex_auth_headerg   s>   

Prq   c            
   
   C   s
  ddl m}  ddlm} t }tddd}tjj| dd	d
\}tjj|dtdt	ddddiddd
/}|j
jddd}|  |  |j\}}|d j}	tdd |	 D s\J W d    n1 sfw   Y  W d    d S W d    d S 1 s~w   Y  d S )Nr   rP   r   r   Tr   rU   api_keyr;   rY   rZ   r   r   r   r   r   r   r    r!   r[   r\   r'   c                 s   r]   r*   r   Nr   r`   r   r   r   rd      re   z>test_interactions_vertex_key_no_auth_header.<locals>.<genexpr>)rE   r
   rg   r   r   rh   r,   r-   r   r   r0   r1   r2   r<   r3   r#   rj   rk   rl   r   r   r   +test_interactions_vertex_key_no_auth_header   s6   

Pru   c               	   C   s   t  } d| _tddd| d}t jjtdddP}t d	2}td
tddddidd|_	|j
jddd |  |jd d }t|jdksIJ W d    n1 sSw   Y  W d    d S W d    d S 1 skw   Y  d S )NrQ   TrR   rS   rT   r;   
fake-tokenrZ   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   rh   ri   r   r,   r-   r
   r   r   r/   r0   r1   r2   r3   r4   r5   )rm   r8   r>   r9   r"   r   r   r   test_interactions_vertex_url   s$   Prx   c               
      s  ddl m}  ddlm} t }d|_tddd|d	}d
|j _g d}t|fdd}tj	j
| d|d}tj	
|dl}tdtdddddddtdtdddddddtdtddddiddg}t|g   fdd}	|	|_|jjddd |jdksJ |jdksJ tdD ]}
 |
 d  d!||
  ksJ qW d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )"Nr   rP   r   r   rQ   TrR   rS   rT   rA   token1token2token3c                         t  S Nnextr   
token_iterr   r   	get_token      zAtest_interactions_vertex_auth_refresh_on_retry.<locals>.get_tokenr;   rG   r   rB   r   r   rC   r   rD   r    r!   r   r   c                    s     t| j tS r~   appenddictr#   r   reqro   rp   recorded_headersresponse_iterr   r   my_send   s   z?test_interactions_vertex_auth_refresh_on_retry.<locals>.my_sendr%   r&   r'   r_   Bearer )rE   r
   rg   r   r   rh   ri   rF   iterr,   r-   r   r   rG   r0   r1   rH   range)r
   r.   rm   r8   token_valuesr   r>   r9   	responsesr   ir   r   r   r   r   .test_interactions_vertex_auth_refresh_on_retry   s<    Pr   c               	   C   s`  ddl m}  ddlm} t }d|_tddd|d	}tjj| d
dd}tj|db}t	dt
ddddidd|_|jjddddid |  |jd d j}|d dksZJ |  |  |jjddddid |  |jd d j}|d dksJ d|vsJ W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   rP   r   r   rQ   TrR   rS   rT   r;   default-tokenrZ   r   r   r   r   r   r   r    r!   r%   r&   AuthorizationBearer manual-tokenrM   r_   r*   
manual-key)rE   r
   rg   r   r   rh   ri   r,   r-   r   r   r/   r0   r1   r2   r3   r#   
reset_mock)r
   r.   rm   r8   r>   r9   r#   r   r   r   /test_interactions_vertex_extra_headers_override   s@   Pr   c                    s   |  dd t }tjtdA}tdtddddid	d
|_|j	j
jdddI d H  |  |jd d }t|jdsAJ |jd dksJJ W d    d S 1 sUw   Y  d S r   )r+   r   r   r,   r-   r	   r   r   r/   aior0   r1   r2   r3   r4   r5   r6   r#   r7   r   r   r   "test_async_interactions_gemini_url  s   "r   c              	      s   |  dd t }tjtdF}tjtd&}tdtdddd	id
d|_	|j
jjdddI d H  |  W d    n1 sBw   Y  W d    d S W d    d S 1 sZw   Y  d S )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   r0   r1   r<   r=   r   r   r   -test_async_interactions_gemini_no_vertex_auth  s    
Pr   c              	      s   |  dd t }d|jj_tjtdE}t	dt
dddd	d
ddt	dt
dddd	d
ddt	dt
dddd	iddg|_|jjjdddI d H  |jdksSJ W d    d S 1 s^w   Y  d S r@   )r+   r   r   rE   rF   r   r,   r-   r	   r   r   rG   r0   r1   rH   rI   r   r   r   $test_async_interactions_gemini_retry'  s   
"r   c                    s   |  dd t }tjtdC}tdtddddid	d
|_|j	j
jddddidI d H  |  |jd d }|jd dksCJ |jd dksLJ W d    d S 1 sWw   Y  d S rK   )r+   r   r   r,   r-   r	   r   r   r/   r   r0   r1   r2   r3   r#   r7   r   r   r   ,test_async_interactions_gemini_extra_headers6  s   "r   c            
   
      s8  ddl m}  ddl m} t }d|_tddd|d}tjj| d	d
dm}tjj|dt	dt
ddddiddd@}|jjjdddI d H }|  |  |j\}}|d j}	tdd |	 D sfJ tdd |	 D ssJ W d    n1 s}w   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   rP   r	   rQ   TrR   rS   rT   r;   rY   rZ   r   r   r   r   r   r   r    r!   r[   r\   r'   r   c                 s   r]   r^   r   r`   r   r   r   rd   c  re   z=test_async_interactions_vertex_auth_header.<locals>.<genexpr>c                 s   r]   rf   r   r`   r   r   r   rd   f  re   )rE   r
   r	   r   rh   ri   r   r,   r-   r   r   r   r0   r1   r2   r3   r#   rj   rk   )
r
   r	   rm   r8   r>   r9   rn   ro   rp   r#   r   r   r   *test_async_interactions_vertex_auth_headerG  s@   

Pr   c               
      s   ddl m}  tddd}tjj| ddd`}tjjtd	td
tddddiddd3}|j	j
jdddI d H }|  |  |j\}}|d j}tdd | D sWJ W d    n1 saw   Y  W d    d S W d    d S 1 syw   Y  d S )Nr   rP   Tr   rr   r   rY   rZ   r   r   r   r   r   r   r    r!   r[   r\   r'   r   c                 s   r]   rt   r   r`   r   r   r   rd     re   zDtest_async_interactions_vertex_key_no_auth_header.<locals>.<genexpr>)rE   r
   r   r   r,   r-   r	   r   r   r   r0   r1   r2   r<   r3   r#   rj   rk   )r
   r8   r>   r9   rn   ro   rp   r#   r   r   r   1test_async_interactions_vertex_key_no_auth_headerj  s4   

Pr   c               	      s   ddl m}  t }d|_tddd|d}tjjtdd	d
V}tj| d6}t	dt
ddddidd|_|jjjdddI d H  |  |jd d }t|jdksVJ W d    n1 s`w   Y  W d    d S W d    d S 1 sxw   Y  d S )Nr   r   rQ   TrR   rS   rT   r;   rv   rZ   r   r   r   r   r   r   r    r!   r%   r&   r'   r   rw   )rE   r	   r   rh   ri   r   r,   r-   r
   r   r   r/   r   r0   r1   r2   r3   r4   r5   )r	   rm   r8   r>   r9   r"   r   r   r   "test_async_interactions_vertex_url  s(   Pr   c               
      s  ddl m}  ddl m} t }d|_tddd|d}d	|jj _g d
}t	|fdd}tj
j| d|d}tj
|dp}tdtdddddddtdtdddddddtdtddddiddg}t	|g   fdd}	|	|_|jjjdddI d H  |jdksJ |jdksJ tdD ]}
 |
 d d ||
  ksJ qW d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )!Nr   rP   r   rQ   TrR   rS   rT   rA   ry   c                      r}   r~   r   r   r   r   r   r     r   zGtest_async_interactions_vertex_auth_refresh_on_retry.<locals>.get_tokenr;   r   r   rB   r   r   rC   r   rD   r    r!   r   r   c                    s     t| j tS r~   r   r   r   r   r   r     s   zEtest_async_interactions_vertex_auth_refresh_on_retry.<locals>.my_sendr%   r&   r'   r_   r   )rE   r
   r	   r   rh   ri   r   r   rF   r   r,   r-   r   r   rG   r0   r1   rH   r   )r
   r	   rm   r8   r   r   r>   r9   r   r   r   r   r   r   4test_async_interactions_vertex_auth_refresh_on_retry  s>   
 Pr   c               	      sr  ddl m}  ddl m} t }d|_tddd|d}tjj| d	d
d}tj|dj}t	dt
ddddidd|_|jjjddddidI d H  |  |jd d j}|d dks_J |  |  |jjjddddidI d H  |  |jd d j}|d dksJ d|vsJ W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   rP   r   rQ   TrR   rS   rT   r;   r   rZ   r   r   r   r   r   r   r    r!   r%   r&   r   r   rM   r   r_   r*   r   )rE   r
   r	   r   rh   ri   r   r,   r-   r   r   r/   r   r0   r1   r2   r3   r#   r   )r
   r	   rm   r8   r>   r9   r#   r   r   r   5test_async_interactions_vertex_extra_headers_override  sB   Pr   )&__doc__r   r   r   unittestr   pytestrg   r   r   rE   r	   r
   r.   osr   fixturer   r:   r?   rJ   rO   rq   ru   rx   r   r   markasyncior   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sN   

"(&




"


&