From d8a4a8c57f595b1e50ee4eb4c93d3766621ec823 Mon Sep 17 00:00:00 2001 From: Cyber MacGeddon Date: Mon, 9 Mar 2026 10:36:52 +0000 Subject: [PATCH] Fixing tests --- .../test_doc_embeddings_pinecone_query.py | 22 +++--- .../test_doc_embeddings_qdrant_query.py | 16 ++-- .../test_doc_embeddings_qdrant_storage.py | 75 ++++++++++--------- 3 files changed, 59 insertions(+), 54 deletions(-) diff --git a/tests/unit/test_query/test_doc_embeddings_pinecone_query.py b/tests/unit/test_query/test_doc_embeddings_pinecone_query.py index 4b067743..04a93c17 100644 --- a/tests/unit/test_query/test_doc_embeddings_pinecone_query.py +++ b/tests/unit/test_query/test_doc_embeddings_pinecone_query.py @@ -103,7 +103,7 @@ class TestPineconeDocEmbeddingsQueryProcessor: async def test_query_document_embeddings_single_vector(self, processor): """Test querying document embeddings with a single vector""" message = MagicMock() - message.vectors = [[0.1, 0.2, 0.3]] + message.vector = [0.1, 0.2, 0.3] message.limit = 3 message.user = 'test_user' message.collection = 'test_collection' @@ -179,7 +179,7 @@ class TestPineconeDocEmbeddingsQueryProcessor: async def test_query_document_embeddings_limit_handling(self, processor): """Test that query respects the limit parameter""" message = MagicMock() - message.vectors = [[0.1, 0.2, 0.3]] + message.vector = [0.1, 0.2, 0.3] message.limit = 2 message.user = 'test_user' message.collection = 'test_collection' @@ -208,7 +208,7 @@ class TestPineconeDocEmbeddingsQueryProcessor: async def test_query_document_embeddings_zero_limit(self, processor): """Test querying with zero limit returns empty results""" message = MagicMock() - message.vectors = [[0.1, 0.2, 0.3]] + message.vector = [0.1, 0.2, 0.3] message.limit = 0 message.user = 'test_user' message.collection = 'test_collection' @@ -226,7 +226,7 @@ class TestPineconeDocEmbeddingsQueryProcessor: async def test_query_document_embeddings_negative_limit(self, processor): """Test querying with negative limit returns empty results""" message = MagicMock() - message.vectors = [[0.1, 0.2, 0.3]] + message.vector = [0.1, 0.2, 0.3] message.limit = -1 message.user = 'test_user' message.collection = 'test_collection' @@ -285,7 +285,7 @@ class TestPineconeDocEmbeddingsQueryProcessor: async def test_query_document_embeddings_empty_vectors_list(self, processor): """Test querying with empty vectors list""" message = MagicMock() - message.vectors = [] + message.vector = [] message.limit = 5 message.user = 'test_user' message.collection = 'test_collection' @@ -304,7 +304,7 @@ class TestPineconeDocEmbeddingsQueryProcessor: async def test_query_document_embeddings_no_results(self, processor): """Test querying when index returns no results""" message = MagicMock() - message.vectors = [[0.1, 0.2, 0.3]] + message.vector = [0.1, 0.2, 0.3] message.limit = 5 message.user = 'test_user' message.collection = 'test_collection' @@ -325,7 +325,7 @@ class TestPineconeDocEmbeddingsQueryProcessor: async def test_query_document_embeddings_unicode_content(self, processor): """Test querying document embeddings with Unicode content results""" message = MagicMock() - message.vectors = [[0.1, 0.2, 0.3]] + message.vector = [0.1, 0.2, 0.3] message.limit = 2 message.user = 'test_user' message.collection = 'test_collection' @@ -351,7 +351,7 @@ class TestPineconeDocEmbeddingsQueryProcessor: async def test_query_document_embeddings_large_content(self, processor): """Test querying document embeddings with large content results""" message = MagicMock() - message.vectors = [[0.1, 0.2, 0.3]] + message.vector = [0.1, 0.2, 0.3] message.limit = 1 message.user = 'test_user' message.collection = 'test_collection' @@ -377,7 +377,7 @@ class TestPineconeDocEmbeddingsQueryProcessor: async def test_query_document_embeddings_mixed_content_types(self, processor): """Test querying document embeddings with mixed content types""" message = MagicMock() - message.vectors = [[0.1, 0.2, 0.3]] + message.vector = [0.1, 0.2, 0.3] message.limit = 5 message.user = 'test_user' message.collection = 'test_collection' @@ -409,7 +409,7 @@ class TestPineconeDocEmbeddingsQueryProcessor: async def test_query_document_embeddings_exception_handling(self, processor): """Test that exceptions are properly raised""" message = MagicMock() - message.vectors = [[0.1, 0.2, 0.3]] + message.vector = [0.1, 0.2, 0.3] message.limit = 5 message.user = 'test_user' message.collection = 'test_collection' @@ -425,7 +425,7 @@ class TestPineconeDocEmbeddingsQueryProcessor: async def test_query_document_embeddings_index_access_failure(self, processor): """Test handling of index access failure""" message = MagicMock() - message.vectors = [[0.1, 0.2, 0.3]] + message.vector = [0.1, 0.2, 0.3] message.limit = 5 message.user = 'test_user' message.collection = 'test_collection' diff --git a/tests/unit/test_query/test_doc_embeddings_qdrant_query.py b/tests/unit/test_query/test_doc_embeddings_qdrant_query.py index 204c4cc3..e6670c10 100644 --- a/tests/unit/test_query/test_doc_embeddings_qdrant_query.py +++ b/tests/unit/test_query/test_doc_embeddings_qdrant_query.py @@ -94,7 +94,7 @@ class TestQdrantDocEmbeddingsQuery(IsolatedAsyncioTestCase): # Create mock message mock_message = MagicMock() - mock_message.vectors = [[0.1, 0.2, 0.3]] + mock_message.vector = [0.1, 0.2, 0.3] mock_message.limit = 5 mock_message.user = 'test_user' mock_message.collection = 'test_collection' @@ -208,7 +208,7 @@ class TestQdrantDocEmbeddingsQuery(IsolatedAsyncioTestCase): # Create mock message with limit mock_message = MagicMock() - mock_message.vectors = [[0.1, 0.2, 0.3]] + mock_message.vector = [0.1, 0.2, 0.3] mock_message.limit = 3 # Should only return 3 results mock_message.user = 'limit_user' mock_message.collection = 'limit_collection' @@ -248,7 +248,7 @@ class TestQdrantDocEmbeddingsQuery(IsolatedAsyncioTestCase): # Create mock message mock_message = MagicMock() - mock_message.vectors = [[0.1, 0.2]] + mock_message.vector = [0.1, 0.2] mock_message.limit = 5 mock_message.user = 'empty_user' mock_message.collection = 'empty_collection' @@ -343,7 +343,7 @@ class TestQdrantDocEmbeddingsQuery(IsolatedAsyncioTestCase): # Create mock message mock_message = MagicMock() - mock_message.vectors = [[0.1, 0.2]] + mock_message.vector = [0.1, 0.2] mock_message.limit = 5 mock_message.user = 'utf8_user' mock_message.collection = 'utf8_collection' @@ -379,7 +379,7 @@ class TestQdrantDocEmbeddingsQuery(IsolatedAsyncioTestCase): # Create mock message mock_message = MagicMock() - mock_message.vectors = [[0.1, 0.2]] + mock_message.vector = [0.1, 0.2] mock_message.limit = 5 mock_message.user = 'error_user' mock_message.collection = 'error_collection' @@ -413,7 +413,7 @@ class TestQdrantDocEmbeddingsQuery(IsolatedAsyncioTestCase): # Create mock message with zero limit mock_message = MagicMock() - mock_message.vectors = [[0.1, 0.2]] + mock_message.vector = [0.1, 0.2] mock_message.limit = 0 mock_message.user = 'zero_user' mock_message.collection = 'zero_collection' @@ -459,7 +459,7 @@ class TestQdrantDocEmbeddingsQuery(IsolatedAsyncioTestCase): # Create mock message with large limit mock_message = MagicMock() - mock_message.vectors = [[0.1, 0.2]] + mock_message.vector = [0.1, 0.2] mock_message.limit = 1000 # Large limit mock_message.user = 'large_user' mock_message.collection = 'large_collection' @@ -508,7 +508,7 @@ class TestQdrantDocEmbeddingsQuery(IsolatedAsyncioTestCase): # Create mock message mock_message = MagicMock() - mock_message.vectors = [[0.1, 0.2]] + mock_message.vector = [0.1, 0.2] mock_message.limit = 5 mock_message.user = 'payload_user' mock_message.collection = 'payload_collection' diff --git a/tests/unit/test_storage/test_doc_embeddings_qdrant_storage.py b/tests/unit/test_storage/test_doc_embeddings_qdrant_storage.py index e3498ce9..98d2dab2 100644 --- a/tests/unit/test_storage/test_doc_embeddings_qdrant_storage.py +++ b/tests/unit/test_storage/test_doc_embeddings_qdrant_storage.py @@ -89,7 +89,7 @@ class TestQdrantDocEmbeddingsStorage(IsolatedAsyncioTestCase): mock_chunk = MagicMock() mock_chunk.chunk_id = 'doc/c1' # chunk_id instead of chunk bytes - mock_chunk.vectors = [[0.1, 0.2, 0.3]] # Single vector with 3 dimensions + mock_chunk.vector = [0.1, 0.2, 0.3] # Single vector with 3 dimensions mock_message.chunks = [mock_chunk] @@ -143,11 +143,11 @@ class TestQdrantDocEmbeddingsStorage(IsolatedAsyncioTestCase): mock_chunk1 = MagicMock() mock_chunk1.chunk_id = 'doc/c1' - mock_chunk1.vectors = [[0.1, 0.2]] + mock_chunk1.vector = [0.1, 0.2] mock_chunk2 = MagicMock() mock_chunk2.chunk_id = 'doc/c2' - mock_chunk2.vectors = [[0.3, 0.4]] + mock_chunk2.vector = [0.3, 0.4] mock_message.chunks = [mock_chunk1, mock_chunk2] @@ -175,8 +175,8 @@ class TestQdrantDocEmbeddingsStorage(IsolatedAsyncioTestCase): @patch('trustgraph.storage.doc_embeddings.qdrant.write.QdrantClient') @patch('trustgraph.storage.doc_embeddings.qdrant.write.uuid') - async def test_store_document_embeddings_multiple_vectors_per_chunk(self, mock_uuid, mock_qdrant_client): - """Test storing document embeddings with multiple vectors per chunk""" + async def test_store_document_embeddings_multiple_chunks(self, mock_uuid, mock_qdrant_client): + """Test storing document embeddings with multiple chunks""" # Arrange mock_qdrant_instance = MagicMock() mock_qdrant_instance.collection_exists.return_value = True @@ -196,41 +196,45 @@ class TestQdrantDocEmbeddingsStorage(IsolatedAsyncioTestCase): # Add collection to known_collections (simulates config push) processor.known_collections[('vector_user', 'vector_collection')] = {} - # Create mock message with chunk having multiple vectors + # Create mock message with multiple chunks, each having a single vector mock_message = MagicMock() mock_message.metadata.user = 'vector_user' mock_message.metadata.collection = 'vector_collection' - mock_chunk = MagicMock() - mock_chunk.chunk_id = 'doc/multi-vector' - mock_chunk.vectors = [ - [0.1, 0.2, 0.3], - [0.4, 0.5, 0.6], - [0.7, 0.8, 0.9] - ] + mock_chunk1 = MagicMock() + mock_chunk1.chunk_id = 'doc/c1' + mock_chunk1.vector = [0.1, 0.2, 0.3] - mock_message.chunks = [mock_chunk] + mock_chunk2 = MagicMock() + mock_chunk2.chunk_id = 'doc/c2' + mock_chunk2.vector = [0.4, 0.5, 0.6] + + mock_chunk3 = MagicMock() + mock_chunk3.chunk_id = 'doc/c3' + mock_chunk3.vector = [0.7, 0.8, 0.9] + + mock_message.chunks = [mock_chunk1, mock_chunk2, mock_chunk3] # Act await processor.store_document_embeddings(mock_message) # Assert - # Should be called 3 times (once per vector) + # Should be called 3 times (once per chunk) assert mock_qdrant_instance.upsert.call_count == 3 # Verify all vectors were processed upsert_calls = mock_qdrant_instance.upsert.call_args_list - expected_vectors = [ - [0.1, 0.2, 0.3], - [0.4, 0.5, 0.6], - [0.7, 0.8, 0.9] + expected_data = [ + ([0.1, 0.2, 0.3], 'doc/c1'), + ([0.4, 0.5, 0.6], 'doc/c2'), + ([0.7, 0.8, 0.9], 'doc/c3') ] for i, call in enumerate(upsert_calls): point = call[1]['points'][0] - assert point.vector == expected_vectors[i] - assert point.payload['chunk_id'] == 'doc/multi-vector' + assert point.vector == expected_data[i][0] + assert point.payload['chunk_id'] == expected_data[i][1] @patch('trustgraph.storage.doc_embeddings.qdrant.write.QdrantClient') async def test_store_document_embeddings_empty_chunk_id(self, mock_qdrant_client): @@ -256,7 +260,7 @@ class TestQdrantDocEmbeddingsStorage(IsolatedAsyncioTestCase): mock_chunk_empty = MagicMock() mock_chunk_empty.chunk_id = "" # Empty chunk_id - mock_chunk_empty.vectors = [[0.1, 0.2]] + mock_chunk_empty.vector = [0.1, 0.2] mock_message.chunks = [mock_chunk_empty] @@ -299,7 +303,7 @@ class TestQdrantDocEmbeddingsStorage(IsolatedAsyncioTestCase): mock_chunk = MagicMock() mock_chunk.chunk_id = 'doc/test-chunk' - mock_chunk.vectors = [[0.1, 0.2, 0.3, 0.4, 0.5]] # 5 dimensions + mock_chunk.vector = [0.1, 0.2, 0.3, 0.4, 0.5] # 5 dimensions mock_message.chunks = [mock_chunk] @@ -351,7 +355,7 @@ class TestQdrantDocEmbeddingsStorage(IsolatedAsyncioTestCase): mock_chunk = MagicMock() mock_chunk.chunk_id = 'doc/test-chunk' - mock_chunk.vectors = [[0.1, 0.2]] + mock_chunk.vector = [0.1, 0.2] mock_message.chunks = [mock_chunk] @@ -389,7 +393,7 @@ class TestQdrantDocEmbeddingsStorage(IsolatedAsyncioTestCase): mock_chunk1 = MagicMock() mock_chunk1.chunk_id = 'doc/c1' - mock_chunk1.vectors = [[0.1, 0.2, 0.3]] + mock_chunk1.vector = [0.1, 0.2, 0.3] mock_message1.chunks = [mock_chunk1] @@ -407,7 +411,7 @@ class TestQdrantDocEmbeddingsStorage(IsolatedAsyncioTestCase): mock_chunk2 = MagicMock() mock_chunk2.chunk_id = 'doc/c2' - mock_chunk2.vectors = [[0.4, 0.5, 0.6]] # Same dimension (3) + mock_chunk2.vector = [0.4, 0.5, 0.6] # Same dimension (3) mock_message2.chunks = [mock_chunk2] @@ -446,19 +450,20 @@ class TestQdrantDocEmbeddingsStorage(IsolatedAsyncioTestCase): # Add collection to known_collections (simulates config push) processor.known_collections[('dim_user', 'dim_collection')] = {} - # Create mock message with different dimension vectors + # Create mock message with chunks of different dimensions mock_message = MagicMock() mock_message.metadata.user = 'dim_user' mock_message.metadata.collection = 'dim_collection' - mock_chunk = MagicMock() - mock_chunk.chunk_id = 'doc/dim-test' - mock_chunk.vectors = [ - [0.1, 0.2], # 2 dimensions - [0.3, 0.4, 0.5] # 3 dimensions - ] + mock_chunk1 = MagicMock() + mock_chunk1.chunk_id = 'doc/c1' + mock_chunk1.vector = [0.1, 0.2] # 2 dimensions - mock_message.chunks = [mock_chunk] + mock_chunk2 = MagicMock() + mock_chunk2.chunk_id = 'doc/c2' + mock_chunk2.vector = [0.3, 0.4, 0.5] # 3 dimensions + + mock_message.chunks = [mock_chunk1, mock_chunk2] # Act await processor.store_document_embeddings(mock_message) @@ -526,7 +531,7 @@ class TestQdrantDocEmbeddingsStorage(IsolatedAsyncioTestCase): mock_chunk = MagicMock() mock_chunk.chunk_id = 'https://trustgraph.ai/doc/my-document/p1/c3' - mock_chunk.vectors = [[0.1, 0.2]] + mock_chunk.vector = [0.1, 0.2] mock_message.chunks = [mock_chunk]