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 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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)Úcreate_sessionÚclaim_session_atomicallyÚupdate_session_statusÚget_session_by_id)Úget_or_create_conversation)Úcreate_message)Úcreate_access_tokenc           
      Ã   s,  �|   d¡}|j}tj}||k}|sWt d|fd||f¡dt ¡ v s't |¡r,t 	|¡ndt 	|¡dt ¡ v s<t t¡rAt 	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 )NzC/api/v1/session/sess_nonexistent_99999/history?siteId=site_demo_123©ú==)z[%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py6)s
{%(py6)s = %(py4)s.HTTP_404_NOT_FOUND
}Úresr   ©Úpy0Úpy2Úpy4Úpy6úassert %(py8)sÚpy8z	not foundÚdetail)Úin)z%(py1)s in %(py4)s©Úpy1r   úassert %(py6)sr   )ÚgetÚstatus_coder   ÚHTTP_404_NOT_FOUNDÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚjson)
Úclientr   Ú@py_assert1Ú@py_assert5Ú@py_assert3Ú@py_format7Ú@py_format9Ú@py_assert0Ú@py_assert2Ú@py_format5© r0   ú;/web/html/dev/chatbot/backend/tests/test_session_history.pyÚ0test_session_history_unknown_session_returns_404
   s   €
®rr2   c                 Ã   s¦  �t ƒ }t|dd�I d H }|d }|  d|› d�¡}|j}tj}||k}|skt d|fd||f¡dt 	¡ v s;t 
|¡r@t |¡ndt |¡d	t 	¡ v sPt 
t¡rUt t¡nd	t |¡d
œ }dd|i }	tt |	¡ƒ‚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 )NÚsite_alpha_111©Úsite_idÚ	sessionIdú/api/v1/session/ú/historyr   )z[%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py6)s
{%(py6)s = %(py4)s.HTTP_403_FORBIDDEN
}Úres1r   r   r   r   z/history?siteId=site_wrong_222Úres2)r   r   r   r   r   ÚHTTP_403_FORBIDDENr   r   r    r!   r"   r#   r$   r%   )r'   ÚdbÚsessionÚsidr9   r(   r)   r*   r+   r,   r:   r0   r0   r1   Ú2test_session_history_unauthorized_access_prevented   s   €®²r?   c                 Ã   s„  �t ƒ }t|dd�I d H }|d }|  d|› d�¡}|j}tj}||k}|skt d|fd||f¡dt 	¡ v s;t 
|¡r@t |¡ndt |¡d	t 	¡ v sPt 
t¡rUt 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 }d }||u }|�sNt d|fd||f¡t |¡t |¡dœ }dd|i }tt |¡ƒ‚d  } }}|
d }d }||u }|�s„t d|fd||f¡t |¡t |¡dœ }dd|i }tt |¡ƒ‚d  } }}|
d }g }||k}|�sºt d|fd||f¡t |¡t |¡dœ }dd|i }tt |¡ƒ‚d  } }}d S )NÚsite_demo_123r4   r6   r7   ú/history?siteId=site_demo_123r   ©zT%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py6)s
{%(py6)s = %(py4)s.HTTP_200_OK
}r   r   r   r   r   ©z%(py1)s == %(py3)sr>   ©r   Úpy3úassert %(py5)sÚpy5ÚsiteId©z%(py1)s == %(py4)sr   r   r   ÚRINGINGÚassignedAgentId©Úis©z%(py1)s is %(py4)sÚconversationIdÚmessages)r   r   r   r   r   ÚHTTP_200_OKr   r   r    r!   r"   r#   r$   r%   r&   )r'   r<   r=   r>   r   r(   r)   r*   r+   r,   Údatar-   r.   Ú@py_format4Ú@py_format6r/   r0   r0   r1   Ú9test_existing_session_with_no_messages_returns_empty_list   s   €®|jlllprU   c                 Ã   s$  �t ƒ }t|dd�I d H }|d }t||dƒI d H }|d }t|||ddƒI d H  t|||ddƒI d H  t|||dd	ƒI d H  |  d
|› d�¡}|j}tj}||k}	|	s™t 	d|	fd||f¡dt
 ¡ v sit |¡rnt |¡ndt |¡dt
 ¡ v s~t t¡rƒt 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 }t|ƒ}	d}|	|k}|�s,t 	d|fd|	|f¡dt
 ¡ v �s	t t¡�rt t¡ndt |¡t |	¡t |¡dœ }dd|i }tt |¡ƒ‚d  } }	 }}|d d d  }d}	||	k}|�sht 	d|fd!||	f¡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 d& d  }d}	||	k}|�sÜt 	d|fd!||	f¡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 d' d  }d}	||	k}|�sPt 	d|fd!||	f¡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@   r4   r6   rO   ÚuserzFirst visitor messageÚagentzFirst agent responsezSecond visitor messager7   rA   r   rB   r   r   r   r   r   rC   Úconv_idrD   rF   rG   rP   é   ©z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)sÚlen©r   r   r   Úpy7úassert %(py9)sÚpy9r   ÚrolerI   r   r   r   Úcontenté   é   )r   r   r	   r
   r   r   r   rQ   r   r   r    r!   r"   r#   r$   r%   r&   r[   )r'   r<   r=   r>   ÚconvrX   r   r(   r)   r*   r+   r,   rR   r-   r.   rS   rT   Ú@py_assert6Ú@py_format8Ú@py_format10r/   r0   r0   r1   Ú6test_session_history_restores_messages_chronologically.   s(   €®|¦tttttxrh   c                 Ã   sP  �t ƒ }t|dddd�I d H }|d }t|dd�I d H }|d }t|||d	�I d H }d }||u}|sbt d
