o
    'h�j’M  ã                   @   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
m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mZ d d	lmZ d d
lmZmZmZmZm Z  ej!dd�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*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&„ ƒZ0ej#j$d'd(„ ƒZ1ej#j$d)d*„ ƒZ2ej#j$d+d,„ ƒZ3ej#j$d-d.„ ƒZ4dS )/é    N)Ú
TestClient)ÚASGITransportÚAsyncClient©Úapp)Úget_database)Úcreate_sessionÚclaim_session_atomicallyÚget_session_by_id)Úcreate_tenant)Úget_or_create_conversationÚget_conversation_by_session_id)Úcreate_message)Úactive_sessionsÚadd_active_sessionÚremove_active_sessionÚhandle_agent_disconnectÚget_active_sessionsT)Úautousec                   c   s   � t  ¡  d V  t  ¡  d S )N)r   Úclear© r   r   úB/web/html/dev/chatbot/backend/tests/test_disconnect_reliability.pyÚclear_presence   s   €r   c                  Ã   s$  �t ƒ } t| dd�I d H }|d }t| |dƒI d H }d }||u}|sRt d|fd||f¡dt ¡ v s7t |¡r<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|dd ddd� t| d }d}	||	k}|sút d|fd||	f¡t |¡t |	¡dœ }
dd|
i }t	t 
|¡ƒ‚d  } }}	t| dƒI d H  t| |ƒI d H }|d }d}	||	k}|�s@t d|fd||	f¡t |¡t |	¡dœ }
dd|
i }t	t 
|¡ƒ‚d  } }}	|j}d}	||	ƒ}d }||u }|�s–t d|fd||f¡dt ¡ v �sot |¡�rtt |¡ndt |¡t |	¡t |¡t |¡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| d }d }	||	u }|�s
t d|fd||	f¡t |¡t |	¡dœ }
dd|
i }t	t 
|¡ƒ‚d  } }}	d S )NÚsite_test_requeue©Úsite_idÚ	sessionIdÚagent_A)úis not)z%(py0)s is not %(py3)sÚclaimed)Úpy0Úpy3úassert %(py5)sÚpy5ÚstatusÚIN_CHAT©ú==©z%(py1)s == %(py4)s©Úpy1Úpy4úassert %(py6)sÚpy6ÚassignedAgentId©Ú
session_idr   Ú	websocketÚ
status_valÚassigned_agent_idÚRINGING©Úis©zI%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get
}(%(py4)s)
} is %(py9)sÚupdated_sess©r    Úpy2r+   r-   Úpy9úassert %(py11)sÚpy11©z%(py1)s is %(py4)s)r   r   r	   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationr   r   r   r
   Úget)ÚdbÚsessÚsidr   Ú@py_assert2Ú@py_assert1Ú@py_format4Ú@py_format6Ú@py_assert0Ú@py_assert3Ú@py_format5Ú@py_format7r8   Ú@py_assert5Ú@py_assert8Ú@py_assert7Ú@py_format10Ú@py_format12r   r   r   Ú.test_agent_disconnect_requeues_in_chat_session   s,   €xjjûnl´ptrX   c            
      Ã   sˆ  �t ƒ } t| dd�I d H }|d }t| |dƒI d H }|d }d}||k}|sIt d|fd||f¡t |¡t |¡dœ }d	d
|i }tt |¡ƒ‚d  } }}t|dd ddd� t	| dƒI d H  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  } }}t| d }d}||k}|�st d|fd||f¡t |¡t |¡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  } }}d S )NÚsite_test_reassignr   r   Úagent_Br.   r&   r(   r)   r,   r-   r%   r/   r   r$   )r   r   r	   r?   r@   rD   rE   rF   r   r   r
   r   )
