a
    €AWep  ã                   @   s   d dl Zd dlm  mZ d dlZd dlZd dlm	Z	 d dl
mZmZmZ d dlZd dlZd dlm	Z	 d dlmZ d dlmZ G dd„ dƒZdS )é    N)ÚAuthService)ÚpatchÚMockÚ	MagicMock)ÚUser)ÚQc                   @   sö   e Zd Zedƒdd„ ƒZe ed¡dd„ ƒZe ed¡dd„ ƒZe	j
jd	d
edƒdd„ ƒƒZe ed¡dd„ ƒZe	j
jdd
e ed¡dd„ ƒƒZedƒdd„ ƒZe	j
jdd
edƒdd„ ƒƒZedƒdd„ ƒZedƒdd„ ƒZedƒdd„ ƒZdS ) ÚTestAuthUserzapp.models.base.Base.savec                 C   s2   t ƒ }t | ¡ ¡}| |¡ | ¡  | ¡  d S )N)r   ÚjsonÚloadsÚto_jsonÚcreate_userÚassert_called_onceÚassert_called_with)ÚselfZsave_mockerÚuser_model_factoryÚauthÚpayload© r   ú!/app/tests/unit/test_auth_user.pyÚtest_save_user_called   s
    
z"TestAuthUser.test_save_user_calledÚobjectsc           
      C   sÎ   t  | ¡ ¡}tƒ }||_tƒ }||j_t |d ¡}||k}|s¼t 	d|fd||f¡dt
 ¡ v slt |¡rvt |¡nddt
 ¡ v sŽt |¡r˜t |¡nddœ }dd|i }	tt |	¡ƒ‚d }|j ¡  d S )	NÚ	public_id©ú==©z%(py0)s == %(py2)sÚresultÚ	mock_user©Úpy0Úpy2úassert %(py4)sÚpy4)r	   r
   r   r   Úreturn_valueÚfirstr   Úget_user_by_idÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationr   ©
r   Úmockerr   r   Z
mock_queryr   r   Ú@py_assert1Ú@py_format3Ú@py_format5r   r   r   Útest_get_user_by_id   s    Šz TestAuthUser.test_get_user_by_idc           
      C   sÎ   t  | ¡ ¡}tƒ }||_tƒ }||j_t |d ¡}||k}|s¼t 	d|fd||f¡dt
 ¡ v slt |¡rvt |¡nddt
 ¡ v sŽt |¡r˜t |¡nddœ }dd|i }	tt |	¡ƒ‚d }|j ¡  d S ©	NÚemailr   r   r   r   r   r    r!   )r	   r
   r   r   r"   r#   r   Úget_user_by_email_or_usernamer%   r&   r'   r(   r)   r*   r+   r,   r   r-   r   r   r   Ú"test_get_user_by_email_or_username0   s    Šz/TestAuthUser.test_get_user_by_email_or_usernamez)Q searh should be called but isn't called)Úreasonzmongoengine.queryset.visitorc                 C   sB   t  | ¡ ¡}t |d ¡}t|ƒ |j |d ¡ |j ¡  d S )Nr4   )	r	   r
   r   r   r5   Úprintr   Úassert_called_once_withr   ©r   r.   r   r   r   r   r   r   Útest_get_user_by_email_Q_calledF   s
    z,TestAuthUser.test_get_user_by_email_Q_calledc           
      C   sÎ   t  | ¡ ¡}tƒ }||_tƒ }||j_t |d ¡}||k}|s¼t 	d|fd||f¡dt
 ¡ v slt |¡rvt |¡nddt
 ¡ v sŽt |¡r˜t |¡nddœ }dd|i }	tt |	¡ƒ‚d }|j ¡  d S r3   )r	   r
   r   r   r"   r#   r   Úget_user_by_emailr%   r&   r'   r(   r)   r*   r+   r,   r   r-   r   r   r   Útest_get_user_by_emailP   s    Šz#TestAuthUser.test_get_user_by_emailzemail has changed in every callc                 C   sT   t  | ¡ ¡}t |d ¡}| ¡  | t|d dt|d  d¡d dB ¡ d S )NÚusername)Úusername__icontainsr4   ú@r   )Úemail__icontains)	r	   r
   r   r   Úsearch_users_by_keywordr   r9   r   Úsplitr:   r   r   r   Útest_search_users_by_keyworde   s    z)TestAuthUser.test_search_users_by_keywordzapp.services.auth.AuthServicec                 C   s@   t  | ¡ ¡}t |d |d ¡}|j ¡  |j |d ¡ d S ©Nr4   Úpassword)r	   r
   r   r   Úauthenticater<   r   r9   r:   r   r   r   Ú*test_authenticate_get_user_by_email_calledt   s    
z7TestAuthUser.test_authenticate_get_user_by_email_calledzcheck_pasword should be calledzapp.models.user.Userc                 C   s@   t  | ¡ ¡}t |d |d ¡}|j ¡  |j |d ¡ d S rE   )r	   r
   r   r   rG   Úcheck_passwordr   r9   r:   r   r   r   rH      s    
c                 C   s@   t  | ¡ ¡}t |d |d ¡}|j ¡  |j |d ¡ d S )Nr   rF   )r	   r
   r   r   Úchange_passwordr$   r   r9   r:   r   r   r   Ú*test_change_password_get_user_by_id_calledŠ   s    
z7TestAuthUser.test_change_password_get_user_by_id_calledc                 C   s@   t  | ¡ ¡}t |d |d ¡}|j ¡  |j |d ¡ d S )Nr   Úrole)r	   r
   r   r   Úpromote_userr$   r   r9   r:   r   r   r   Ú'test_promote_user_get_user_by_id_called•   s    
z4TestAuthUser.test_promote_user_get_user_by_id_calledc           	      C   s¸   t  | ¡ ¡}t |d |d ¡}|j ¡  |j |d ¡ d}||k}|s¬t 	d|fd||f¡dt
 ¡ v svt |¡r€t |¡ndt |¡dœ }dd	|i }tt |¡ƒ‚d  }}d S )
Nr   rF   Tr   )z%(py0)s == %(py3)sr   )r   Úpy3zassert %(py5)sÚpy5)r	   r
   r   r   Úreset_passwordr$   r   r9   r%   r&   r'   r(   r)   r*   r+   r,   )	r   r.   r   r   r   Ú@py_assert2r/   Ú@py_format4Ú@py_format6r   r   r   Ú)test_reset_password_get_user_by_id_called¡   s
    
z6TestAuthUser.test_reset_password_get_user_by_id_calledN)Ú__name__Ú
__module__Ú__qualname__r   r   Úobjectr   r2   r6   ÚpytestÚmarkÚskipr;   r=   ÚxfailrD   rH   rK   rN   rU   r   r   r   r   r      s2   









	


r   )Úbuiltinsr'   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter%   rZ   ÚmongoengineÚapp.services.authr   Úunittest.mockr   r   r   r	   Ú
app.modelsr   Úmongoengine.queryset.visitorr   r   r   r   r   r   Ú<module>   s   "