feat: 更新模块文档,添加详细说明和使用示例
This commit is contained in:
@@ -142,3 +142,159 @@ class TestRouterEdgeCases:
|
||||
result = self.router.evaluate("查看 /tmp/test.txt 文件内容")
|
||||
|
||||
assert result["complexity"] in [TaskComplexity.SIMPLE, TaskComplexity.MEDIUM]
|
||||
|
||||
|
||||
class TestConnectionManager:
|
||||
"""WebSocket 连接管理器测试"""
|
||||
|
||||
def test_import_manager(self):
|
||||
"""测试导入连接管理器"""
|
||||
from minenasai.gateway.server import ConnectionManager
|
||||
|
||||
manager = ConnectionManager()
|
||||
assert manager.active_connections == {}
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_connect_and_disconnect(self):
|
||||
"""测试连接和断开"""
|
||||
from unittest.mock import AsyncMock, MagicMock
|
||||
|
||||
from minenasai.gateway.server import ConnectionManager
|
||||
|
||||
manager = ConnectionManager()
|
||||
|
||||
# Mock WebSocket
|
||||
mock_ws = AsyncMock()
|
||||
mock_ws.accept = AsyncMock()
|
||||
|
||||
# 连接
|
||||
await manager.connect(mock_ws, "client-1")
|
||||
assert "client-1" in manager.active_connections
|
||||
mock_ws.accept.assert_called_once()
|
||||
|
||||
# 断开
|
||||
manager.disconnect("client-1")
|
||||
assert "client-1" not in manager.active_connections
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_disconnect_nonexistent(self):
|
||||
"""测试断开不存在的连接"""
|
||||
from minenasai.gateway.server import ConnectionManager
|
||||
|
||||
manager = ConnectionManager()
|
||||
# 不应该抛出异常
|
||||
manager.disconnect("nonexistent")
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_send_message(self):
|
||||
"""测试发送消息"""
|
||||
from unittest.mock import AsyncMock
|
||||
|
||||
from minenasai.gateway.server import ConnectionManager
|
||||
|
||||
manager = ConnectionManager()
|
||||
|
||||
# Mock WebSocket
|
||||
mock_ws = AsyncMock()
|
||||
mock_ws.accept = AsyncMock()
|
||||
mock_ws.send_json = AsyncMock()
|
||||
|
||||
# 连接
|
||||
await manager.connect(mock_ws, "client-1")
|
||||
|
||||
# 发送消息
|
||||
await manager.send_message("client-1", {"type": "test"})
|
||||
mock_ws.send_json.assert_called_once_with({"type": "test"})
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_send_message_to_nonexistent(self):
|
||||
"""测试发送消息给不存在的客户端"""
|
||||
from minenasai.gateway.server import ConnectionManager
|
||||
|
||||
manager = ConnectionManager()
|
||||
# 不应该抛出异常
|
||||
await manager.send_message("nonexistent", {"type": "test"})
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_broadcast(self):
|
||||
"""测试广播消息"""
|
||||
from unittest.mock import AsyncMock
|
||||
|
||||
from minenasai.gateway.server import ConnectionManager
|
||||
|
||||
manager = ConnectionManager()
|
||||
|
||||
# Mock 多个 WebSocket
|
||||
mock_ws1 = AsyncMock()
|
||||
mock_ws1.accept = AsyncMock()
|
||||
mock_ws1.send_json = AsyncMock()
|
||||
|
||||
mock_ws2 = AsyncMock()
|
||||
mock_ws2.accept = AsyncMock()
|
||||
mock_ws2.send_json = AsyncMock()
|
||||
|
||||
# 连接
|
||||
await manager.connect(mock_ws1, "client-1")
|
||||
await manager.connect(mock_ws2, "client-2")
|
||||
|
||||
# 广播
|
||||
await manager.broadcast({"type": "broadcast"})
|
||||
mock_ws1.send_json.assert_called_once_with({"type": "broadcast"})
|
||||
mock_ws2.send_json.assert_called_once_with({"type": "broadcast"})
|
||||
|
||||
|
||||
class TestGatewayServer:
|
||||
"""Gateway 服务器测试"""
|
||||
|
||||
def test_import_app(self):
|
||||
"""测试导入应用"""
|
||||
from minenasai.gateway.server import app
|
||||
|
||||
assert app is not None
|
||||
assert app.title == "MineNASAI Gateway"
|
||||
|
||||
def test_import_endpoints(self):
|
||||
"""测试导入端点函数"""
|
||||
from minenasai.gateway.server import list_agents, list_sessions, root
|
||||
|
||||
assert callable(root)
|
||||
assert callable(list_agents)
|
||||
assert callable(list_sessions)
|
||||
|
||||
|
||||
class TestMessageTypes:
|
||||
"""消息类型测试"""
|
||||
|
||||
def test_status_message(self):
|
||||
"""测试状态消息"""
|
||||
from minenasai.gateway.protocol import StatusMessage
|
||||
|
||||
msg = StatusMessage(status="thinking", message="处理中...")
|
||||
assert msg.type == MessageType.STATUS
|
||||
assert msg.status == "thinking"
|
||||
assert msg.message == "处理中..."
|
||||
|
||||
def test_response_message(self):
|
||||
"""测试响应消息"""
|
||||
from minenasai.gateway.protocol import ResponseMessage
|
||||
|
||||
msg = ResponseMessage(content="Hello!", in_reply_to="msg-123")
|
||||
assert msg.type == MessageType.RESPONSE
|
||||
assert msg.content == "Hello!"
|
||||
assert msg.in_reply_to == "msg-123"
|
||||
|
||||
def test_error_message(self):
|
||||
"""测试错误消息"""
|
||||
from minenasai.gateway.protocol import ErrorMessage
|
||||
|
||||
msg = ErrorMessage(message="Something went wrong", code="ERR_001")
|
||||
assert msg.type == MessageType.ERROR
|
||||
assert msg.message == "Something went wrong"
|
||||
assert msg.code == "ERR_001"
|
||||
|
||||
def test_pong_message(self):
|
||||
"""测试心跳响应消息"""
|
||||
from minenasai.gateway.protocol import PongMessage
|
||||
|
||||
msg = PongMessage()
|
||||
assert msg.type == MessageType.PONG
|
||||
|
||||
Reference in New Issue
Block a user