o
    $h�jê  ã                   @   sô   d dl Zd dlm  mZ d dlZd dlmZ d dl	m
Z
 d dlmZmZ d dlmZmZ ejdd„ ƒZejjdd	„ ƒZejj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dS )é    N)Ústatus)Úget_database)Úcreate_agentÚget_agent_by_email)Úcreate_access_tokenÚverify_passwordc                  Ã   sn   �t ƒ } t| dddddd�I d H }t| ddd	d
dd�I d H }t|d ddœƒ}t|d d
dœƒ}||||dœS )Nzadmin.main@example.comzAdminPassword123!z
Main AdminÚADMINÚACTIVE)ÚemailÚpasswordÚnameÚroler   úagent.normal@example.comúAgentPassword123!zNormal AgentÚAGENTÚagentId)Úsubr   )ÚadminÚagentÚadmin_tokenÚagent_token)r   r   r   )Údbr   r   r   r   © r   ú8/web/html/dev/chatbot/backend/tests/test_admin_agents.pyÚsetup_admin_and_agent   s2   €úúür   c                 Ã   sô  �dd|d › �i}| j dddddd	d
œ|d�}|j}tj}||k}|sit d|fd||f¡dt ¡ v s9t |¡r>t 	|¡ndt 	|¡dt ¡ v sNt t¡rSt 	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  }
 }}|	d }
d}|
|k}|�st d|fd|
|f¡t 	|
¡t 	|¡dœ }dd|i }t
t |¡ƒ‚d  }
 }}d}
|
|	v}|�sNt d|fd|
|	f¡t 	|
¡dt ¡ v �s7t |	¡�r<t 	|	¡nddœ }dd |i }t
t |¡ƒ‚d  }
}tƒ }t|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 }t||ƒ}d%}||u }|�sît d&|fd'||f¡d(t ¡ v �sÇt t¡�rÌt 	t¡nd(t 	|¡t 	|¡t 	|¡t 	|¡d)œ }d*d+|i }t
t |¡ƒ‚d  } } } }}d S ),NÚAuthorizationúBearer r   ú/api/v1/admin/agentszNew Traineeztrainee@example.comzTraineePass123!r   r	   )r   r
   r   r   r   ©ÚjsonÚheaders©ú==)zY%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py6)s
{%(py6)s = %(py4)s.HTTP_201_CREATED
}Úresr   ©Úpy0Úpy2Úpy4Úpy6úassert %(py8)sÚpy8r   ©z%(py1)s == %(py4)s©Úpy1r'   úassert %(py6)sr(   r
   r   ÚpasswordHash©únot in©z%(py1)s not in %(py3)sÚdata©r-   Úpy3úassert %(py5)sÚpy5)úis not)z%(py0)s is not %(py3)sÚdb_agent)r%   r5   T)Úis)z9%(py6)s
{%(py6)s = %(py0)s(%(py2)s, %(py4)s)
} is %(py9)sr   )r%   r&   r'   r(   Úpy9zassert %(py11)sÚpy11)ÚpostÚstatus_coder   ÚHTTP_201_CREATEDÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationr   r   r   r   )Úclientr   r    r#   Ú@py_assert1Ú@py_assert5Ú@py_assert3Ú@py_format7Ú@py_format9r3   Ú@py_assert0Ú@py_assert2Ú@py_format5Ú@py_format4Ú@py_format6r   r9   Ú@py_assert8Ú@py_assert7Ú@py_format10Ú@py_format12r   r   r   Útest_admin_can_create_agent$   s*   €ûú®jjl~~¼rW   c                 Ã   sL  �dd|d › �i}| j dddddœ|d	�}|j}tj}||k}|sgt d
|fd||f¡dt ¡ v s7t |¡r<t 	|¡ndt 	|¡dt ¡ v sLt t¡rQt 	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 S )Nr   r   r   r   zUnauthorized Agentzunauth@example.comúPassword123!©r   r
   r   r   r!   ©z[%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py6)s
{%(py6)s = %(py4)s.HTTP_403_FORBIDDEN
}r#   r   r$   r)   r*   Údetailz#Admin role required for this actionr+   r,   r.   r(   )r=   r>   r   ÚHTTP_403_FORBIDDENr@   rA   rB   rC   rD   rE   rF   rG   r   ©rH   r   r    r#   rI   rJ   rK   rL   rM   rN   rO   rP   r   r   r   Útest_agent_cannot_create_agent<   ó   €ýü®rr^   c                 C   sÈ   | j dddddœd�}|j}tj}||k}|s\t d|fd||f¡d	t ¡ v s,t |¡r1t 	|¡nd	t 	|¡d
t ¡ v sAt t¡rFt 	t¡nd
t 	|¡dœ }dd|i }t
t |¡ƒ‚d  } }}d S )Nr   z
Anon Agentzanon@example.comrX   rY   ©r   r!   ©z^%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py6)s
{%(py6)s = %(py4)s.HTTP_401_UNAUTHORIZED
}r#   r   r$   r)   r*   )r=   r>   r   ÚHTTP_401_UNAUTHORIZEDr@   rA   rB   rC   rD   rE   rF   rG   )rH   r#   rI   rJ   rK   rL   rM   r   r   r   Ú(test_unauthenticated_cannot_create_agentH   s   
ý²rc   c                 Ã   sL  �dd|d › �i}| j dddddœ|d	�}|j}tj}||k}|sgt d
|fd||f¡dt ¡ v s7t |¡r<t 	|¡ndt 	|¡dt ¡ v sLt t¡rQt 	t¡ndt 	|¡dœ }dd|i }t
t |¡ƒ‚d  } }}d}	| ¡ d }|	|v }
|
sžt d|
fd|	|f¡t 	|	¡t 	|¡dœ }dd|i }t
t |¡ƒ‚d  }	 }
}d S )Nr   r   r   r   zDuplicate Agentr   rX   rY   r   r!   ©zZ%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py6)s
{%(py6)s = %(py4)s.HTTP_409_CONFLICT
}r#   r   r$   r)   r*   zalready existsr[   ©Úin©z%(py1)s in %(py4)sr,   r.   r(   )r=   r>   r   ÚHTTP_409_CONFLICTr@   rA   rB   rC   rD   rE   rF   rG   r   r]   r   r   r   Ú)test_duplicate_email_returns_409_conflictQ   r_   ri   c                 Ã   s  �dd|d › �i}| j d|d�}|j}tj}||k}|sbt d|fd||f¡dt ¡ v s2t |¡r7t 	|¡ndt 	|¡d	t ¡ v sGt t¡rLt 	t¡nd	t 	|¡d
œ }dd|i }t
t |¡ƒ‚d  } }}| ¡ }	t|	ƒ}
d}|
|k}|s½t d|fd|
|f¡dt ¡ v s�t t¡r’t 	t¡nddt ¡ v sžt |	¡r£t 	|	¡ndt 	|
¡t 	|¡dœ }dd|i }t
t |¡ƒ‚d  }
 }}|	D ]>}d}||v}
