feat: 更新模块文档,添加详细说明和使用示例

This commit is contained in:
锦麟 王
2026-02-05 15:43:08 +08:00
parent 23bf2cfaef
commit 64dc18f477
37 changed files with 1252 additions and 168 deletions

View File

@@ -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