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
mZmZmZ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dS )é    N)Úget_database)Úcreate_sessionÚget_session_by_idÚupdate_session_statusÚclaim_session_atomicallyÚrequeue_sessionc                  Ã   sª  �t ƒ } t| dd�I d H }|d }|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 slt 
|¡rqt |¡ndt |¡t |¡t |	¡t |
¡dœ }dd|i }tt |¡ƒ‚d  } } }	 }}
t| |d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}||k}|�st 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}||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  } }}|d }d}||k}|�sMt d|fd||f¡t |¡t |¡dœ }d	d
|i }tt |¡ƒ‚d  } }}d S )NÚsite_demo_123©Úsite_idÚ	sessionIdÚstatusÚRINGING©ú==©z%(py1)s == %(py4)s©Úpy1Úpy4úassert %(py6)sÚpy6ÚassignedAgentId©Úis©zI%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get
}(%(py4)s)
} is %(py9)sÚsession©Úpy0Úpy2r   r   Úpy9úassert %(py11)sÚpy11Úagent_alpha©Úagent_id©úis not©z%(py0)s is not %(py3)sÚclaimed©r   Úpy3úassert %(py5)sÚpy5ÚIN_CHATÚmodeÚhumanÚ
assignedAt)zM%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get
}(%(py4)s)
} is not %(py9)s)r   r   Ú
@pytest_arÚ_call_reprcompareÚ	_safereprÚAssertionErrorÚ_format_explanationÚgetÚ@py_builtinsÚlocalsÚ_should_repr_global_namer   r   )Údbr   Ú
session_idÚ@py_assert0Ú@py_assert3Ú@py_assert2Ú@py_format5Ú@py_format7Ú@py_assert1Ú@py_assert5Ú@py_assert8Ú@py_assert7Ú@py_format10Ú@py_format12r'   Ú@py_format4Ú@py_format6Úfetched© rI   ú>/web/html/dev/chatbot/backend/tests/test_session_assignment.pyÚ%test_claim_session_atomically_success   s   €j®xlll´lprK   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  }}|d }d}	||	k}|s†t d|fd||	f¡t |¡t |	¡dœ }
dd|
i }t	t 
|¡ƒ‚d  } }}	t| |d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  }}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 S )Nr   r	   r   Úagent_1r"   r$   r&   Úclaim1r(   r*   r+   r   r   r   r   r   r   Úagent_2r   ©z%(py0)s is %(py3)sÚclaim2r   r,   )r   r   r   r0   r1   r6   r7   r8   r2   r3   r4   r   )r9   r   r:   rM   r=   r@   rF   rG   r;   r<   r>   r?   rP   rH   rI   rI   rJ   Ú,test_claim_session_race_condition_prevention    s   €xjxlprQ   c                  Ã   s>  �t ƒ } t| dd�I d H }|d }t| |dƒI d H  t| |dd�I d H }d }||u }|s\t d|fd||f¡d	t ¡ v sAt |¡rFt 	|¡nd	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 S )Nr   r	   r   ÚENDEDrL   r"   r   rO   r'   r(   r*   r+   r   r   r   r   r   r   )r   r   r   r   r0   r1   r6   r7   r8   r2   r3   r4   r   )r9   r   r:   r'   r=   r@   rF   rG   rH   r;   r<   r>   r?   rI   rI   rJ   Útest_cannot_claim_ended_session4   s   €xnrS   c                  Ã   s*  �t ƒ } t| dd�I d H }|d }t| |dd�I d H  t| |ƒI d H }d }||u}|s[t d|fd||f¡dt ¡ v s@t |¡rEt 	|¡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  } }}	|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  } }	 } }}|j}d}	||	ƒ}d }||u }|�sqt d|fd||f¡dt ¡ v �sJt |¡�rOt 	|¡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  } }}	|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 S )Nr   r	   r   r!   r"   r$   r&   Úrequeuedr(   r*   r+   r   r   r   r   r   r   r   r-   Úruler   r   r   r   r   r    r/   rH   )r   r   r   r   r0   r1   r6   r7   r8   r2   r3   r4   r5   r   )r9   r   r:   rT   r=   r@   rF   rG   r;   r<   r>   r?   rA   rB   rC   rD   rE   rH   rI   rI   rJ   Útest_requeue_session_successE   s   €xjj°´l¸rV   c            
      Ã   sæ  �t ƒ } t| dd�I d H }d }||u }|sEt d|fd||f¡dt ¡ v s*t |¡r/t |¡ndt |¡dœ }dd|i }tt 	|¡ƒ‚d  }}t
| d	d
�I d H }|d }t| |ƒ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  }}t| |dd�I d H  t| |dƒI d H  t| |ƒ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 S )NÚnon_existent_sess)r:   r   rO   Úbad_requeuer(   r*   r+   r   r	   r   Úringing_requeuerL   r"   rR   Úended_requeue)r   r   r0   r1   r6   r7   r8   r2   r3   r4   r   r   r   )
r9   rX   r=   r@   rF   rG   r   r:   rY   rZ   rI   rI   rJ   Ú,test_cannot_requeue_invalid_or_ended_session[   s   €xx|r[   )Úbuiltinsr6   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter0   ÚpytestÚapp.databaser   Ú#app.repositories.session_repositoryr   r   r   r   r   ÚmarkÚanyiorK   rQ   rS   rV   r[   rI   rI   rI   rJ   Ú<module>   s   " 



