feat: qdrant store mit ensure/upsert/delete-by-path
This commit is contained in:
73
tests/test_qdrant_store.py
Normal file
73
tests/test_qdrant_store.py
Normal file
@@ -0,0 +1,73 @@
|
||||
from unittest.mock import MagicMock, patch
|
||||
import pytest
|
||||
|
||||
from app.qdrant_store import (
|
||||
ensure_collection,
|
||||
upsert_chunks,
|
||||
delete_by_path,
|
||||
ChunkPoint,
|
||||
)
|
||||
|
||||
|
||||
def test_ensure_collection_creates_when_missing():
|
||||
fake_client = MagicMock()
|
||||
fake_client.collection_exists.return_value = False
|
||||
|
||||
ensure_collection(fake_client, "rag_test", vector_size=1024)
|
||||
|
||||
fake_client.create_collection.assert_called_once()
|
||||
args, kwargs = fake_client.create_collection.call_args
|
||||
assert kwargs["collection_name"] == "rag_test"
|
||||
# Payload indexes get created
|
||||
assert fake_client.create_payload_index.call_count == 3
|
||||
|
||||
|
||||
def test_ensure_collection_skips_when_exists_with_matching_dim():
|
||||
fake_client = MagicMock()
|
||||
fake_client.collection_exists.return_value = True
|
||||
info = MagicMock()
|
||||
info.config.params.vectors.size = 1024
|
||||
fake_client.get_collection.return_value = info
|
||||
|
||||
ensure_collection(fake_client, "rag_test", vector_size=1024)
|
||||
|
||||
fake_client.create_collection.assert_not_called()
|
||||
|
||||
|
||||
def test_ensure_collection_raises_on_dim_mismatch():
|
||||
fake_client = MagicMock()
|
||||
fake_client.collection_exists.return_value = True
|
||||
info = MagicMock()
|
||||
info.config.params.vectors.size = 768
|
||||
fake_client.get_collection.return_value = info
|
||||
|
||||
with pytest.raises(RuntimeError, match="dimension mismatch"):
|
||||
ensure_collection(fake_client, "rag_test", vector_size=1024)
|
||||
|
||||
|
||||
def test_upsert_chunks_calls_client_upsert():
|
||||
fake_client = MagicMock()
|
||||
points = [
|
||||
ChunkPoint(vector=[0.1] * 4, payload={"file_path": "a", "chunk_index": 0}),
|
||||
ChunkPoint(vector=[0.2] * 4, payload={"file_path": "a", "chunk_index": 1}),
|
||||
]
|
||||
|
||||
upsert_chunks(fake_client, "rag_test", points)
|
||||
|
||||
fake_client.upsert.assert_called_once()
|
||||
kwargs = fake_client.upsert.call_args.kwargs
|
||||
assert kwargs["collection_name"] == "rag_test"
|
||||
assert len(kwargs["points"]) == 2
|
||||
|
||||
|
||||
def test_delete_by_path_uses_filter():
|
||||
fake_client = MagicMock()
|
||||
delete_by_path(fake_client, "rag_test", "Documents/x.pdf")
|
||||
|
||||
fake_client.delete.assert_called_once()
|
||||
kwargs = fake_client.delete.call_args.kwargs
|
||||
assert kwargs["collection_name"] == "rag_test"
|
||||
# The filter should target file_path
|
||||
selector = kwargs["points_selector"]
|
||||
# Inspect the FilterSelector → Filter → must → FieldCondition
|
||||
assert selector.filter.must[0].key == "file_path"
|
||||
Reference in New Issue
Block a user