o
    $h�jà  ã                   @   sœ   d dl Zd dlm  mZ d dlZd dlmZm	Z	m
Z
mZmZmZmZ G dd„ dƒZejdd�dd„ ƒZd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )é    N)Úadd_agent_connectionÚremove_agent_connectionÚget_agent_connectionÚget_connected_agentsÚset_agent_statusÚget_available_agentsÚconnected_agentsc                   @   s>   e Zd Zddefdd„Zdefdd„Zdd
edefdd„ZdS )ÚMockWebSocketÚmockÚ	client_idc                 C   s   || _ g | _d| _d S )NF)r   Úsent_messagesÚ	is_closed)Úselfr   © r   ú:/web/html/dev/chatbot/backend/tests/test_agent_presence.pyÚ__init__   s   
zMockWebSocket.__init__Útextc                 Ã   s    �| j rtdƒ‚| j |¡ d S )NzWebSocket is closed)r   ÚRuntimeErrorr   Úappend)r   r   r   r   r   Ú	send_text   s   €zMockWebSocket.send_textéè  Ú ÚcodeÚreasonc                 Ã   s   �d| _ d S )NT)r   )r   r   r   r   r   r   Úclose   s   €
zMockWebSocket.closeN)r
   )r   r   )Ú__name__Ú
__module__Ú__qualname__Ústrr   r   Úintr   r   r   r   r   r	      s    r	   T)Úautousec                   c   s   � t  ¡  d V  t  ¡  d S )N)r   Úclearr   r   r   r   Úreset_agent_pool   s   €r"   c                  C   sŠ  t dƒ} t dƒ}td| ƒ}td|ƒ}|d }d}||k}|sAt 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 }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|	ƒ}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}||	v }|�s€t d|fd||	f¡t |¡dt	 
¡ v �sit |	¡�rnt |	¡nd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  }}d S )NÚws1Úws2Úagent_alphaÚ
agent_betaÚagentId©ú==©z%(py1)s == %(py4)s©Úpy1Úpy4úassert %(py6)sÚpy6ÚstatusÚ	AVAILABLEé   ©z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sÚlenÚ
all_agents©Úpy0r,   Úpy3r/   úassert %(py8)sÚpy8©Úin©z%(py1)s in %(py3)s©r,   r8   úassert %(py5)sÚpy5)r	   r   Ú
@pytest_arÚ_call_reprcompareÚ	_safereprÚAssertionErrorÚ_format_explanationr   r4   Ú@py_builtinsÚlocalsÚ_should_repr_global_name)r#   r$   Úconn1Úconn2Ú@py_assert0Ú@py_assert3Ú@py_assert2Ú@py_format5Ú@py_format7r5   Ú@py_assert5Ú@py_assert4Ú@py_format9Ú@py_format4Ú@py_format6r   r   r   Ú"test_add_two_agents_simultaneously    s   

jjjj¸~‚rU   c            
      C   s¨  t dƒ} t dƒ}td| ƒ td|ƒ tdƒ}d }||u}|sNt d|fd||f¡dt ¡ v s3t |¡r8t |¡ndt |¡dœ }d	d
|i }t	t 
|¡ƒ‚d  }}|d }|| k}|sŒt d|fd|| f¡t |¡dt ¡ v sut | ¡rzt | ¡nddœ }d	d
|i }t	t 
|¡ƒ‚d  }}tdƒ}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 }||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 }|	|u }|�sNt d|fd|	|f¡dt ¡ v �s3t |	¡�r8t |	¡ndt |¡dœ }d	d
|i }t	t 
|¡ƒ‚d  }}d S )Nr#   r$   r%   r&   ©úis not)z%(py0)s is not %(py3)sÚ
alpha_info©r7   r8   r?   r@   Ú	websocketr(   ©z%(py1)s == %(py3)sr>   Ú	beta_infoÚagent_unknown©Úis©z%(py0)s is %(py3)sÚnon_existent)r	   r   r   rA   rB   rF   rG   rH   rC   rD   rE   )
r#   r$   rX   rM   Ú@py_assert1rS   rT   rK   r\   ra   r   r   r   Ú!test_retrieve_agent_independently1   s   

