"""GraphitiClient 语义搜索完整测试."""
import pytest
from unittest.mock import Mock, MagicMock, patch, AsyncMock
from src.graphiti_client import GraphitiClient
from src.config_manager import ConfigManager
class TestGraphitiClientSemanticSearchFull:
"""GraphitiClient 语义搜索完整测试类."""
@pytest.fixture
def config_manager(self, temp_config_dir):
"""创建配置管理器."""
return ConfigManager(config_path=temp_config_dir / ".graphitiace" / "config.json")
@pytest.fixture
def mock_client(self, config_manager):
"""创建 Mock 客户端."""
client = GraphitiClient(config_manager)
# 配置 API 和 Neo4j
config_manager.configure_api(
provider="openai",
api_key="test_key"
)
config_manager.configure_neo4j(
uri="bolt://localhost:7687",
username="neo4j",
password="test"
)
# Mock driver 和 session
mock_driver = Mock()
mock_session = Mock()
mock_driver.session.return_value.__enter__ = Mock(return_value=mock_session)
mock_driver.session.return_value.__exit__ = Mock(return_value=None)
client.driver = mock_driver
client._connected = True
# Mock Graphiti(行1107-1156)
mock_graphiti = Mock()
mock_edge = Mock()
mock_from_node = Mock()
mock_from_node.uuid = "uuid1"
mock_from_node.name = "Node1"
mock_from_node.entity_type = "Technology"
mock_to_node = Mock()
mock_to_node.uuid = "uuid2"
mock_to_node.name = "Node2"
mock_to_node.entity_type = "Technology"
mock_edge.from_node = mock_from_node
mock_edge.to_node = mock_to_node
mock_edge.relationship_type = "RELATES_TO"
mock_edge.description = "相关关系"
mock_graphiti.search = AsyncMock(return_value=[mock_edge])
client.graphiti = mock_graphiti
client._graphiti_initialized = True
return client, mock_session, mock_graphiti
@pytest.mark.asyncio
async def test_semantic_search_full_with_graphiti(self, mock_client):
"""测试完整语义搜索(使用 Graphiti,行1107-1156)."""
client, mock_session, mock_graphiti = mock_client
result = await client.semantic_search(
query="TypeScript",
num_results=10
)
assert result is not None
assert result['success'] is True
assert result['search_type'] == "semantic"
assert len(result['results']) == 1
assert result['results'][0]['from_node']['name'] == "Node1"
assert result['results'][0]['to_node']['name'] == "Node2"
# 验证 Graphiti 的 search 被调用
mock_graphiti.search.assert_called_once()