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 fd090b0a..b50a95b8 100644 --- a/tests/unit/test_query/test_doc_embeddings_pinecone_query.py +++ b/tests/unit/test_query/test_doc_embeddings_pinecone_query.py @@ -117,7 +117,7 @@ class TestPineconeDocEmbeddingsQueryProcessor: ] mock_index.query.return_value = mock_results - chunks = await processor.query_document_embeddings('default', message) + chunks = await processor.query_document_embeddings('test_user', message) # Verify index was accessed correctly (with dimension suffix) expected_index_name = "d-test_user-test_collection-3" # 3 dimensions @@ -191,7 +191,7 @@ class TestPineconeDocEmbeddingsQueryProcessor: ] mock_index.query.return_value = mock_results - chunks = await processor.query_document_embeddings('default', message) + chunks = await processor.query_document_embeddings('test_user', message) # Verify limit is passed to query mock_index.query.assert_called_once() @@ -213,7 +213,7 @@ class TestPineconeDocEmbeddingsQueryProcessor: mock_index = MagicMock() processor.pinecone.Index.return_value = mock_index - chunks = await processor.query_document_embeddings('default', message) + chunks = await processor.query_document_embeddings('test_user', message) # Verify no query was made and empty result returned mock_index.query.assert_not_called() @@ -231,7 +231,7 @@ class TestPineconeDocEmbeddingsQueryProcessor: mock_index = MagicMock() processor.pinecone.Index.return_value = mock_index - chunks = await processor.query_document_embeddings('default', message) + chunks = await processor.query_document_embeddings('test_user', message) # Verify no query was made and empty result returned mock_index.query.assert_not_called() @@ -259,7 +259,7 @@ class TestPineconeDocEmbeddingsQueryProcessor: mock_index.query.side_effect = [mock_results_2d, mock_results_4d] - chunks = await processor.query_document_embeddings('default', message) + chunks = await processor.query_document_embeddings('test_user', message) # Verify different indexes used for different dimensions assert processor.pinecone.Index.call_count == 2 @@ -287,7 +287,7 @@ class TestPineconeDocEmbeddingsQueryProcessor: mock_index = MagicMock() processor.pinecone.Index.return_value = mock_index - chunks = await processor.query_document_embeddings('default', message) + chunks = await processor.query_document_embeddings('test_user', message) # Verify no queries were made and empty result returned processor.pinecone.Index.assert_not_called() @@ -310,7 +310,7 @@ class TestPineconeDocEmbeddingsQueryProcessor: mock_results.matches = [] mock_index.query.return_value = mock_results - chunks = await processor.query_document_embeddings('default', message) + chunks = await processor.query_document_embeddings('test_user', message) # Verify empty results assert chunks == [] @@ -334,7 +334,7 @@ class TestPineconeDocEmbeddingsQueryProcessor: ] mock_index.query.return_value = mock_results - chunks = await processor.query_document_embeddings('default', message) + chunks = await processor.query_document_embeddings('test_user', message) # Verify Unicode content is properly handled assert len(chunks) == 2 @@ -361,7 +361,7 @@ class TestPineconeDocEmbeddingsQueryProcessor: ] mock_index.query.return_value = mock_results - chunks = await processor.query_document_embeddings('default', message) + chunks = await processor.query_document_embeddings('test_user', message) # Verify large content is properly handled assert len(chunks) == 1 @@ -389,7 +389,7 @@ class TestPineconeDocEmbeddingsQueryProcessor: ] mock_index.query.return_value = mock_results - chunks = await processor.query_document_embeddings('default', message) + chunks = await processor.query_document_embeddings('test_user', message) # Verify all content types are properly handled assert len(chunks) == 5 @@ -413,7 +413,7 @@ class TestPineconeDocEmbeddingsQueryProcessor: mock_index.query.side_effect = Exception("Query failed") with pytest.raises(Exception, match="Query failed"): - await processor.query_document_embeddings('default', message) + await processor.query_document_embeddings('test_user', message) @pytest.mark.asyncio async def test_query_document_embeddings_index_access_failure(self, processor): @@ -427,7 +427,7 @@ class TestPineconeDocEmbeddingsQueryProcessor: processor.pinecone.Index.side_effect = Exception("Index access failed") with pytest.raises(Exception, match="Index access failed"): - await processor.query_document_embeddings('default', message) + await processor.query_document_embeddings('test_user', message) @pytest.mark.asyncio async def test_query_document_embeddings_vector_accumulation(self, processor): @@ -462,7 +462,7 @@ class TestPineconeDocEmbeddingsQueryProcessor: mock_index.query.side_effect = [mock_results1, mock_results2, mock_results3] - chunks = await processor.query_document_embeddings('default', message) + chunks = await processor.query_document_embeddings('test_user', message) # Verify all queries were made assert mock_index.query.call_count == 3 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 614efe74..3602ad51 100644 --- a/tests/unit/test_query/test_doc_embeddings_qdrant_query.py +++ b/tests/unit/test_query/test_doc_embeddings_qdrant_query.py @@ -101,7 +101,7 @@ class TestQdrantDocEmbeddingsQuery(IsolatedAsyncioTestCase): mock_message.collection = 'test_collection' # Act - result = await processor.query_document_embeddings('default', mock_message) + result = await processor.query_document_embeddings('test_user', mock_message) # Assert # Verify query was called with correct parameters (with dimension suffix) @@ -158,7 +158,7 @@ class TestQdrantDocEmbeddingsQuery(IsolatedAsyncioTestCase): mock_message.collection = 'multi_collection' # Act - result = await processor.query_document_embeddings('default', mock_message) + result = await processor.query_document_embeddings('multi_user', mock_message) # Assert # Verify query was called once @@ -212,7 +212,7 @@ class TestQdrantDocEmbeddingsQuery(IsolatedAsyncioTestCase): mock_message.collection = 'limit_collection' # Act - result = await processor.query_document_embeddings('default', mock_message) + result = await processor.query_document_embeddings('limit_user', mock_message) # Assert # Verify query was called with exact limit (no multiplication) @@ -252,7 +252,7 @@ class TestQdrantDocEmbeddingsQuery(IsolatedAsyncioTestCase): mock_message.collection = 'empty_collection' # Act - result = await processor.query_document_embeddings('default', mock_message) + result = await processor.query_document_embeddings('empty_user', mock_message) # Assert assert result == [] @@ -291,7 +291,7 @@ class TestQdrantDocEmbeddingsQuery(IsolatedAsyncioTestCase): mock_message.collection = 'dim_collection' # Act - result = await processor.query_document_embeddings('default', mock_message) + result = await processor.query_document_embeddings('dim_user', mock_message) # Assert # Verify query was called once with correct collection @@ -342,7 +342,7 @@ class TestQdrantDocEmbeddingsQuery(IsolatedAsyncioTestCase): mock_message.collection = 'utf8_collection' # Act - result = await processor.query_document_embeddings('default', mock_message) + result = await processor.query_document_embeddings('utf8_user', mock_message) # Assert assert len(result) == 2 @@ -380,7 +380,7 @@ class TestQdrantDocEmbeddingsQuery(IsolatedAsyncioTestCase): # Act & Assert with pytest.raises(Exception, match="Qdrant connection failed"): - await processor.query_document_embeddings('default', mock_message) + await processor.query_document_embeddings('error_user', mock_message) @patch('trustgraph.query.doc_embeddings.qdrant.service.QdrantClient') @patch('trustgraph.base.DocumentEmbeddingsQueryService.__init__') @@ -413,7 +413,7 @@ class TestQdrantDocEmbeddingsQuery(IsolatedAsyncioTestCase): mock_message.collection = 'zero_collection' # Act - result = await processor.query_document_embeddings('default', mock_message) + result = await processor.query_document_embeddings('zero_user', mock_message) # Assert # Should still query (with limit 0) @@ -460,7 +460,7 @@ class TestQdrantDocEmbeddingsQuery(IsolatedAsyncioTestCase): mock_message.collection = 'large_collection' # Act - result = await processor.query_document_embeddings('default', mock_message) + result = await processor.query_document_embeddings('large_user', mock_message) # Assert # Should query with full limit @@ -512,7 +512,7 @@ class TestQdrantDocEmbeddingsQuery(IsolatedAsyncioTestCase): # Act & Assert # This should raise a KeyError when trying to access payload['chunk_id'] with pytest.raises(KeyError): - await processor.query_document_embeddings('default', mock_message) + await processor.query_document_embeddings('payload_user', mock_message) @patch('trustgraph.query.doc_embeddings.qdrant.service.QdrantClient') @patch('trustgraph.base.DocumentEmbeddingsQueryService.__init__') diff --git a/tests/unit/test_query/test_graph_embeddings_pinecone_query.py b/tests/unit/test_query/test_graph_embeddings_pinecone_query.py index eb64ec8b..0fc8f7c0 100644 --- a/tests/unit/test_query/test_graph_embeddings_pinecone_query.py +++ b/tests/unit/test_query/test_graph_embeddings_pinecone_query.py @@ -145,7 +145,7 @@ class TestPineconeGraphEmbeddingsQueryProcessor: ] mock_index.query.return_value = mock_results - entities = await processor.query_graph_embeddings('default', message) + entities = await processor.query_graph_embeddings('test_user', message) # Verify index was accessed correctly (with dimension suffix) expected_index_name = "t-test_user-test_collection-3" # 3 dimensions @@ -216,7 +216,7 @@ class TestPineconeGraphEmbeddingsQueryProcessor: ] mock_index.query.return_value = mock_results - entities = await processor.query_graph_embeddings('default', message) + entities = await processor.query_graph_embeddings('test_user', message) # Verify limit is respected assert len(entities) == 2 @@ -233,7 +233,7 @@ class TestPineconeGraphEmbeddingsQueryProcessor: mock_index = MagicMock() processor.pinecone.Index.return_value = mock_index - entities = await processor.query_graph_embeddings('default', message) + entities = await processor.query_graph_embeddings('test_user', message) # Verify no query was made and empty result returned mock_index.query.assert_not_called() @@ -251,7 +251,7 @@ class TestPineconeGraphEmbeddingsQueryProcessor: mock_index = MagicMock() processor.pinecone.Index.return_value = mock_index - entities = await processor.query_graph_embeddings('default', message) + entities = await processor.query_graph_embeddings('test_user', message) # Verify no query was made and empty result returned mock_index.query.assert_not_called() @@ -276,7 +276,7 @@ class TestPineconeGraphEmbeddingsQueryProcessor: mock_index.query.return_value = mock_results - entities = await processor.query_graph_embeddings('default', message) + entities = await processor.query_graph_embeddings('test_user', message) # Verify correct index used for 2D vector processor.pinecone.Index.assert_called_with("t-test_user-test_collection-2") @@ -300,7 +300,7 @@ class TestPineconeGraphEmbeddingsQueryProcessor: mock_index = MagicMock() processor.pinecone.Index.return_value = mock_index - entities = await processor.query_graph_embeddings('default', message) + entities = await processor.query_graph_embeddings('test_user', message) # Verify no queries were made and empty result returned processor.pinecone.Index.assert_not_called() @@ -323,7 +323,7 @@ class TestPineconeGraphEmbeddingsQueryProcessor: mock_results.matches = [] mock_index.query.return_value = mock_results - entities = await processor.query_graph_embeddings('default', message) + entities = await processor.query_graph_embeddings('test_user', message) # Verify empty results assert entities == [] @@ -352,7 +352,7 @@ class TestPineconeGraphEmbeddingsQueryProcessor: mock_index.query.return_value = mock_results - entities = await processor.query_graph_embeddings('default', message) + entities = await processor.query_graph_embeddings('test_user', message) # Should get exactly 3 unique entities (respecting limit) assert len(entities) == 3 @@ -380,7 +380,7 @@ class TestPineconeGraphEmbeddingsQueryProcessor: ] mock_index.query.return_value = mock_results - entities = await processor.query_graph_embeddings('default', message) + entities = await processor.query_graph_embeddings('test_user', message) # Should only return 2 entities (respecting limit) mock_index.query.assert_called_once() @@ -400,7 +400,7 @@ class TestPineconeGraphEmbeddingsQueryProcessor: mock_index.query.side_effect = Exception("Query failed") with pytest.raises(Exception, match="Query failed"): - await processor.query_graph_embeddings('default', message) + await processor.query_graph_embeddings('test_user', message) def test_add_args_method(self): """Test that add_args properly configures argument parser""" diff --git a/tests/unit/test_query/test_graph_embeddings_qdrant_query.py b/tests/unit/test_query/test_graph_embeddings_qdrant_query.py index 13924bef..41b6c8a4 100644 --- a/tests/unit/test_query/test_graph_embeddings_qdrant_query.py +++ b/tests/unit/test_query/test_graph_embeddings_qdrant_query.py @@ -173,7 +173,7 @@ class TestQdrantGraphEmbeddingsQuery(IsolatedAsyncioTestCase): mock_message.collection = 'test_collection' # Act - result = await processor.query_graph_embeddings('default', mock_message) + result = await processor.query_graph_embeddings('test_user', mock_message) # Assert # Verify query was called with correct parameters (with dimension suffix) @@ -230,7 +230,7 @@ class TestQdrantGraphEmbeddingsQuery(IsolatedAsyncioTestCase): mock_message.collection = 'multi_collection' # Act - result = await processor.query_graph_embeddings('default', mock_message) + result = await processor.query_graph_embeddings('multi_user', mock_message) # Assert # Verify query was called once @@ -283,7 +283,7 @@ class TestQdrantGraphEmbeddingsQuery(IsolatedAsyncioTestCase): mock_message.collection = 'limit_collection' # Act - result = await processor.query_graph_embeddings('default', mock_message) + result = await processor.query_graph_embeddings('limit_user', mock_message) # Assert # Verify query was called with limit * 2 @@ -323,7 +323,7 @@ class TestQdrantGraphEmbeddingsQuery(IsolatedAsyncioTestCase): mock_message.collection = 'empty_collection' # Act - result = await processor.query_graph_embeddings('default', mock_message) + result = await processor.query_graph_embeddings('empty_user', mock_message) # Assert assert result == [] @@ -364,7 +364,7 @@ class TestQdrantGraphEmbeddingsQuery(IsolatedAsyncioTestCase): mock_message.collection = 'dim_collection' # Act - result = await processor.query_graph_embeddings('default', mock_message) + result = await processor.query_graph_embeddings('dim_user', mock_message) # Assert # Verify query was called once @@ -415,7 +415,7 @@ class TestQdrantGraphEmbeddingsQuery(IsolatedAsyncioTestCase): mock_message.collection = 'uri_collection' # Act - result = await processor.query_graph_embeddings('default', mock_message) + result = await processor.query_graph_embeddings('uri_user', mock_message) # Assert assert len(result) == 3 @@ -460,7 +460,7 @@ class TestQdrantGraphEmbeddingsQuery(IsolatedAsyncioTestCase): # Act & Assert with pytest.raises(Exception, match="Qdrant connection failed"): - await processor.query_graph_embeddings('default', mock_message) + await processor.query_graph_embeddings('error_user', mock_message) @patch('trustgraph.query.graph_embeddings.qdrant.service.QdrantClient') @patch('trustgraph.base.GraphEmbeddingsQueryService.__init__') @@ -493,7 +493,7 @@ class TestQdrantGraphEmbeddingsQuery(IsolatedAsyncioTestCase): mock_message.collection = 'zero_collection' # Act - result = await processor.query_graph_embeddings('default', mock_message) + result = await processor.query_graph_embeddings('zero_user', mock_message) # Assert # Should still query (with limit 0) diff --git a/tests/unit/test_query/test_memgraph_workspace_collection_query.py b/tests/unit/test_query/test_memgraph_workspace_collection_query.py index ea902d05..435474e1 100644 --- a/tests/unit/test_query/test_memgraph_workspace_collection_query.py +++ b/tests/unit/test_query/test_memgraph_workspace_collection_query.py @@ -36,9 +36,9 @@ class TestMemgraphQueryWorkspaceCollectionIsolation: # Verify SPO query for literal includes user/collection expected_query = ( - "MATCH (src:Node {uri: $src, user: $user, collection: $collection})-" - "[rel:Rel {uri: $rel, user: $user, collection: $collection}]->" - "(dest:Literal {value: $value, user: $user, collection: $collection}) " + "MATCH (src:Node {uri: $src, workspace: $workspace, collection: $collection})-" + "[rel:Rel {uri: $rel, workspace: $workspace, collection: $collection}]->" + "(dest:Literal {value: $value, workspace: $workspace, collection: $collection}) " "RETURN $src as src " "LIMIT 1000" ) @@ -48,7 +48,7 @@ class TestMemgraphQueryWorkspaceCollectionIsolation: src="http://example.com/s", rel="http://example.com/p", value="test_object", - user="test_user", + workspace="test_user", collection="test_collection", database_='memgraph' ) @@ -77,9 +77,9 @@ class TestMemgraphQueryWorkspaceCollectionIsolation: # Verify SP query for literals includes user/collection expected_literal_query = ( - "MATCH (src:Node {uri: $src, user: $user, collection: $collection})-" - "[rel:Rel {uri: $rel, user: $user, collection: $collection}]->" - "(dest:Literal {user: $user, collection: $collection}) " + "MATCH (src:Node {uri: $src, workspace: $workspace, collection: $collection})-" + "[rel:Rel {uri: $rel, workspace: $workspace, collection: $collection}]->" + "(dest:Literal {workspace: $workspace, collection: $collection}) " "RETURN dest.value as dest " "LIMIT 1000" ) @@ -88,7 +88,7 @@ class TestMemgraphQueryWorkspaceCollectionIsolation: expected_literal_query, src="http://example.com/s", rel="http://example.com/p", - user="test_user", + workspace="test_user", collection="test_collection", database_='memgraph' ) @@ -117,9 +117,9 @@ class TestMemgraphQueryWorkspaceCollectionIsolation: # Verify SO query for nodes includes user/collection expected_query = ( - "MATCH (src:Node {uri: $src, user: $user, collection: $collection})-" - "[rel:Rel {user: $user, collection: $collection}]->" - "(dest:Node {uri: $uri, user: $user, collection: $collection}) " + "MATCH (src:Node {uri: $src, workspace: $workspace, collection: $collection})-" + "[rel:Rel {workspace: $workspace, collection: $collection}]->" + "(dest:Node {uri: $uri, workspace: $workspace, collection: $collection}) " "RETURN rel.uri as rel " "LIMIT 1000" ) @@ -128,7 +128,7 @@ class TestMemgraphQueryWorkspaceCollectionIsolation: expected_query, src="http://example.com/s", uri="http://example.com/o", - user="test_user", + workspace="test_user", collection="test_collection", database_='memgraph' ) @@ -157,9 +157,9 @@ class TestMemgraphQueryWorkspaceCollectionIsolation: # Verify S query includes user/collection expected_query = ( - "MATCH (src:Node {uri: $src, user: $user, collection: $collection})-" - "[rel:Rel {user: $user, collection: $collection}]->" - "(dest:Literal {user: $user, collection: $collection}) " + "MATCH (src:Node {uri: $src, workspace: $workspace, collection: $collection})-" + "[rel:Rel {workspace: $workspace, collection: $collection}]->" + "(dest:Literal {workspace: $workspace, collection: $collection}) " "RETURN rel.uri as rel, dest.value as dest " "LIMIT 1000" ) @@ -167,7 +167,7 @@ class TestMemgraphQueryWorkspaceCollectionIsolation: mock_driver.execute_query.assert_any_call( expected_query, src="http://example.com/s", - user="test_user", + workspace="test_user", collection="test_collection", database_='memgraph' ) @@ -196,9 +196,9 @@ class TestMemgraphQueryWorkspaceCollectionIsolation: # Verify PO query for literals includes user/collection expected_query = ( - "MATCH (src:Node {user: $user, collection: $collection})-" - "[rel:Rel {uri: $uri, user: $user, collection: $collection}]->" - "(dest:Literal {value: $value, user: $user, collection: $collection}) " + "MATCH (src:Node {workspace: $workspace, collection: $collection})-" + "[rel:Rel {uri: $uri, workspace: $workspace, collection: $collection}]->" + "(dest:Literal {value: $value, workspace: $workspace, collection: $collection}) " "RETURN src.uri as src " "LIMIT 1000" ) @@ -207,7 +207,7 @@ class TestMemgraphQueryWorkspaceCollectionIsolation: expected_query, uri="http://example.com/p", value="literal", - user="test_user", + workspace="test_user", collection="test_collection", database_='memgraph' ) @@ -236,9 +236,9 @@ class TestMemgraphQueryWorkspaceCollectionIsolation: # Verify P query includes user/collection expected_query = ( - "MATCH (src:Node {user: $user, collection: $collection})-" - "[rel:Rel {uri: $uri, user: $user, collection: $collection}]->" - "(dest:Literal {user: $user, collection: $collection}) " + "MATCH (src:Node {workspace: $workspace, collection: $collection})-" + "[rel:Rel {uri: $uri, workspace: $workspace, collection: $collection}]->" + "(dest:Literal {workspace: $workspace, collection: $collection}) " "RETURN src.uri as src, dest.value as dest " "LIMIT 1000" ) @@ -246,7 +246,7 @@ class TestMemgraphQueryWorkspaceCollectionIsolation: mock_driver.execute_query.assert_any_call( expected_query, uri="http://example.com/p", - user="test_user", + workspace="test_user", collection="test_collection", database_='memgraph' ) @@ -275,9 +275,9 @@ class TestMemgraphQueryWorkspaceCollectionIsolation: # Verify O query for literals includes user/collection expected_query = ( - "MATCH (src:Node {user: $user, collection: $collection})-" - "[rel:Rel {user: $user, collection: $collection}]->" - "(dest:Literal {value: $value, user: $user, collection: $collection}) " + "MATCH (src:Node {workspace: $workspace, collection: $collection})-" + "[rel:Rel {workspace: $workspace, collection: $collection}]->" + "(dest:Literal {value: $value, workspace: $workspace, collection: $collection}) " "RETURN src.uri as src, rel.uri as rel " "LIMIT 1000" ) @@ -285,7 +285,7 @@ class TestMemgraphQueryWorkspaceCollectionIsolation: mock_driver.execute_query.assert_any_call( expected_query, value="test_value", - user="test_user", + workspace="test_user", collection="test_collection", database_='memgraph' ) @@ -314,32 +314,32 @@ class TestMemgraphQueryWorkspaceCollectionIsolation: # Verify wildcard query for literals includes user/collection expected_literal_query = ( - "MATCH (src:Node {user: $user, collection: $collection})-" - "[rel:Rel {user: $user, collection: $collection}]->" - "(dest:Literal {user: $user, collection: $collection}) " + "MATCH (src:Node {workspace: $workspace, collection: $collection})-" + "[rel:Rel {workspace: $workspace, collection: $collection}]->" + "(dest:Literal {workspace: $workspace, collection: $collection}) " "RETURN src.uri as src, rel.uri as rel, dest.value as dest " "LIMIT 1000" ) mock_driver.execute_query.assert_any_call( expected_literal_query, - user="test_user", + workspace="test_user", collection="test_collection", database_='memgraph' ) # Verify wildcard query for nodes includes user/collection expected_node_query = ( - "MATCH (src:Node {user: $user, collection: $collection})-" - "[rel:Rel {user: $user, collection: $collection}]->" - "(dest:Node {user: $user, collection: $collection}) " + "MATCH (src:Node {workspace: $workspace, collection: $collection})-" + "[rel:Rel {workspace: $workspace, collection: $collection}]->" + "(dest:Node {workspace: $workspace, collection: $collection}) " "RETURN src.uri as src, rel.uri as rel, dest.uri as dest " "LIMIT 1000" ) mock_driver.execute_query.assert_any_call( expected_node_query, - user="test_user", + workspace="test_user", collection="test_collection", database_='memgraph' )