x|x~‚rc   c                  C   s,  t dƒ} t dƒ}td| ƒ td|ƒ td| ƒ d}t|ƒ}d }||u }|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}t|ƒ}d }||u}|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  } } }}tƒ }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 t¡rît 	t¡ndt 	|¡t 	|	¡t 	|
¡dœ }dd|i }t
t |¡ƒ‚d  } }	 }}
d S )Nr#   r$   r%   r&   r^   )z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} is %(py7)sr   ©r7   Úpy2r-   Úpy7úassert %(py9)sÚpy9rV   ©z4%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} is not %(py7)sé   r(   ©zG%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s()
})
} == %(py8)sr4   r   ©r7   r,   r8   r@   r:   úassert %(py10)sÚpy10)r	   r   r   r   rA   rB   rF   rG   rH   rC   rD   rE   r   r4   )r#   r$   rb   rL   Ú@py_assert6rP   Ú@py_format8Ú@py_format10rM   rQ   Ú@py_assert7rR   Ú@py_format11r   r   r   Ú0test_disconnect_one_agent_does_not_affect_othersC   s   


œœÆrt   c                  C   sÖ  t dƒ} t dƒ}td| ƒ tƒ }t|ƒ}d}||k}|set d|fd||f¡dt ¡ v s1t t¡r6t 	t¡nddt ¡ v sBt t¡rGt 	t¡ndt 	|¡t 	|¡t 	|¡d	œ }d
d|i }t
t |¡ƒ‚d  } } }}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  }}td|ƒ tƒ }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  } }}tdƒd }||k}|�sLt d|fd||f¡t 	|¡dt ¡ v �s5t |¡�r:t 	|¡nddœ }	dd|	i }
t
t |
¡ƒ‚d  }}td| ƒ d}t|ƒ}d }||u}|�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  } } }}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 S )Nr#   Úws2_reconnectedr%   rj   r(   rk   r4   r   rl   rm   rn   rZ   r[   r>   r?   r@   r3   r5   r6   r9   r:   r$   rV   ri   r   rd   rg   rh   )r	   r   r   r4   rA   rB   rF   rG   rH   rC   rD   rE   r   r   )r#   r$   rM   rQ   rr   ro   rR   rs   rK   rS   rT   r5   rP   rO   rb   rL   rp   rq   r   r   r   Ú-test_same_agent_reconnect_prevents_duplicatesQ   s   
À€
°†
¢Šrv   c                  C   sò  t dƒ} td| dd� tdƒd }d}||k}|s<t d|fd||f¡t |¡t |¡dœ }d	d
|i }tt |¡ƒ‚d  } }}tddƒ}d}||u }|st d|fd||f¡dt	 
¡ v sdt |¡rit |¡ndt |¡dœ }dd|i }	tt |	¡ƒ‚d  }}tdƒd }d}||k}|s´t d|fd||f¡t |¡t |¡dœ }d	d
|i }tt |¡ƒ‚d  } }}tddƒ}
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 }d}||k}|�s-t d|fd||f¡t |¡t |¡dœ }d	d
|i }tt |¡ƒ‚d  } }}tddƒ}d}||u }|�sst d|fd||f¡dt	 
¡ v �sXt |¡�r]t |¡ndt |¡dœ }dd|i }	tt |	¡ƒ‚d  }}d S )Nr#   r%   r1   ©Ú
status_valr0   r(   r*   r+   r.   r/   ÚBUSYTr^   r`   Úok_busyrY   r?   r@   ÚOFFLINEÚ
ok_offlineÚUNKNOWN_STATUSFÚ
ok_invalid)r	   r   r   rA   rB   rC   rD   rE   r   rF   rG   rH   )ÚwsrK   rL   rM   rN   rO   rz   rb   rS   rT   r|   r~   r   r   r   Ú&test_agent_presence_status_transitionse   s   n
xn
xp
‚r€   c                  C   sh  t dƒ} t dƒ}t dƒ}td| dd� td|dd� td	|dd� tƒ }t|ƒ}d
}||k}|sut d|fd||f¡dt ¡ v sEt t¡rJt 	t¡nddt ¡ v sVt |¡r[t 	|¡nd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  }	}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  }	}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  }	}d S )Nr#   r$   Úws3r%   r1   rw   r&   ry   Úagent_gammar2   r(   r3   r4   Úavailr6   r9   r:   r;   r=   r>   r?   r@   )únot in)z%(py1)s not in %(py3)s)r	   r   r   r4   rA   rB   rF   rG   rH   rC   rD   rE   )r#   r$   r�   rƒ   rM   rP   rQ   rO   rR   rK   rS   rT   r   r   r   Ú#test_get_available_agents_filteringy   s   ®xx‚r…   )ÚbuiltinsrF   Ú_pytest.assertion.rewriteÚ	assertionÚrewriterA   ÚpytestÚapp.services.presencer   r   r   r   r   r   r   r	   Úfixturer"   rU   rc   rt   rv   r€   r…   r   r   r   r   Ú<module>   s   " $