rH   rI   rJ   r   rO   rP   rK   rQ   rR   r8   r   r   r   ÚAtest_agent_disconnect_does_not_requeue_already_reassigned_session<   s&   €jû	jjptr[   c                  Ã   sø  �t ƒ } t| dd�I d H }t| dd�I d H }t| |d dƒI d H  t| |d dƒI d H  t|d dd ddd� t|d dd ddd� t| dƒI d H  t| |d ƒI d H }t| |d ƒI d H }|d }d}||k}|s�t d	|fd
||f¡t |¡t |¡dœ }dd|i }	t	t 
|	¡ƒ‚d  } }}|j}
d}|
|ƒ}d }||u }|sàt d|fd||f¡dt ¡ v s¹t |¡r¾t |¡ndt |
¡t |¡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  } }}|j}
d}|
|ƒ}d }||u }|�spt d|fd||f¡dt ¡ v �sIt |¡�rNt |¡ndt |
¡t |¡t |¡t |¡dœ }dd|i }t	t 
|¡ƒ‚d  }
 } } }}d S )NÚ
site_multir   r   Úagent_multir%   ©r2   r3   r$   r4   r&   r(   r)   r,   r-   r.   r5   r7   Ús1_docr9   r<   r=   Ús2_doc)r   r   r	   r   r   r
   r?   r@   rD   rE   rF   rG   rA   rB   rC   )rH   Úsess1Úsess2r_   r`   rO   rP   rK   rQ   rR   rL   rS   rT   rU   rV   rW   r   r   r   Ú0test_agent_disconnect_requeues_multiple_sessionsY   s   €j®l¸rc   c               	   Ã   sh  �t ƒ } | d  ddddœ¡I d H  t| dd�I d H }|d }t| |dƒI d H  t| |dƒI d H }t| |d	 |d
dƒI d H  t| |d	 |ddƒI d H  t|ƒ 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  } }}tttd�dd�4 I d H �š×}
|
 d|› d�¡I d H }|j}d}||k}|�st 	d|fd||f¡dt ¡ v sþt |¡�rt 
|¡ndt 
|¡t 
|¡dœ }dd |i }tt |¡ƒ‚d  } }}| ¡ }|d }||k}|�sdt 	d|fd!||f¡t 
|¡d"t ¡ v �sMt |¡�rRt 
|¡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 �süt t¡�rt 
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& d/ d. }d}||k}|�s•t 	d|fd||f¡t 
|¡t 
|¡dœ }dd|i }	tt |	¡ƒ‚d  } }}W d   ƒI d H  d S 1 I d H �s­w   Y  d S )0NÚtenantsÚsite_temp_discztemp.comz
Temp Store©ÚsiteIdÚdomainÚnamer   r   Úagent_1ÚconversationIdÚuserzHello agentÚagentz
Hi visitorr$   r%   r&   r(   r)   r,   r-   r.   r   úhttp://test©Ú	transportÚbase_urlú/api/v1/session/z/history?siteId=site_temp_discéÈ   ©z3%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py5)sÚresp©r    r:   r#   úassert %(py7)sÚpy7©z%(py1)s == %(py3)srJ   ©r*   r!   r"   r#   Úmessagesé   ©z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)sÚlen©r    r:   r+   rx   úassert %(py9)sr;   r   Úcontenté   )r   Ú
insert_oner   r	   r   r   r   r
   r?   r@   rD   rE   rF   r   r   r   rG   Ústatus_coderA   rB   rC   Újsonr~   )rH   rI   rJ   ÚconvÚs_docrO   rP   rK   rQ   rR   Úclientru   rL   Ú@py_assert4rN   Ú@py_format8ÚbodyrM   Ú@py_assert6rS   rV   r   r   r   Ú@test_visitor_temporary_disconnect_preserves_session_and_messagesp   s0   €jjŽ‚ll¦tv0÷r�   c               	   Ã   sÒ  �t ƒ } | d  ddddœ¡I d H  t| dd�I d H }|d }t|dd dd	d
� tttd�dd�4 I d H �š%}|jd|ddœd�I d H }|j}d}||k}|sƒt	 
d|fd||f¡dt ¡ v sdt	 |¡rit	 |¡nd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 }|d }
d}|
|k}|s÷t	 
d|fd|
|f¡t	 |
¡t	 |¡dœ }dd|i }tt	 |¡ƒ‚d  }
 }}tƒ }||v}|�sLt	 
d|fd ||f¡d!t ¡ v �st	 |¡�r#t	 |¡nd!d"t ¡ v �s1t	 t¡�r6t	 t¡nd"t	 |¡d#œ }dd|i }tt	 |¡ƒ‚d  }}W d   ƒI d H  d S 1 I d H �sbw   Y  d S )$Nrd   Úsite_end_testzendtest.comz	End Storerf   r   r   r%   rj   r^   r   rn   ro   z/api/v1/handoff/endÚvisitor)r   ÚendedBy©r…   rs   r&   rt   Úend_resprv   rw   rx   r$   ÚENDEDr(   r)   r,   r-   ©únot in)z-%(py0)s not in %(py4)s
{%(py4)s = %(py2)s()
}rJ   r   )r    r:   r+   )r   rƒ   r   r   r   r   r   Úpostr„   r?   r@   rA   rB   rC   rD   rE   rF   r…   r
   r   )rH   rI   rJ   rˆ   r’   rL   r‰   rP   rN   rŠ   rO   rK   rQ   rR   r‡   r   r   r   Ú/test_explicit_end_chat_ends_session_permanently’   s   €Šnj¨0õr—   c               
   Ã   s2  �t ƒ } t| dd�I d H }|d }t| |dƒI d H  ttƒ��ï}| d¡��Ï}| d|› �¡�}| ¡  W d   ƒ n1 s>w   Y  | ¡ }|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}||k}	|	sét d	|	fd
||f¡t 	|¡t 	|¡dœ }
dd|
i }t
t |¡ƒ‚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  }}	|tv }|�svt d|fd|tf¡dt ¡ v �sLt |¡�rQt 	|¡nddt ¡ v �s_t t¡�rdt 	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  } }	}W d   ƒ n1 �sùw   Y  W d   ƒ d S W d   ƒ d S 1 �sw   Y  d S )NÚsite_grace_1r   r   rj   ú/ws/agent?agentId=agent_1ú/ws/session/ÚtypeÚvisitor_disconnectedr&   r(   r)   r,   r-   ry   rJ   rz   r"   r#   ÚconnectionStatusÚdisconnectedÚdisconnectedAt©Úin)z%(py1)s in %(py3)sÚevent)z%(py0)s in %(py2)sr   ©r    r:   úassert %(py4)sr+   )r   r   r	   r   r   Úwebsocket_connectÚreceive_jsonr?   r@   rD   rE   rF   rA   rB   rC   r   r
   )rH   rI   rJ   rˆ   Úagent_wsÚ
visitor_wsr¢   rO   rP   rK   rQ   rR   rM   rN   rL   Ú@py_format3r‡   r   r   r   Ú1test_in_chat_visitor_disconnect_sets_grace_period©   s.   €
þj|j~”pn îÿ$ÿrª   c               
   Ã   sÞ  �t ƒ } t| dd�I d H }|d }t| |dƒI d H  ttƒ��E}| d¡��%}| d|› �¡�}| ¡  W d   ƒ n1 s>w   Y  | ¡  | d|› �¡�ì}| ¡ }|d }d}	||	k}
|
sƒt 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}	||	k}
|
söt d	|
fd
||	f¡t 	|¡t 	|	¡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  } }
}	W d   ƒ n	1 �s?w   Y  W d   ƒ n1 �sOw   Y  W d   ƒ d S W d   ƒ d S 1 �shw   Y  d S )NÚsite_grace_2r   r   rj   r™   rš   r›   Úvisitor_reconnectedr&   r(   r)   r,   r-   ry   rJ   rz   r"   r#   r�   Úonline)r   r   r	   r   r   r¥   r¦   r?   r@   rD   rE   rF   rA   rB   rC   r   )rH   rI   rJ   rˆ   r§   r¨   Úvisitor_ws2Úreconnect_eventrO   rP   rK   rQ   rR   rM   rN   r   r   r   Ú@test_in_chat_visitor_reconnect_cancels_timer_and_restores_onlineÅ   s.   €
ÿj|jrú€ øÿ$ÿr°   c               	   Ã   sÚ  �dd l } ddlm} tƒ }t|dd�I d H }|d }t||dƒI d H  t|dd ddd� ttƒ��0}| 	d	¡��}||dd
d�I d H  |  
d¡I d H  | ¡ }|d }d}	||	k}
|
st 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}	||	k}
|
sòt 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 }W d   ƒ n1 �sMw   Y  W d   ƒ d S W d   ƒ d S 1 �sfw   Y  d S )!Nr   ©Ústart_grace_period_timerÚsite_grace_3r   r   rj   r%   r^   r™   çš™™™™™©?©Úgrace_secondsç333333Ã?r›   Úvisitor_timeoutr&   r(   r)   r,   r-   ry   rJ   rz   r"   r#   r�   Úoffliner”   ©z%(py0)s not in %(py2)sr   r£   r¤   r+   )ÚasyncioÚapp.services.presencer²   r   r   r	   r   r   r   r¥   Úsleepr¦   r?   r@   rD   rE   rF   rA   rB   rC   r   )r»   r²   rH   rI   rJ   rˆ   r§   r¢   rO   rP   rK   rQ   rR   rM   rN   rL   r©   r   r   r   Ú,test_in_chat_visitor_timeout_removes_sessionÝ   s*   €j|j– öÿ$ÿr¾   c               
   Ã   s8  �t ƒ } t| dd�I d H }|d }ttƒ�ü}| d¡�Þ}| d|› �¡�}| ¡  W d   ƒ n1 s3w   Y  | ¡ }|d }d}||k}	|	skt d|	fd	||f¡t |¡t |¡d
œ }
dd|
i }t	t 
|¡ƒ‚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  }}	|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 }W d   ƒ n1 süw   Y  W d   ƒ d S W d   ƒ d S 1 �sw   Y  d S )NÚsite_grace_4r   r   r™   rš   r›   rœ   r&   r(   r)   r,   r-   r�   r”   )z%(py1)s not in %(py3)sr¢   rz   r"   r#   rº   rJ   r   r£   r¤   r+   )r   r   r   r   r¥   r¦   r?   r@   rD   rE   rF   rA   rB   rC   r   )rH   rI   rJ   rˆ   r§   r¨   r¢   rO   rP   rK   rQ   rR   rM   rN   rL   r©   r   r   r   Ú3test_ringing_visitor_disconnect_removes_immediatelyõ   s"   €

ÿjxŒöÿ$ÿrÀ   c                  Ã   sþ  �ddl m}  tƒ }t|dd�I d H }|d }t||dƒI d H  ttƒ�Ñ}| d¡�³}tdƒD ]¦}| d	|› �¡�”}g }|| v}	|	}
|	sP| | }|j	}|ƒ }|}
|
sºt
 d
|	fd|| f¡dt ¡ v sgt
 |¡rlt
 |¡nddt ¡ v sxt
 | ¡r}t
 | ¡nddœ }dd|i }| |¡ |	s¥dt
 |¡t
 |¡t
 |¡dœ }| |¡ t
 |d¡i  }dd|i }tt
 |¡ƒ‚d  }
 } }	 } }}W d   ƒ n1 sÐw   Y  q/W d   ƒ n1 sàw   Y  W d   ƒ d S W d   ƒ d S 1 søw   Y  d S )Nr   )Úgrace_period_timersÚsite_grace_5r   r   rj   r™   é   rš   r”   )z%(py2)s not in %(py4)srJ   rÁ   )r:   r+   z%(py6)sr-   z<%(py13)s
{%(py13)s = %(py11)s
{%(py11)s = %(py9)s.done
}()
})r;   r=   Úpy13r‚   zassert %(py16)sÚpy16)r¼   rÁ   r   r   r	   r   r   r¥   ÚrangeÚdoner?   r@   rA   rB   rC   rD   ÚappendÚ_format_booloprE   rF   )rÁ   rH   rI   rJ   rˆ   r§   Ú_r¨   rL   rP   rO   rT   Ú@py_assert10Ú@py_assert12rQ   rR   Ú@py_format14Ú@py_format15Ú@py_format17r   r   r   Ú0test_rapid_disconnect_reconnect_cleans_up_timers  s&   €
þ þ€ÿÿÿ"ÿrÐ   c                
   Ã   s	  �dd l } ddlm} tƒ }|d  ddddœ¡I d H  t|dd�I d H }|d	 }t||d
ƒI d H  t||dƒI d H }t||d |ddƒI d H  t	|dd dd
d� ||ddd�I d H  |  
d¡I d H  t||ƒI d H }|d }d}||k}	|	sšt d|	fd||f¡t |¡t |¡dœ }
dd|
i }tt |¡ƒ‚d  } }	}|j}d}||ƒ}d }||u }|sít d|fd||f¡dt ¡ v sÆt |¡rËt |¡ndt |¡t |¡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  } }	}ttƒ��=}| d!¡��}| d"|› �¡��}| ¡ }|d# }d$}||k}	|	�s€t 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*}||k}	|	�s÷t 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# }d,}||k}	|	�sgt 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  } }	}|jd-|d.d/œd0�}|j}d1}||k}|�sït d|fd2||f¡d3t ¡ v �sÐt |¡�rÕt |¡nd3t |¡t |¡d4œ }d5d6|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  } }	}| d7|› d8�¡}|j}d1}||k}|�s°t d|fd2||f¡d9t ¡ v �s‘t |¡�r–t |¡nd9t |¡t |¡d4œ }d5d6|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 dA }d}||k}	|	�sAt d|	fd||f¡t |¡t |¡dœ }
dd|
i }tt |¡ƒ‚d  } }	}W d   ƒ n	1 �sRw   Y  W d   ƒ n1 �sbw   Y  W d   ƒ d S W d   ƒ d S 1 �s{w   Y  d S )BNr   r±   rd   Ú	site_ab_1zab1.comÚAB1rf   r   r   rj   rk   rl   zPrior message before timeoutr%   r^   r´   rµ   r·   r$   Ú	ABANDONEDr&   r(   r)   r,   r-   r.   r5   r7   r‡   r9   r<   r=   z/ws/agent?agentId=agent_2rš   r›   Úvisitor_connectedry   rJ   rz   r"   r#   r4   r>   Ústatus_changedú/api/v1/handoff/acceptÚagent_2©r   ÚagentIdr‘   rs   rt   Ú
accept_resrv   rw   rx   rr   z/history?siteId=site_ab_1Úhist_resr{   r‚   r}   r~   r   r€   r;   r�   )r»   r¼   r²   r   rƒ   r   r	   r   r   r   r½   r
   r?   r@   rD   rE   rF   rG   rA   rB   rC   r   r   r   r¥   r¦   r–   r„   r…   r~   ) r»   r²   rH   rI   rJ   r†   r‡   rO   rP   rK   rQ   rR   rL   rS   rT   rU   rV   rW   Úc_docrˆ   Ú	agent2_wsr¨   r¢   rM   rN   Ú	vis_eventrÚ   r‰   rŠ   rÛ   r‹   rŒ   r   r   r   Ú@test_reconnect_after_abandoned_timeout_rering_and_history_intact  sX   €j®ll‚llll�pp�¦vè€ ÿÿ$ÿrß   c               
   Ã   sx  �dd l } ddlm} tƒ }|d  ddddœ¡I d H  t|dd�I d H }|d	 }t||d
ƒI d H  t||dƒI d H }t||d |ddƒI d H  t	|dd dd
d� ||ddd�I d H  |  
d¡I d H  ttƒ�Ê}| d¡�«}| d|› �¡�’}| ¡  |jd|d
dœd�}	|	j}
d}|
|k}|sÄt d|fd|
|f¡dt ¡ v s¥t |	¡rªt |	¡nd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  } }}W d   ƒ n	1 �sw   Y  W d   ƒ n1 �sw   Y  W d   ƒ d S W d   ƒ d S 1 �s5w   Y  d S )$Nr   r±   rd   Ú	site_ab_2zab2.comÚAB2rf   r   r   rj   rk   rl   zHello agent 1r%   r^   r´   rµ   r·   r™   rš   rÖ   rØ   r‘   rs   r&   rt   rÚ   rv   rw   rx   r.   r(   r)   r,   r-   )r»   r¼   r²   r   rƒ   r   r	   r   r   r   r½   r   r   r¥   r¦   r–   r„   r?   r@   rA   rB   rC   rD   rE   rF   r…   )r»   r²   rH   rI   rJ   r†   rˆ   Ú	agent1_wsr¨   rÚ   rL   r‰   rP   rN   rŠ   rO   rK   rQ   rR   r   r   r   Ú7test_reconnect_after_abandoned_original_agent_can_claimN  s4   €
Špú€ ÿÿ$ÿrã   c               
   Ã   sÐ  �ddl m}  tƒ }|d  ddddœ¡I d H  t|dd�I d H }|d	 }| ||d
ƒI d H  ttƒ�¬}| d¡�Ž}| d|› �¡�v}| ¡ }|d }d}	||	k}
|
sut	 
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  } }
}	W d   ƒ n1 sºw   Y  W d   ƒ n1 sÉw   Y  W d   ƒ d S W d   ƒ d S 1 sáw   Y  d S )Nr   ©Úupdate_session_statusrd   Ú	site_ab_3zab3.comÚAB3rf   r   r   r“   r™   rš   r›   rÔ   r&   r(   r)   r,   r-   r$   )Ú#app.repositories.session_repositoryrå   r   rƒ   r   r   r   r¥   r¦   r?   r@   rD   rE   rF   )rå   rH   rI   rJ   rˆ   r§   r¨   r¢   rO   rP   rK   rQ   rR   r   r   r   Ú7test_reconnect_to_ended_session_does_not_trigger_reringl  s&   €
jlü€ÿÿ"ÿré   c                  Ã   s8	  �ddl m}  tƒ }|d  ddddœ¡I d H  t|dd�I d H }|d	 }t||dƒI d H }|d
 }t||dƒI d H  t|||ddƒI d H  t|||ddƒI d H  | ||dƒI d H  |d  d
|iddddœi¡I d H  t	t
ƒ�� }| d|› d�¡}|j}d}	||	k}
|
sºt d|
fd||	f¡dt ¡ v s›t |¡r t |¡nd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$}
||
k}|�s2t d|fd%||
f¡t |¡t |
¡d&œ }d'd(|i }tt |¡ƒ‚d  } }}
|d
 }||k}|�s„t d)|fd*||f¡d+t ¡ v �sZt |¡�r_t |¡nd+d,t ¡ v �smt |¡�rrt |¡nd,d-œ }d.d/|i }tt |¡ƒ‚d }| d0|› �¡}|j}d}	||	k}
|
�sÐt d|
fd||	f¡d1t ¡ v �s±t |¡�r¶t |¡nd1t |¡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  }}|d2 }t|ƒ}
d3}|
|k}|�sft d|fd4|
|f¡d5t ¡ v �sCt t¡�rHt t¡nd5t |¡t |
¡t |¡d6œ }d7d8|i }tt |¡ƒ‚d  } }
 }}|d2 d d9 }d}
||
k}|�s¢t d|fd%||
f¡t |¡t |
¡d&œ }d'd(|i }tt |¡ƒ‚d  } }}
| d|› d:�¡}|j}d}	||	k}
|
�sót d|
fd||	f¡d;t ¡ v �sÔt |¡�rÙt |¡nd;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$}
||
k}|�snt d|fd%||
f¡t |¡t |
¡d&œ }d'd(|i }tt |¡ƒ‚d  } }}
|d2 }t|ƒ}
d}|
|k}|�s¿t d|fd4|
|f¡d5t ¡ v �sœt t¡�r¡t t¡nd5t |¡t |
¡t |¡d6œ }d7d8|i }tt |¡ƒ‚d  } }
 }}|jd<|d=d>œd?�}|j}d}	||	k}
|
�st d|
fd||	f¡d@t ¡ v �sôt |¡�rùt |¡nd@t |¡t |	¡dœ }dd|i }tt |¡ƒ‚d  } }
}	| ¡ dA }d=}
||
k}|�sKt d|fd%||
f¡t |¡t |
¡d&œ }d'd(|i }tt |¡ƒ‚d  } }}
| ¡ d# }dB}
||
k}|�sƒt d|fd%||
f¡t |¡t |
¡d&œ }d'd(|i }tt |¡ƒ‚d  } }}
W d   ƒ d S 1 �s•w   Y  d S )CNr   rä   rd   Ú	site_nc_1znc1.comÚNC1rf   r   r   rk   rj   rl   zOld conversation message 1rm   zOld conversation reply 1r“   Úconversationsz$setÚended)r$   r�   rr   ú/new-conversationrs   r&   rt   Úresrv   rw   rx   ry   rJ   rz   r"   r#   r$   r4   r(   r)   r,   r-   )ú!=)z%(py0)s != %(py2)sÚc2_idÚc1_idr£   r¤   r+   z/api/v1/conversation/Úc1_resr{   r|   r}   r~   r   r€   r;   r�   z/history?siteId=site_nc_1rÛ   rÖ   r×   rØ   r‘   rÚ   r.   r%   )rè   rå   r   rƒ   r   r   r	   r   Ú
update_oner   r   r–   r„   r?   r@   rA   rB   rC   rD   rE   rF   r…   rG   r~   )rå   rH   rI   rJ   Úconv1rò   rˆ   rï   rL   r‰   rP   rN   rŠ   ÚdatarO   rK   rM   rQ   rR   rñ   r©   ró   Úc1_bodyrŒ   rS   rV   rÛ   Ú	hist_bodyrÚ   r   r   r   Ú'test_start_new_conversation_after_ended}  sL   €$Š|l”�‚¦t�‚l¦�pr$ârù   c                  Ã   sˆ  �t ƒ } | d  ddddœ¡I d H  t| dd�I d H }|d }t| |dƒI d H  ttƒ�Ž}| d|› d	�¡}|j}d
}||k}|sut 	d|fd||f¡dt
 ¡ v sVt |¡r[t |¡ndt |¡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  }
 }}W d   ƒ d S 1 s½w   Y  d S )Nrd   Ú	site_nc_2znc2.comÚNC2rf   r   r   rr   rî   i�  r&   rt   rï   rv   rw   rx   zCannot start a new conversationÚdetailr    )z%(py1)s in %(py4)sr)   r,   r-   )r   rƒ   r   r   r   r   r–   r„   r?   r@   rA   rB   rC   rD   rE   rF   r…   )rH   rI   rJ   rˆ   rï   rL   r‰   rP   rN   rŠ   rO   rK   rQ   rR   r   r   r   Ú6test_start_new_conversation_rejected_if_already_active°  s   €
Šp"ürý   c                  Ã   s”  �ddl m}  tƒ }|d  ddddœ¡I d H  t|dd�I d H }|d	 }| ||d
ƒI d H  ttƒ�Ž}| d|› d�¡}|j}d}||k}|s{t	 
d|fd||f¡dt ¡ v s\t	 |¡rat	 |¡nd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  } }}W d   ƒ d S 1 sÃw   Y  d S )Nr   rä   rd   Ú	site_nc_3znc3.comÚNC3rf   r   r   r“   rr   z/history?siteId=site_nc_3rs   r&   rt   rï   rv   rw   rx   r$   r(   r)   r,   r-   )rè   rå   r   rƒ   r   r   r   rG   r„   r?   r@   rA   rB   rC   rD   rE   rF   r…   )rå   rH   rI   rJ   rˆ   rï   rL   r‰   rP   rN   rŠ   rO   rK   rQ   rR   r   r   r   Ú.test_ended_session_without_click_stays_passive¾  s   €
Šp"ür   )5ÚbuiltinsrA   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter?   ÚpytestÚfastapi.testclientr   Úhttpxr   r   Úapp.mainr   Úapp.databaser   rè   r   r	   r
   Ú"app.repositories.tenant_repositoryr   Ú(app.repositories.conversation_repositoryr   r   Ú#app.repositories.message_repositoryr   r¼   r   r   r   r   r   Úfixturer   ÚmarkÚanyiorX   r[   rc   r�   r—   rª   r°   r¾   rÀ   rÐ   rß   rã   ré   rù   rý   r   r   r   r   r   Ú<module>   sX   " 


#


!






6


2