|fd||f¡dt ¡ v sGt |¡rLt 	|¡ndt 	|¡dœ }	dd|	i }
t
t |
¡ƒ‚d  }}t||dƒI d H }t||d |ddƒI d H  t|ddœƒ}dd|› �i}| j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}|�sVt d|fd"||f¡t 	|¡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 }||u}|�sÍt d
|fd-||f¡t 	|¡t 	|¡d#œ }d$d%|i }t
t |¡ƒ‚d  } }}|d. }t|ƒ}d/}||k}|�st d|fd0||f¡d1t ¡ v �sût t¡�r t 	t¡nd1t 	|¡t 	|¡t 	|¡d2œ }d3d4|i }t
t |¡ƒ‚d  } } }}d S )5Nztitan@example.comzPassword123!zTitan Agent)ÚemailÚpasswordÚnameÚagentIdr@   r4   r6   ©Úagent_id)úis not)z%(py0)s is not %(py3)sÚclaimed)r   rE   rF   rG   rO   rV   zAre you available?ÚAGENT)Úsubr`   ÚAuthorizationzBearer r7   r8   )Úheadersr   rB   r   r   r   r   r   ÚIN_CHATrI   r   r   r   ÚmodeÚhumanrK   rC   rn   rD   Ú
assignedAt)z%(py1)s is not %(py4)srP   rb   rZ   r[   r\   r^   r_   )r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r	   r
   r   r   r   r   rQ   r&   r[   )r'   r<   rW   rn   r=   r>   rp   r.   r(   rS   rT   rd   Úagent_tokenrt   r   r)   r*   r+   r,   rR   r-   r/   re   rf   rg   r0   r0   r1   Ú2test_in_chat_assignment_fields_survive_restorationH   s(   €x®ll‚lªrz   c                 Ã   sâ  �t ƒ }t|dd�I d H }|d }t||dd�I d H  t||dƒI d H }t||d |ddƒI d H  t||d	ƒI d H  |d
  d|d idddii¡I d H  |  d|› d�¡}|j}t	j
}||k}|s§t d|fd||f¡dt ¡ v swt |¡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  } }}|d }t|ƒ}d}||k}|�sgt d|fd||f¡dt ¡ v �sDt t¡�rIt t¡ndt |¡t |¡t |¡dœ }d d!|i }tt |¡ƒ‚d  } } }}d S )"Nr@   r4   r6   Úagent_1rm   rO   rV   zBye!ÚENDEDÚconversationsz$setÚendedByrW   r7   rA   r   rB   r   r   r   r   r   rI   r   r   r   rP   rb   rZ   r[   r\   r^   r_   )r   r   r   r	   r
   r   Ú
update_oner   r   r   rQ   r   r   r    r!   r"   r#   r$   r%   r&   r[   )r'   r<   r=   r>   rd   r   r(   r)   r*   r+   r,   rR   r-   r.   r/   re   rf   rg   r0   r0   r1   Ú&test_ended_session_history_retrievablee   s   €&®jlªr€   c                 Ã   sÜ  �t ƒ }t|dd�I d H }|d }t||ƒI d H }tdƒD ]b}|  d|› d�¡}|j}tj}||k}	|	syt 	d|	fd||f¡d	t
 ¡ v sIt |¡rNt |¡nd	t |¡d
t
 ¡ v s^t t¡rct t¡nd
t |¡dœ }
dd|
i }tt |¡ƒ‚d  } }	}qt||ƒI d H }|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  d|i¡I d H }d }	||	u }|�sft 	d|fd||	f¡t |¡t |	¡dœ }dd|i }
tt |
¡ƒ‚d  } }}	d S )Nr@   r4   r6   rY   r7   rA   r   rB   r   r   r   r   r   rI   r   r   r   rv   r}   rL   rN   )r   r   r   Úranger   r   r   rQ   r   r   r    r!   r"   r#   r$   r%   Úfind_one)r'   r<   r=   r>   Úsession_beforeÚ_r   r(   r)   r*   r+   r,   Úsession_afterr-   r.   r/   r0   r0   r1   Ú8test_history_request_is_read_only_and_does_not_mutate_dbz   s   €°nnp€r†   )!Úbuiltinsr    Ú_pytest.assertion.rewriteÚ	assertionÚrewriter   ÚpytestÚfastapir   Úapp.databaser   Ú!app.repositories.agent_repositoryr   Ú#app.repositories.session_repositoryr   r   r   r   Ú(app.repositories.conversation_repositoryr	   Ú#app.repositories.message_repositoryr
   Úapp.utils.securityr   ÚmarkÚanyior2   r?   rU   rh   rz   r€   r†   r0   r0   r0   r1   Ú<module>   s,   " 





