Skip to content

Commit ad99648

Browse files
author
Zhe Yu
committed
tests(cli): Mock embedding function in tests
1 parent eb699ad commit ad99648

4 files changed

Lines changed: 34 additions & 10 deletions

File tree

src/vectorcode/common.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ def get_embedding_function(configs: Config) -> chromadb.EmbeddingFunction:
134134
ef = getattr(embedding_functions, configs.embedding_function)(
135135
**configs.embedding_params
136136
)
137-
if ef is None:
137+
if ef is None: # pragma: nocover
138138
raise AttributeError()
139139
return ef
140140
except AttributeError:

tests/subcommands/query/test_query.py

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,14 @@ def mock_config():
6464

6565
@pytest.mark.asyncio
6666
async def test_get_query_result_files(mock_collection, mock_config):
67-
# Mock the reranker
68-
with patch("vectorcode.subcommands.query.get_reranker") as mock_get_reranker:
67+
mock_embedding_function = MagicMock()
68+
with (
69+
patch("vectorcode.subcommands.query.get_reranker") as mock_get_reranker,
70+
patch(
71+
"vectorcode.subcommands.query.get_embedding_function",
72+
return_value=mock_embedding_function,
73+
),
74+
):
6975
mock_reranker_instance = MagicMock()
7076
mock_reranker_instance.rerank = AsyncMock(
7177
return_value=[
@@ -82,9 +88,7 @@ async def test_get_query_result_files(mock_collection, mock_config):
8288
# Check that query was called with the right parameters
8389
mock_collection.query.assert_called_once()
8490
args, kwargs = mock_collection.query.call_args
85-
assert kwargs["query_texts"] == [
86-
"test query"
87-
] # Assuming chunking produces this
91+
mock_embedding_function.assert_called_once_with(["test query"])
8892
assert kwargs["n_results"] == 6 # n_result(3) * query_multiplier(2)
8993
assert IncludeEnum.metadatas in kwargs["include"]
9094
assert IncludeEnum.distances in kwargs["include"]
@@ -285,10 +289,14 @@ async def test_get_query_result_files_chunking(mock_collection, mock_config):
285289
mock_config.query = [
286290
"this is a longer query that should be chunked into multiple parts"
287291
]
288-
292+
mock_embedding_function = MagicMock()
289293
with (
290294
patch("vectorcode.subcommands.query.StringChunker") as MockChunker,
291295
patch("vectorcode.subcommands.query.reranker.NaiveReranker") as MockReranker,
296+
patch(
297+
"vectorcode.subcommands.query.get_embedding_function",
298+
return_value=mock_embedding_function,
299+
),
292300
):
293301
# Set up MockChunker to chunk the query
294302
mock_chunker_instance = MagicMock()
@@ -309,7 +317,7 @@ async def test_get_query_result_files_chunking(mock_collection, mock_config):
309317
# Check query was called with chunked query
310318
mock_collection.query.assert_called_once()
311319
_, kwargs = mock_collection.query.call_args
312-
assert kwargs["query_texts"] == ["chunk1", "chunk2", "chunk3"]
320+
mock_embedding_function.assert_called_once_with(["chunk1", "chunk2", "chunk3"])
313321

314322
# Check the result
315323
assert result == ["file1.py", "file2.py"]
@@ -319,10 +327,14 @@ async def test_get_query_result_files_chunking(mock_collection, mock_config):
319327
async def test_get_query_result_files_multiple_queries(mock_collection, mock_config):
320328
# Set multiple query terms
321329
mock_config.query = ["term1", "term2", "term3"]
322-
330+
mock_embedding_function = MagicMock()
323331
with (
324332
patch("vectorcode.subcommands.query.StringChunker") as MockChunker,
325333
patch("vectorcode.subcommands.query.reranker.NaiveReranker") as MockReranker,
334+
patch(
335+
"vectorcode.subcommands.query.get_embedding_function",
336+
return_value=mock_embedding_function,
337+
),
326338
):
327339
# Set up MockChunker to return the query terms as is
328340
mock_chunker_instance = MagicMock()
@@ -342,7 +354,7 @@ async def test_get_query_result_files_multiple_queries(mock_collection, mock_con
342354
# Check query was called with all query terms
343355
mock_collection.query.assert_called_once()
344356
_, kwargs = mock_collection.query.call_args
345-
assert set(kwargs["query_texts"]) == set(["term1", "term2", "term3"])
357+
mock_embedding_function.assert_called_once_with(["term1", "term2", "term3"])
346358

347359
# Check the result
348360
assert result == ["file1.py", "file2.py"]

tests/subcommands/test_vectorise.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from contextlib import ExitStack
77
from unittest.mock import AsyncMock, MagicMock, mock_open, patch
88

9+
import numpy
910
import pytest
1011
from chromadb.api.models.AsyncCollection import AsyncCollection
1112
from tree_sitter import Point
@@ -511,6 +512,7 @@ def is_file_side_effect(path):
511512
else:
512513
return True
513514

515+
mock_embedding_function = MagicMock(return_value=numpy.random.random((100,)))
514516
with (
515517
patch("os.path.isfile", side_effect=is_file_side_effect),
516518
patch(
@@ -522,6 +524,10 @@ def is_file_side_effect(path):
522524
"vectorcode.subcommands.vectorise.get_collection",
523525
return_value=mock_collection,
524526
),
527+
patch(
528+
"vectorcode.subcommands.vectorise.get_embedding_function",
529+
return_value=mock_embedding_function,
530+
),
525531
patch("vectorcode.subcommands.vectorise.verify_ef", return_value=True),
526532
patch(
527533
"vectorcode.subcommands.vectorise.expand_globs",

tests/test_mcp.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from argparse import ArgumentParser
44
from unittest.mock import AsyncMock, MagicMock, mock_open, patch
55

6+
import numpy
67
import pytest
78
from mcp import McpError
89

@@ -202,6 +203,7 @@ async def test_vectorise_files_success():
202203
f.write("def func(): pass")
203204
mock_client = AsyncMock()
204205

206+
mock_embedding_function = AsyncMock(return_value=numpy.random.random((100,)))
205207
with (
206208
patch("os.path.isdir", return_value=True),
207209
patch("vectorcode.mcp_main.get_project_config") as mock_get_project_config,
@@ -210,6 +212,10 @@ async def test_vectorise_files_success():
210212
"vectorcode.mcp_main.ClientManager._create_client",
211213
return_value=mock_client,
212214
),
215+
patch(
216+
"vectorcode.subcommands.vectorise.get_embedding_function",
217+
return_value=mock_embedding_function,
218+
),
213219
patch("vectorcode.subcommands.vectorise.chunked_add"),
214220
patch(
215221
"vectorcode.subcommands.vectorise.hash_file", return_value="test_hash"

0 commit comments

Comments
 (0)