|
sÿt d|
fd||f¡t 	|¡dt ¡ v sèt |¡rít 	|¡nddœ }dd|i }t
t |¡ƒ‚d  }}
qÅd S )Nr   r   r   r   ©r    r!   ©zT%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py6)s
{%(py6)s = %(py4)s.HTTP_200_OK
}r#   r   r$   r)   r*   é   )ú>=)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} >= %(py6)sÚlenÚagents)r%   r-   r5   r(   r/   r0   r2   Úar4   r6   r7   )Úgetr>   r   ÚHTTP_200_OKr@   rA   rB   rC   rD   rE   rF   rG   r   rn   )rH   r   r    r#   rI   rJ   rK   rL   rM   ro   rO   Ú@py_assert4rp   rN   rQ   rR   r   r   r   Útest_admin_can_list_agents]   s   €®®zÿrt   c           	      Ã   sÔ   �dd|d › �i}| j d|d�}|j}tj}||k}|sbt d|fd||f¡dt ¡ v s2t |¡r7t 	|¡ndt 	|¡d	t ¡ v sGt t¡rLt 	t¡nd	t 	|¡d
œ }dd|i }t
t |¡ƒ‚d  } }}d S )Nr   r   r   r   rj   r!   rZ   r#   r   r$   r)   r*   )rq   r>   r   r\   r@   rA   rB   rC   rD   rE   rF   rG   )	rH   r   r    r#   rI   rJ   rK   rL   rM   r   r   r   Útest_agent_cannot_list_agentsh   s   €²ru   c                 Ã   s,  �dd|d › �i}|d d }| j d|› �ddi|d	�}|j}tj}||k}|snt d
|fd||f¡dt ¡ v s>t |¡rCt 	|¡ndt 	|¡dt ¡ v sSt t¡rXt 	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  }
 }}| jddddœd�}|j}tj}||k}|�st d
|fd||f¡dt ¡ v s×t |¡rÜt 	|¡ndt 	|¡dt ¡ v sìt t¡rñt 	t¡ndt 	|¡dœ }dd|i }	t
t |	¡ƒ‚d  } }}| j d|› �ddi|d	�}|j}tj}||k}|�spt d
|fd||f¡dt ¡ v �s>t |¡�rCt 	|¡ndt 	|¡dt ¡ v �sUt t¡�rZt 	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  }
 }}| jddddœd�}|j}tj}||k}|�st d
