Files
MineNasAI/tests/test_gateway.py

145 lines
4.4 KiB
Python
Raw Normal View History

"""Gateway 模块测试"""
from __future__ import annotations
import pytest
from minenasai.gateway.protocol import (
ChatMessage,
MessageType,
TaskComplexity,
parse_message,
)
from minenasai.gateway.router import SmartRouter
class TestProtocol:
"""协议测试"""
def test_chat_message(self):
"""测试聊天消息"""
msg = ChatMessage(content="你好")
assert msg.type == MessageType.CHAT
assert msg.content == "你好"
assert msg.id is not None
def test_parse_message(self):
"""测试消息解析"""
data = {
"type": "chat",
"content": "测试消息",
}
msg = parse_message(data)
assert isinstance(msg, ChatMessage)
assert msg.content == "测试消息"
def test_parse_invalid_type(self):
"""测试无效消息类型"""
data = {"type": "invalid"}
with pytest.raises(ValueError, match="未知的消息类型"):
parse_message(data)
def test_parse_missing_type(self):
"""测试缺少类型"""
data = {"content": "test"}
with pytest.raises(ValueError, match="缺少 type"):
parse_message(data)
class TestRouter:
"""智能路由测试"""
def setup_method(self):
"""初始化路由器"""
self.router = SmartRouter()
def test_simple_question(self):
"""测试简单问题"""
result = self.router.evaluate("今天天气怎么样?")
assert result["complexity"] == TaskComplexity.SIMPLE
assert result["suggested_handler"] == "quick_response"
def test_complex_task(self):
"""测试复杂任务"""
# 包含多个复杂关键词:重构、实现、优化
result = self.router.evaluate(
"请帮我重构这个项目的数据库模块,实现异步操作支持,"
"优化连接池管理,同时要保持向后兼容。这是一个架构设计任务。"
)
# 复杂任务应该识别为 COMPLEX 或 MEDIUM
assert result["complexity"] in [TaskComplexity.COMPLEX, TaskComplexity.MEDIUM]
def test_medium_task(self):
"""测试中等任务"""
result = self.router.evaluate("查看当前目录下的文件列表")
assert result["complexity"] in [TaskComplexity.SIMPLE, TaskComplexity.MEDIUM]
def test_command_override_simple(self):
"""测试命令覆盖 - 简单"""
result = self.router.evaluate("/快速 帮我重构整个项目")
assert result["complexity"] == TaskComplexity.SIMPLE
assert result["confidence"] == 1.0
assert result["content"] == "帮我重构整个项目"
def test_command_override_complex(self):
"""测试命令覆盖 - 复杂"""
result = self.router.evaluate("/深度 你好")
assert result["complexity"] == TaskComplexity.COMPLEX
assert result["confidence"] == 1.0
def test_code_detection(self):
"""测试代码检测"""
result = self.router.evaluate(
"请帮我实现这个函数:\n```python\ndef hello():\n pass\n```"
)
assert result["complexity"] == TaskComplexity.COMPLEX
def test_multi_step_detection(self):
"""测试多步骤检测"""
# 使用英文 step 模式和更多内容
result = self.router.evaluate(
"Step 1: 创建数据库表结构\n"
"Step 2: 实现数据导入功能\n"
"Step 3: 开发验证脚本\n"
"Step 4: 部署到生产环境"
)
# 多步骤任务应该识别为复杂任务
assert result["complexity"] in [TaskComplexity.COMPLEX, TaskComplexity.MEDIUM]
class TestRouterEdgeCases:
"""路由器边界情况测试"""
def setup_method(self):
self.router = SmartRouter()
def test_empty_content(self):
"""测试空内容"""
result = self.router.evaluate("")
assert result["complexity"] == TaskComplexity.SIMPLE
def test_very_long_content(self):
"""测试超长内容"""
long_content = "请帮我分析 " + "这段代码 " * 200
result = self.router.evaluate(long_content)
assert result["complexity"] == TaskComplexity.COMPLEX
def test_special_characters(self):
"""测试特殊字符"""
result = self.router.evaluate("查看 /tmp/test.txt 文件内容")
assert result["complexity"] in [TaskComplexity.SIMPLE, TaskComplexity.MEDIUM]