完成渠道模块的单元测试目录搭建,新增多个领域模型、端口、中间件、事件、服务以及基础设施层的单元测试文件,同时补充了conftest.py的环境变量配置,完善测试基础环境。
88 lines
2.6 KiB
Python
88 lines
2.6 KiB
Python
from __future__ import annotations
|
|
|
|
from unittest.mock import AsyncMock, MagicMock
|
|
|
|
import pytest
|
|
|
|
from yuxi.channel.interfaces.websocket.manager import WSManager
|
|
|
|
|
|
class TestWSManager:
|
|
@pytest.fixture
|
|
def manager(self):
|
|
return WSManager()
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_start(self, manager):
|
|
await manager.start()
|
|
assert manager.is_running is True
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_stop(self, manager):
|
|
await manager.start()
|
|
await manager.stop()
|
|
assert manager.is_running is False
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_stop_all(self, manager):
|
|
await manager.start()
|
|
ws = AsyncMock()
|
|
manager._connections["conn1"] = ws
|
|
await manager.stop_all()
|
|
ws.close.assert_awaited_once()
|
|
assert len(manager._connections) == 0
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_register(self, manager):
|
|
await manager.start()
|
|
ws = AsyncMock()
|
|
await manager.register("conn1", ws)
|
|
assert "conn1" in manager._connections
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_unregister(self, manager):
|
|
await manager.start()
|
|
ws = AsyncMock()
|
|
await manager.register("conn1", ws)
|
|
await manager.unregister("conn1")
|
|
assert "conn1" not in manager._connections
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_send_to(self, manager):
|
|
await manager.start()
|
|
ws = AsyncMock()
|
|
await manager.register("conn1", ws)
|
|
await manager.send_to("conn1", {"type": "message"})
|
|
ws.send.assert_awaited_once()
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_send_to_nonexistent(self, manager):
|
|
await manager.start()
|
|
await manager.send_to("nonexistent", {"type": "message"})
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_broadcast(self, manager):
|
|
await manager.start()
|
|
ws1 = AsyncMock()
|
|
ws2 = AsyncMock()
|
|
await manager.register("conn1", ws1)
|
|
await manager.register("conn2", ws2)
|
|
await manager.broadcast({"type": "message"})
|
|
ws1.send.assert_awaited_once()
|
|
ws2.send.assert_awaited_once()
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_get_connection(self, manager):
|
|
await manager.start()
|
|
ws = AsyncMock()
|
|
await manager.register("conn1", ws)
|
|
result = manager.get_connection("conn1")
|
|
assert result is ws
|
|
|
|
def test_get_connection_not_found(self, manager):
|
|
result = manager.get_connection("nonexistent")
|
|
assert result is None
|
|
|
|
def test_connection_count(self, manager):
|
|
assert manager.connection_count == 0
|