o
    . �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mZ d dlmZ d dlmZ d dlmZmZmZmZ d dlmZ d d	lmZ d d
lm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_sessionÚclaim_session_atomicallyÚget_session_by_id)Úget_or_create_conversation)Úcreate_message)Úactive_sessionsÚadd_active_sessionÚget_active_sessionsÚremove_active_session)Úcreate_agent)Úcreate_access_token)Ú	AsyncMockc                 Ã   sR  �t ƒ }t|dd�I d H }|d }tƒ }t|d|ƒ |tv }|s]t d|fd|tf¡dt ¡ v s5t 	|¡r:t 
|¡nddt ¡ v sFt 	t¡rKt 
t¡nddœ }d	d
|i }tt |¡ƒ‚d }| j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 }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  } }}
|tv }|�swt d|fd|tf¡dt ¡ v �sMt 	|¡�rRt 
|¡nddt ¡ v �s`t 	t¡�ret 
t¡nddœ }d	d
|i }tt |¡ƒ‚d }t| d }d}
||
k}|�s«t d|fd||
f¡t 
|¡t 
|
¡dœ }dd|i }tt |¡ƒ‚d  } }}
t||ƒI d H }|d }d}
||
k}|�sét d|fd||
f¡t 
|¡t 
|
¡dœ }dd|i }tt |¡ƒ‚d  } }}
|  d¡}|j}tj}	||	k}
|
�sJt d|
fd||	f¡dt ¡ v �st 	|¡�rt 
|¡ndt 
|¡dt ¡ v �s/t 	t¡�r4t 
t¡ndt 
|	¡dœ }dd|i }tt |¡ƒ‚d  } }
}	dd„ | ¡ D ƒ}||v}|�s¡t d |fd!||f¡dt ¡ v �swt 	|¡�r|t 
|¡ndd"t ¡ v �sŠt 	|¡�r�t 
|¡nd"dœ }d	d
|i }tt |¡ƒ‚d }t|ƒ d S )#NÚsite_demo_123©Úsite_idÚ	sessionId©Úin©z%(py0)s in %(py2)sÚsidr	   ©Úpy0Úpy2úassert %(py4)sÚpy4ú/api/v1/handoff/endÚvisitor©r   ÚendedBy©Újson©ú==©zT%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py6)s
{%(py6)s = %(py4)s.HTTP_200_OK
}Úresr   ©r   r   r   Úpy6úassert %(py8)sÚpy8ÚENDED©z%(py1)s == %(py4)s©Úpy1r   úassert %(py6)sr(   r    ú/api/v1/admin/active-sessionsÚ	res_adminc                 S   ó   g | ]}|d  ‘qS ©r   © ©Ú.0Úsr4   r4   ú</web/html/dev/chatbot/backend/tests/test_end_chat_cleanup.pyÚ
<listcomp>)   ó    zVtest_ending_visitor_removes_session_from_in_memory_active_sessions.<locals>.<listcomp>©únot in)z%(py0)s not in %(py2)sÚsids_returned)r   r   r   r
   r	   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚpostÚstatus_coder   ÚHTTP_200_OKr"   r   Úgetr   )ÚclientÚdbÚsessionr   Úmock_wsÚ@py_assert1Ú@py_format3Ú@py_format5r&   Ú@py_assert5Ú@py_assert3Ú@py_format7Ú@py_format9Ú@py_assert0Ú@py_assert2Ú
db_sessionr1   r=   r4   r4   r8   ÚBtest_ending_visitor_removes_session_from_in_memory_active_sessions   s(   €Š®np”pl
¸”rX   c                 Ã   s€  �t ƒ }t|dd�I d H }|d }t||dd�I d H }d }||u}|sSt d|fd||f¡dt ¡ v s8t |¡r=t |¡ndt |¡d	œ }d
d|i }t	t 
|¡ƒ‚d  }}tƒ }	t|d|	dd� |tv }|s¥t d|fd|tf¡dt ¡ v s}t |¡r‚t |¡nddt ¡ v sŽt t¡r“t t¡nddœ }
dd|
i }t	t 
|¡ƒ‚d }| j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 }d }||k}|�s;t d|fd!||f¡t |¡t |¡d"œ }d#d$|i }t	t 
|¡ƒ‚d  } }}| ¡ d% }d}||k}|�sst d|fd!||f¡t |¡t |¡d"œ }d#d$|i }t	t 
|¡ƒ‚d  } }}|tv }|�sÁt d|fd|tf¡dt ¡ v �s—t |¡�rœt |¡nddt ¡ v �sªt t¡�r¯t t¡nddœ }
dd|
i }t	t 
|¡ƒ‚d }t| d }d }||k}|�sõt d|fd!||f¡t |¡t |¡d"œ }d#d$|i }t	t 
|¡ƒ‚d  } }}t||ƒI d H }|d }d }||k}|�s3t d|fd!||f¡t |¡t |¡d"œ }d#d$|i }t	t 
|¡ƒ‚d  } }}|d& }d}||k}|�sit d|fd!||f¡t |¡t |¡d"œ }d#d$|i }t	t 
|¡ƒ‚d  } }}|  d'¡}d(d)„ | ¡ D ƒ}||v}|�s¶t d*|fd+||f¡dt ¡ v �s›t |¡�r t |¡ndt |¡d	œ }d
d|i }t	t 
|¡ƒ‚d  }}t|ƒ d S ),Nr   r   r   Úagent_clean_1)Úagent_id)úis not)z%(py0)s is not %(py3)sÚclaimed)r   Úpy3úassert %(py5)sÚpy5ÚIN_CHAT)Ú
status_valr   r   r   r	   r   r   r   r   Úagentr   r!   r#   r%   r&   r   r'   r)   r*   r+   r,   r-   r/   r(   r    ÚassignedAgentIdr0   c                 S   r2   r3   r4   r5   r4   r4   r8   r9   N   r:   zTtest_ending_agent_removes_session_from_in_memory_active_sessions.<locals>.<listcomp>r;   )z%(py0)s not in %(py3)s)r   r   r   r>   r?   r@   rA   rB   rC   rD   rE   r   r
   r	   rF   rG   r   rH   r"   r   rI   r   )rJ   rK   rL   r   r\   rV   rN   Ú@py_format4Ú@py_format6rM   rO   rP   r&   rQ   rR   rS   rT   rU   rW   r1   r4   r4   r8   Ú@test_ending_agent_removes_session_from_in_memory_active_sessions/   s*   €xŠ°pp”pll
Œrf   c                 Ã   s   �t ƒ }t|dd�I d H }|d }t||dƒI d H }|d }t|||ddƒI d H  | jd|dd	œd
� |  d|› d�¡}|j}tj}||k}	|	s�t	 
d|	fd||f¡dt ¡ v s]t	 |¡rbt	 |¡ndt	 |¡dt ¡ v srt	 t¡rwt	 t¡ndt	 |¡dœ }
dd|
i }tt	 |¡ƒ‚d  } }	}| ¡ }|d }||k}|sÑt	 
d|fd||f¡t	 |¡dt ¡ v sºt	 |¡r¿t	 |¡nd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 }t|ƒ}	d }|	|k}|�sŒt	 
d|fd!|	|f¡d"t ¡ v �sit	 t¡�rnt	 t¡nd"t	 |¡t	 |	¡t	 |¡d#œ }d$d%|i }tt	 |¡ƒ‚d  } }	 }}|d d& d' }d}	||	k}|�sÈt	 
d|fd||	f¡t	 |¡t	 |	¡dœ }dd|i }
tt	 |
¡ƒ‚d  } }}	d S )(Nr   r   r   ÚconversationIdÚuserzMessage before endingr   rb   r   r!   z/api/v1/session/z/history?siteId=site_demo_123r#   r%   Úres_histr   r'   r)   r*   )z%(py1)s == %(py3)sr   )r.   r]   r^   r_   r+   r,   r-   r/   r(   r    Úmessagesé   )z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)sÚlen)r   r   r   Úpy7zassert %(py9)sÚpy9r   Úcontent)r   r   r   r   rF   rI   rG   r   rH   r>   r?   r@   rA   rB   rC   rD   rE   r"   rl   )rJ   rK   rL   r   ÚconvÚconv_idri   rN   rQ   rR   rS   rT   ÚdatarU   rV   rd   re   rP   Ú@py_assert6Ú@py_format8Ú@py_format10r4   r4   r8   Ú@test_ended_session_history_still_retrievable_via_restoration_apiS   s    €®|ll¦xrv   )#Úbuiltinsr@   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter>   ÚpytestÚfastapir   Úapp.databaser   Ú#app.repositories.session_repositoryr   r   r   Ú(app.repositories.conversation_repositoryr   Ú#app.repositories.message_repositoryr   Úapp.services.presencer	   r
   r   r   Ú!app.repositories.agent_repositoryr   Úapp.utils.securityr   Úunittest.mockr   ÚmarkÚanyiorX   rf   rv   r4   r4   r4   r8   Ú<module>   s    " 
"
#