"""服务器获取提示完整测试."""
import pytest
from unittest.mock import Mock, MagicMock, patch
from src.server import create_server
class TestServerGetPromptComplete:
"""服务器获取提示完整测试类."""
@pytest.fixture
def server(self):
"""创建服务器实例."""
return create_server()
@pytest.mark.asyncio
async def test_get_prompt_query_user_preferences_complete(self, server):
"""测试获取查询用户偏好提示(完整流程)."""
prompt_name = "query_user_preferences"
arguments = {"category": "programming"}
# 验证提示参数处理
category = arguments.get("category", "")
assert category == "programming"
# 验证查询文本构建
query_text = f"查询我的技术偏好"
if category:
query_text += f",类别:{category}"
assert "技术偏好" in query_text
assert "programming" in query_text
@pytest.mark.asyncio
async def test_get_prompt_query_project_info_complete(self, server):
"""测试获取查询项目信息提示(完整流程)."""
prompt_name = "query_project_info"
arguments = {"project_name": "test_project"}
project_name = arguments.get("project_name", "")
if project_name:
query_text = f"查询项目 '{project_name}' 的信息和需求"
else:
query_text = "查询所有项目信息"
assert "项目" in query_text
assert "test_project" in query_text
@pytest.mark.asyncio
async def test_get_prompt_query_recent_learning_complete(self, server):
"""测试获取查询最近学习提示(完整流程)."""
prompt_name = "query_recent_learning"
arguments = {"days": 30}
days = arguments.get("days", 30)
query_text = f"请使用 query_by_time_range 工具查询最近 {days} 天的学习记录。"
assert "query_by_time_range" in query_text
assert str(days) in query_text
@pytest.mark.asyncio
async def test_get_prompt_query_best_practices_complete(self, server):
"""测试获取查询最佳实践提示(完整流程)."""
prompt_name = "query_best_practices"
arguments = {"topic": "coding"}
topic = arguments.get("topic", "")
if topic:
query_text = f"搜索关于 '{topic}' 的最佳实践和解决方案"
else:
query_text = "搜索所有最佳实践和解决方案"
assert "最佳实践" in query_text or "best practice" in query_text.lower()
@pytest.mark.asyncio
async def test_get_prompt_add_learning_note_complete(self, server):
"""测试获取添加学习笔记提示(完整流程)."""
prompt_name = "add_learning_note"
arguments = {"content": "Test note", "topic": "Python"}
content = arguments.get("content", "")
topic = arguments.get("topic", "")
metadata = {"type": "learning", "source": "user_input"}
if topic:
metadata["topic"] = topic
assert content == "Test note"
assert metadata["type"] == "learning"
assert metadata.get("topic") == "Python"
@pytest.mark.asyncio
async def test_get_prompt_query_related_entities_complete(self, server):
"""测试获取查询相关实体提示(完整流程)."""
prompt_name = "query_related_entities"
arguments = {"entity_name": "TypeScript", "depth": 1}
entity_name = arguments.get("entity_name", "")
depth = arguments.get("depth", 1)
query_text = f"请使用 search_relationships 工具查询与 '{entity_name}' 相关的实体,查询深度为 {depth}。"
assert "search_relationships" in query_text
assert entity_name in query_text
assert str(depth) in query_text
@pytest.mark.asyncio
async def test_get_prompt_summarize_knowledge_complete(self, server):
"""测试获取总结知识提示(完整流程)."""
prompt_name = "summarize_knowledge"
arguments = {"category": "preference"}
category = arguments.get("category", "")
if category:
query_text = f"查询类别为 '{category}' 的所有信息并总结"
else:
query_text = "查询所有信息并总结关键点"
assert "总结" in query_text or "summarize" in query_text.lower()
@pytest.mark.asyncio
async def test_get_prompt_export_data_complete(self, server):
"""测试获取导出数据提示(完整流程)."""
prompt_name = "export_data"
arguments = {"format": "json"}
format_type = arguments.get("format", "json")
query_text = f"请使用 export_graph_data 工具导出知识图谱数据,格式为 {format_type}。"
assert "export_graph_data" in query_text
assert format_type in query_text
@pytest.mark.asyncio
async def test_get_prompt_get_statistics_complete(self, server):
"""测试获取统计信息提示(完整流程)."""
prompt_name = "get_statistics"
arguments = {}
query_text = "请使用 get_statistics 工具获取知识图谱的统计信息。"
assert "get_statistics" in query_text
assert "统计信息" in query_text or "statistics" in query_text.lower()
@pytest.mark.asyncio
async def test_get_prompt_unknown_handling_complete(self, server):
"""测试获取未知提示的处理(完整流程)."""
prompt_name = "unknown_prompt_xyz"
error_text = f"❌ 未知的提示模板: {prompt_name}"
assert "未知" in error_text or "unknown" in error_text.lower()
assert prompt_name in error_text