|fd||f¡dt ¡ v �sÜt |¡�rát 	|¡ndt 	|¡dt ¡ v �sót t¡�røt 	t¡ndt 	|¡dœ }dd|i }	t
t |	¡ƒ‚d  } }}d S )Nr   r   r   r   r   ú/api/v1/admin/agents/r   ÚINACTIVEr   r!   rk   Ú	patch_resr$   r)   r*   r+   r,   r.   r(   ú/api/v1/auth/loginr   r   ©r
   r   r`   ra   Ú	login_resr	   Úreactivate_resÚ
login_res2)Úpatchr>   r   rr   r@   rA   rB   rC   rD   rE   rF   rG   r   r=   rb   )rH   r   r    Ú	target_idrx   rI   rJ   rK   rL   rM   rN   rO   rP   r{   r|   r}   r   r   r   Ú*test_admin_deactivate_and_reactivate_agento   s&   €®n
þ°¸p
þ¼r€   c                 Ã   s”  �dd|d › �i}|d d }| j d|› �ddi|d	�}|j}tj}||k}|snt d
|fd||f¡dt ¡ v s>t |¡rCt 	|¡ndt 	|¡dt ¡ v sSt t¡rXt 	t¡ndt 	|¡dœ }dd|i }	t
t |	¡ƒ‚d  } }}d}
| ¡ d }|
|v }|s¥t d|fd|
|f¡t 	|
¡t 	|¡dœ }dd|i }t
t |¡ƒ‚d  }
 }}| j d|› �ddi|d	�}|j}tj}||k}|�s
t d
|fd||f¡dt ¡ v sÚt |¡rßt 	|¡ndt 	|¡dt ¡ v sït t¡rôt 	t¡ndt 	|¡dœ }dd|i }	t
t |	¡ƒ‚d  } }}d}
| ¡ d }|
|v }|�sBt d|fd|
|f¡t 	|
¡t 	|¡dœ }dd|i }t
t |¡ƒ‚d  }
 }}d S )Nr   r   r   r   r   rv   r   rw   r   r!   rd   r#   r$   r)   r*   zlast active adminr[   re   rg   r,   r.   r(   r   r   Úres2)r~   r>   r   rh   r@   rA   rB   rC   rD   rE   rF   rG   r   )rH   r   r    Úadmin_idr#   rI   rJ   rK   rL   rM   rN   rO   rP   r�   r   r   r   Ú(test_cannot_deactivate_last_active_adminŒ   s   €®n°trƒ   c                 Ã   s|  �dd|d › �i}|d d }| j d|› d�dd	i|d
�}|j}tj}||k}|sot d|fd||f¡dt ¡ v s?t |¡rDt 	|¡ndt 	|¡dt ¡ v sTt t¡rYt 	t¡ndt 	|¡dœ }dd|i }	t
t |	¡ƒ‚d  } }}| j ddddœd�}
|
j}tj}||k}|sÐt d|fd||f¡dt ¡ v s t |
¡r¥t 	|
¡ndt 	|¡dt ¡ v sµt t¡rºt 	t¡ndt 	|¡dœ }dd|i }	t
t |	¡ƒ‚d  } }}| j ddd	dœd�}|j}tj}||k}|�s6t d|fd||f¡dt ¡ v �st |¡�r	t 	|¡ndt 	|¡dt ¡ v �st t¡�r t 	t¡ndt 	|¡dœ }dd|i }	t
t |	¡ƒ‚d  } }}d S )Nr   r   r   r   r   rv   z/reset-passwordÚnewPasswordzNewBrandPassword999!r   r!   rk   Ú	reset_resr   r$   r)   r*   ry   r   r   rz   r`   ra   Ú	old_loginÚ	new_login)r=   r>   r   rr   r@   rA   rB   rC   rD   rE   rF   rG   rb   )rH   r   r    r   r…   rI   rJ   rK   rL   rM   r†   r‡   r   r   r   Útest_admin_password_reset›   s&   €ÿþ®
þ®
þ¼rˆ   )ÚbuiltinsrB   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter@   ÚpytestÚfastapir   Úapp.databaser   Ú!app.repositories.agent_repositoryr   r   Úapp.utils.securityr   r   Úfixturer   ÚmarkÚanyiorW   r^   rc   ri   rt   ru   r€   rƒ   rˆ   r   r   r   r   Ú<module>   s0   " 


	





