| """
|
| Tests for QdrantStore (Phase 3.5.2)
|
| ===================================
|
| Uses unittest.mock to simulate Qdrant backend interactions.
|
| Rewritten to use pytest-asyncio for proper async support.
|
| """
|
|
|
| import pytest
|
| from unittest.mock import MagicMock, patch, ANY
|
| from mnemocore.core.config import get_config, reset_config
|
| from mnemocore.core.qdrant_store import QdrantStore
|
|
|
| @pytest.fixture
|
| def mock_qdrant_client():
|
| with patch("src.core.qdrant_store.AsyncQdrantClient") as MockClass:
|
| mock_instance = MockClass.return_value
|
|
|
| mock_instance.collection_exists.return_value = False
|
| yield mock_instance
|
|
|
| @pytest.fixture
|
| def store(mock_qdrant_client):
|
| reset_config()
|
|
|
|
|
| return QdrantStore()
|
|
|
| @pytest.mark.asyncio
|
| async def test_ensure_collections(store, mock_qdrant_client):
|
|
|
| mock_qdrant_client.collection_exists.return_value = False
|
|
|
| await store.ensure_collections()
|
|
|
|
|
| assert mock_qdrant_client.create_collection.call_count == 2
|
|
|
|
|
| config = get_config().qdrant
|
| mock_qdrant_client.create_collection.assert_any_call(
|
| collection_name=config.collection_hot,
|
| vectors_config=ANY,
|
| quantization_config=ANY,
|
| hnsw_config=ANY
|
| )
|
| mock_qdrant_client.create_collection.assert_any_call(
|
| collection_name=config.collection_warm,
|
| vectors_config=ANY,
|
| quantization_config=ANY,
|
| hnsw_config=ANY
|
| )
|
|
|
| @pytest.mark.asyncio
|
| async def test_upsert(store, mock_qdrant_client):
|
| points = [MagicMock()]
|
| await store.upsert("test_coll", points)
|
| mock_qdrant_client.upsert.assert_called_with(collection_name="test_coll", points=points)
|
|
|
| @pytest.mark.asyncio
|
| async def test_search(store, mock_qdrant_client):
|
| query = [0.1, 0.2]
|
| await store.search("test_coll", query, limit=5)
|
| mock_qdrant_client.search.assert_called_with(
|
| collection_name="test_coll",
|
| query_vector=query,
|
| limit=5,
|
| score_threshold=0.0
|
| )
|
|
|
| @pytest.mark.asyncio
|
| async def test_get_point(store, mock_qdrant_client):
|
| await store.get_point("test_coll", "id1")
|
| mock_qdrant_client.retrieve.assert_called_with(
|
| collection_name="test_coll",
|
| ids=["id1"],
|
| with_vectors=True,
|
| with_payload=True
|
| )
|
|
|
| @pytest.mark.asyncio
|
| async def test_delete(store, mock_qdrant_client):
|
| await store.delete("test_coll", ["id1"])
|
| mock_qdrant_client.delete.assert_called_once()
|
|
|