o
    �jÂ  ã                   @   sÊ   d dl Zd dlm  mZ d dlZd dlmZm	Z	 d dl
Z
d dlm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dS )é    N)ÚpatchÚ	AsyncMock)Úresolve_countryc                  Ã   s   �t dƒI d H } d}| |k}|s3t d|fd| |f¡t | ¡t |¡dœ }dd|i }tt |¡ƒ‚d  }  }}t dƒI d H } d}| |k}|skt d|fd| |f¡t | ¡t |¡dœ }dd|i }tt |¡ƒ‚d  }  }}t d	ƒI d H } d}| |k}|s£t d|fd| |f¡t | ¡t |¡dœ }dd|i }tt |¡ƒ‚d  }  }}t d
ƒI d H } d}| |k}|sÛt d|fd| |f¡t | ¡t |¡dœ }dd|i }tt |¡ƒ‚d  }  }}t dƒI d H } d}| |k}|�st d|fd| |f¡t | ¡t |¡dœ }dd|i }tt |¡ƒ‚d  }  }}t dƒI d H } d}| |k}|�sMt d|fd| |f¡t | ¡t |¡dœ }dd|i }tt |¡ƒ‚d  }  }}t dƒI d H } d}| |k}|�s†t d|fd| |f¡t | ¡t |¡dœ }dd|i }tt |¡ƒ‚d  }  }}t dƒI d H } d}| |k}|�s¿t d|fd| |f¡t | ¡t |¡dœ }dd|i }tt |¡ƒ‚d  }  }}t dƒI d H } d}| |k}|�søt d|fd| |f¡t | ¡t |¡dœ }dd|i }tt |¡ƒ‚d  }  }}d S )Nz	127.0.0.1zLocal / Demo©ú==©z%(py1)s == %(py4)s©Úpy1Úpy4úassert %(py6)sÚpy6z::1Ú	localhostÚ
testclientz 127.0.0.1 z10.0.0.5z192.168.1.100z
172.16.0.1z172.31.255.255©r   Ú
@pytest_arÚ_call_reprcompareÚ	_safereprÚAssertionErrorÚ_format_explanation©Ú@py_assert0Ú@py_assert3Ú@py_assert2Ú@py_format5Ú@py_format7© r   ú>/web/html/dev/chatbot/backend/tests/test_country_resolution.pyÚ.test_resolve_country_localhost_and_private_ips   s   €pppprrrrvr   c                  Ã   sV  �t d ƒI d H } d}| |k}|s3t d|fd| |f¡t | ¡t |¡dœ }dd|i }tt |¡ƒ‚d  }  }}t dƒI d H } d}| |k}|skt d|fd| |f¡t | ¡t |¡dœ }dd|i }tt |¡ƒ‚d  }  }}t dƒI d H } d}| |k}|s£t d|fd| |f¡t | ¡t |¡dœ }dd|i }tt |¡ƒ‚d  }  }}d S )	NÚUnknownr   r   r   r   r   Ú z   r   r   r   r   r   Ú#test_resolve_country_none_and_empty   s   €pptr    c                  Ã   sê   �d} t jddddœd�}tdtd��X}||_t| ƒI d H }d}||k}|sVt d	|fd
||f¡dt 	¡ v s;t 
|¡r@t |¡ndt |¡dœ }dd|i }tt |¡ƒ‚d  }}| d| › d�¡ W d   ƒ d S 1 snw   Y  d S )Nz8.8.8.8éÈ   ÚsuccesszUnited States©ÚstatusÚcountry©Ústatus_codeÚjsonúhttpx.AsyncClient.get©Únew_callabler   ©z%(py0)s == %(py3)sÚresult©Úpy0Úpy3úassert %(py5)sÚpy5zhttp://ip-api.com/json/z?fields=status,country)ÚhttpxÚResponser   r   Úreturn_valuer   r   r   Ú@py_builtinsÚlocalsÚ_should_repr_global_namer   r   r   Úassert_called_once_with©Ú	public_ipÚmock_responseÚmock_getr-   r   Ú@py_assert1Ú@py_format4Ú@py_format6r   r   r   Ú&test_resolve_country_public_ip_success   s   €þx"ürA   c                  Ã   sØ   �d} t jddddœd�}tdtd��O}||_t| ƒI d H }d	}||k}|sVt d
|fd||f¡dt 	¡ v s;t 
|¡r@t |¡ndt |¡dœ }dd|i }tt |¡ƒ‚d  }}W d   ƒ d S 1 sew   Y  d S )Nz203.0.113.195r!   Úfailzreserved range)r$   Úmessager&   r)   r*   r   r   r,   r-   r.   r1   r2   ©r3   r4   r   r   r5   r   r   r   r6   r7   r8   r   r   r   r:   r   r   r   Ú$test_resolve_country_api_fail_status(   s   €þz"ýrE   c                  Ã   sÒ   �d} t jddd�}tdtd��O}||_t| ƒI d H }d}||k}|sSt d|fd	||f¡d
t 	¡ v s8t 
|¡r=t |¡nd
t |¡dœ }dd|i }tt |¡ƒ‚d  }}W d   ƒ d S 1 sbw   Y  d S )Nú1.1.1.1iô  zInternal Server Error)r'   Útextr)   r*   r   r   r,   r-   r.   r1   r2   rD   r:   r   r   r   Ú$test_resolve_country_http_error_code4   s   €z"ýrH   c                  Ã   óÊ   �d} t dtd��R}t d¡|_t| ƒI d H }d}||k}|sOt d|fd||f¡dt 	¡ v s4t 
|¡r9t |¡ndt |¡d	œ }d
d|i }tt |¡ƒ‚d  }}W d   ƒ d S 1 s^w   Y  d S )NrF   r)   r*   zConnection timed outr   r   r,   r-   r.   r1   r2   )r   r   r3   ÚTimeoutExceptionÚside_effectr   r   r   r6   r7   r8   r   r   r   ©r;   r=   r-   r   r>   r?   r@   r   r   r   Ú&test_resolve_country_timeout_exception=   ó   €z"ýrM   c                  Ã   rI   )NrF   r)   r*   zNetwork unreachabler   r   r,   r-   r.   r1   r2   )r   r   r3   ÚConnectErrorrK   r   r   r   r6   r7   r8   r   r   r   rL   r   r   r   Ú,test_resolve_country_network_error_exceptionE   rN   rP   c                 Ã   sª  �ddl m} ddlm} d}| jd|ddœd�}| ¡ d	 }tjd
dddœd�}tdt	d���}||_
| jdd	|id|› �ddœd�}|j}	d}
|	|
k}|sƒt d|fd|	|
f¡dt ¡ v sdt |¡rit |¡ndt |	¡t |
¡dœ }dd|i }tt |¡ƒ‚d  }	 }}
| ¡ d }|ƒ }|||ƒI d H }d }||u}	|	sÒt d|	fd||f¡d t ¡ v s·t |¡r¼t |¡nd t |¡d!œ }d"d#|i }tt |¡ƒ‚d  }	}|d$ }d}||k}|�st d|fd%||f¡t |¡t |¡d&œ }d'd(|i }tt |¡ƒ‚d  } }}|d) }d}||k}|�s<t d|fd%||f¡t |¡t |¡d&œ }d'd(|i }tt |¡ƒ‚d  } }}W d   ƒ d S 1 �sNw   Y  d S )*Nr   )Úget_database)Úget_session_by_idzgeo-test-store.comz/api/v1/tenant/registerzGeo Test Store)ÚdomainÚname)r(   ÚsiteIdr!   r"   ÚGermanyr#   r&   r)   r*   z/api/v1/session/initzhttp://z198.51.100.42)ÚOriginzX-Forwarded-For)r(   ÚheaderséÉ   r   )z3%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py5)sÚ	init_resp)r/   Úpy2r2   zassert %(py7)sÚpy7Ú	sessionId)úis not)z%(py0)s is not %(py3)sÚsession_docr.   r1   r2   Ú	ipAddressr   r   r   r   r%   )Úapp.databaserQ   Ú#app.repositories.session_repositoryrR   Úpostr(   r3   r4   r   r   r5   r'   r   r   r6   r7   r8   r   r   r   )ÚclientrQ   rR   rS   Úreg_respÚsite_idr<   r=   rZ   r>   Ú@py_assert4r   r@   Ú@py_format8ÚsidÚdbr_   r   r?   r   r   r   r   r   r   Ú1test_session_init_with_public_ip_resolves_countryM   s8   €
þþýŠxln$òrk   )Úbuiltinsr6   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter   ÚpytestÚunittest.mockr   r   r3   Úapp.utils.country_resolverr   ÚmarkÚanyior   r    rA   rE   rH   rM   rP   rk   r   r   r   r   Ú<module>   s(   " 






