o
    )h�jÔ  ã                   @   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 d dlmZmZ d dlmZmZ dd„ Zdd	„ Zejjd
d„ ƒZdd„ Zdd„ ZdS )é    N)Ústatus)Úget_database)Úget_or_create_conversationÚget_conversation_by_session_id)Úcreate_messageÚget_messages_by_conversation_idc                 C   s  dt  ¡ jd d… › d�}| jd|ddœd�}| ¡ d }d	d
|› �i}| jdd|i|d�}| ¡ d }| jd|ddœd�}|j}tj}	||	k}
|
s�t 	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  } }
}	| ¡ 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 S )#Nzmsg-é   ú.comú/api/v1/tenant/registerzMessage Store©ÚdomainÚname©ÚjsonÚsiteIdÚOriginúhttp://ú/api/v1/session/init©r   ÚheadersÚ	sessionIdú/api/v1/messageúHello World©r   Úmessage©ú==©zT%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py6)s
{%(py6)s = %(py4)s.HTTP_200_OK
}Ú	msg_resp1r   ©Úpy0Úpy2Úpy4Úpy6úassert %(py8)sÚpy8©z%(py1)s == %(py3)sÚ
session_id©Úpy1Úpy3úassert %(py5)sÚpy5Úreplyú-Please wait while we connect you to an agent.©z%(py1)s == %(py4)s©r)   r"   úassert %(py6)sr#   )ÚuuidÚuuid4ÚhexÚpostr   Ústatus_coder   ÚHTTP_200_OKÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanation)Úclientr   Úreg_respÚsite_idr   Ú	init_respr'   r   Ú@py_assert1Ú@py_assert5Ú@py_assert3Ú@py_format7Ú@py_format9Ú@py_assert0Ú@py_assert2Ú@py_format4Ú@py_format6Ú@py_format5© rN   ú3/web/html/dev/chatbot/backend/tests/test_message.pyÚtest_send_message_api_flow   s    
þ
þ®€trP   c                 C   s8  dt  ¡ jd d… › d�}| jd|ddœd�}| ¡ d }d	d
|› �i}| jdd|i|d�}| ¡ d }| jd|ddœd�}|j}tj}	||	k}
|
s�t 	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  } }
}	| ¡ d }d}
||
k}|sÆt 	d|fd||
f¡t |¡t |
¡dœ }dd|i }tt |¡ƒ‚d  } }}
| jdd|id� | jd|ddœd�}|j}tj}	||	k}
|
�s5t 	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}|�smt 	d|fd||
f¡t |¡t |
¡dœ }dd|i }tt |¡ƒ‚d  } }}
| jd"d|i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' }
||
v }|�st 	d(|fd)||
f¡t |¡t |
¡dœ }dd|i }tt |¡ƒ‚d  } }}
d S )*Nzstates-r   r	   r
   zStates Storer   r   r   r   r   r   r   r   r   zFirst inquiryr   r   r   Úr1r   r   r$   r%   r-   r.   r/   r0   r1   r#   z/api/v1/handoff/acceptzSecond inquiryÚr2zMessage delivered to agent.z/api/v1/handoff/endzThird inquiry)z]%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py6)s
{%(py6)s = %(py4)s.HTTP_400_BAD_REQUEST
}Úr3zended sessionÚdetail©Úin©z%(py1)s in %(py4)s)r2   r3   r4   r5   r   r6   r   r7   r8   r9   r:   r;   r<   r=   r>   r?   ÚHTTP_400_BAD_REQUEST)r@   r   rA   rB   r   rC   r'   rQ   rD   rE   rF   rG   rH   rI   rJ   rM   rR   rS   rN   rN   rO   Útest_send_message_all_states   s(   
þ®n¸p¸trY   c                  Ã   sô  �t ƒ } dt ¡ jd d… › �}dt ¡ jd d… › �}t| ||ƒI d H }|d }||k}|s_t d|fd||f¡t |¡dt 	¡ v sHt 
|¡rMt |¡nd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 }t| ||ƒI d H }|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  }}t| ||ddƒI d H }|d }||k}|�slt d|fd||f¡t |¡dt 	¡ v �sUt 
|¡�rZt |¡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  } }}t| |ƒI d H }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 }d}||k}|�srt d|fd||f¡t |¡t |¡dœ }	dd|	i }
tt |
¡ƒ‚d  } }}d S )!NÚsess_é   Úsite_r   r   r&   r'   r(   r+   r,   r   rB   r   Úopenr/   r0   r1   r#   ÚconversationIdÚconv_idÚuserr   ÚroleÚcontenté   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sÚlenÚmessages)r    r)   r*   r#   r$   r%   r   )r   r2   r3   r4   r   r8   r9   r=   r:   r;   r<   r>   r?   r   r   rd   )Údbr'   rB   Úconv1rI   rJ   rK   rL   rF   rM   rG   r_   Úconv2Úuser_msgre   rE   Ú@py_assert4rH   rN   rN   rO   Ú*test_conversation_and_message_repositories?   s$   €||j‚‚ll¸trk   c           
      C   s4  | j ddddœd�}|j}tj}||k}|s[t d|fd||f¡dt ¡ v s+t |¡r0t 	|¡ndt 	|¡d	t ¡ v s@t t¡rEt 	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   Úsess_nonexistent_999ÚHellor   r   r   )z[%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py6)s
{%(py6)s = %(py4)s.HTTP_404_NOT_FOUND
}Úmsg_respr   r   r$   r%   zSession not foundrT   rU   rW   r0   r1   r#   )r5   r6   r   ÚHTTP_404_NOT_FOUNDr8   r9   r:   r;   r<   r=   r>   r?   r   )
r@   rn   rD   rE   rF   rG   rH   rI   rJ   rM   rN   rN   rO   Ú$test_send_message_unknown_session_id\   s   
þ®rrp   c                 C   sÆ   | j ddddœd�}|j}tj}||k}|s[t d|fd||f¡dt ¡ v s+t |¡r0t 	|¡ndt 	|¡d	t ¡ v s@t t¡rEt 	t¡nd	t 	|¡d
œ }dd|i }t
t |¡ƒ‚d  } }}d S )Nr   Úsess_valid_formatÚ r   r   r   )zf%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py6)s
{%(py6)s = %(py4)s.HTTP_422_UNPROCESSABLE_ENTITY
}rn   r   r   r$   r%   )r5   r6   r   ÚHTTP_422_UNPROCESSABLE_ENTITYr8   r9   r:   r;   r<   r=   r>   r?   )r@   rn   rD   rE   rF   rG   rH   rN   rN   rO   Ú"test_send_message_validation_errord   s
   
þ²rt   )Úbuiltinsr:   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter8   r2   ÚpytestÚfastapir   Úapp.databaser   Ú(app.repositories.conversation_repositoryr   r   Ú#app.repositories.message_repositoryr   r   rP   rY   ÚmarkÚanyiork   rp   rt   rN   rN   rN   rO   Ú<module>   s   " !
