47 lines
1.3 KiB
Python
47 lines
1.3 KiB
Python
import pytest
|
|
|
|
from app.core.websocket.manager import ConnectionManager
|
|
|
|
|
|
class FakeWebSocket:
|
|
def __init__(self):
|
|
self.accepted = False
|
|
self.sent = []
|
|
self.closed = False
|
|
|
|
async def accept(self):
|
|
self.accepted = True
|
|
|
|
async def send_json(self, message):
|
|
self.sent.append(message)
|
|
|
|
async def close(self):
|
|
self.closed = True
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_channel_subscribers_receive_channel_broadcasts():
|
|
manager = ConnectionManager()
|
|
socket = FakeWebSocket()
|
|
|
|
await manager.connect(socket, "user-1")
|
|
manager.subscribe(socket, ["dashboard"])
|
|
await manager.broadcast({"type": "data_frame", "channel": "dashboard"}, channel="dashboard")
|
|
|
|
assert socket.accepted is True
|
|
assert socket.sent == [{"type": "data_frame", "channel": "dashboard"}]
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_disconnect_removes_channel_subscriptions():
|
|
manager = ConnectionManager()
|
|
socket = FakeWebSocket()
|
|
|
|
await manager.connect(socket, "user-1")
|
|
manager.subscribe(socket, ["dashboard"])
|
|
manager.disconnect(socket, "user-1")
|
|
await manager.broadcast({"type": "data_frame", "channel": "dashboard"}, channel="dashboard")
|
|
|
|
assert socket.sent == []
|
|
assert "dashboard" not in manager.channel_subscriptions
|