Skip to content

Commit d897463

Browse files
committed
tests(cli): fix broken tests
1 parent aa56235 commit d897463

File tree

1 file changed

+39
-42
lines changed

1 file changed

+39
-42
lines changed

tests/test_mcp.py

Lines changed: 39 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import os
22
import tempfile
33
from argparse import ArgumentParser
4-
from contextlib import asynccontextmanager
54
from unittest.mock import AsyncMock, MagicMock, mock_open, patch
65

76
import pytest
@@ -22,12 +21,12 @@
2221
async def test_list_collections_success():
2322
with (
2423
patch("vectorcode.mcp_main.get_collections") as mock_get_collections,
25-
patch("vectorcode.common.ClientManager") as MockClientManager,
24+
patch("vectorcode.common.try_server", return_value=True),
2625
):
26+
from vectorcode.mcp_main import ClientManager
27+
2728
mock_client = AsyncMock()
28-
MockClientManager.return_value._create_client = AsyncMock(
29-
return_value=mock_client
30-
)
29+
ClientManager._create_client = AsyncMock(return_value=mock_client)
3130

3231
mock_collection1 = AsyncMock()
3332
mock_collection1.metadata = {"path": "path1"}
@@ -48,12 +47,13 @@ async def async_generator():
4847
async def test_list_collections_no_metadata():
4948
with (
5049
patch("vectorcode.mcp_main.get_collections") as mock_get_collections,
51-
patch("vectorcode.common.ClientManager") as MockClientManager,
50+
patch("vectorcode.common.try_server", return_value=True),
5251
):
52+
from vectorcode.mcp_main import ClientManager
53+
5354
mock_client = AsyncMock()
54-
MockClientManager.return_value._create_client = asynccontextmanager(
55-
AsyncMock(return_value=mock_client)
56-
)
55+
ClientManager._create_client = AsyncMock(return_value=mock_client)
56+
5757
mock_collection1 = AsyncMock()
5858
mock_collection1.metadata = {"path": "path1"}
5959
mock_collection2 = AsyncMock()
@@ -93,19 +93,19 @@ async def test_query_tool_success():
9393
patch(
9494
"vectorcode.subcommands.query.get_query_result_files"
9595
) as mock_get_query_result_files,
96+
patch("vectorcode.common.try_server", return_value=True),
9697
patch("builtins.open", create=True) as mock_open,
9798
patch("os.path.isfile", return_value=True),
9899
patch("os.path.relpath", return_value="rel/path.py"),
99100
patch("vectorcode.cli_utils.load_config_file") as mock_load_config_file,
100-
patch("vectorcode.common.ClientManager") as MockClientManager,
101101
):
102+
from vectorcode.mcp_main import ClientManager
103+
102104
mock_config = Config(chunk_size=100, overlap_ratio=0.1, reranker=None)
103105
mock_load_config_file.return_value = mock_config
104106
mock_get_project_config.return_value = mock_config
105107
mock_client = AsyncMock()
106-
MockClientManager.return_value._create_client = AsyncMock(
107-
return_value=mock_client
108-
)
108+
ClientManager._create_client = AsyncMock(return_value=mock_client)
109109

110110
# Mock the collection's query method to return a valid QueryResult
111111
mock_collection = AsyncMock()
@@ -139,13 +139,13 @@ async def test_query_tool_collection_access_failure():
139139
patch("os.path.isdir", return_value=True),
140140
patch("vectorcode.mcp_main.get_project_config"),
141141
patch("vectorcode.mcp_main.get_collection"), # Still mock get_collection
142-
patch("vectorcode.common.ClientManager") as MockClientManager,
143142
):
143+
from vectorcode.mcp_main import ClientManager
144144

145145
async def failing_get_client(*args, **kwargs):
146146
raise Exception("Failed to connect")
147147

148-
MockClientManager.return_value._create_client.side_effect = failing_get_client
148+
ClientManager._create_client = AsyncMock(side_effect=failing_get_client)
149149

150150
with pytest.raises(McpError) as exc_info:
151151
await query_tool(
@@ -169,7 +169,8 @@ async def test_query_tool_no_collection():
169169
) as mock_get_collection, # Still mock get_collection
170170
patch("vectorcode.common.ClientManager") as MockClientManager,
171171
):
172-
MockClientManager.return_value._create_client.return_value = AsyncMock()
172+
mock_client = AsyncMock()
173+
MockClientManager.return_value._create_client.return_value = mock_client
173174
mock_get_collection.return_value = None
174175

175176
with pytest.raises(McpError) as exc_info:
@@ -201,23 +202,23 @@ async def test_vectorise_files_success():
201202
f.write("def func(): pass")
202203

203204
with (
204-
patch("vectorcode.common.ClientManager") as MockClientManager,
205205
patch("os.path.isdir", return_value=True),
206206
patch("vectorcode.mcp_main.get_project_config") as mock_get_project_config,
207207
patch("vectorcode.mcp_main.get_collection") as mock_get_collection,
208208
patch("vectorcode.subcommands.vectorise.chunked_add"),
209209
patch(
210210
"vectorcode.subcommands.vectorise.hash_file", return_value="test_hash"
211211
),
212+
patch("vectorcode.common.try_server", return_value=True),
212213
):
214+
from vectorcode.mcp_main import ClientManager
215+
213216
mock_config = Config(project_root=temp_dir)
214217
mock_get_project_config.return_value = mock_config
215218
mock_client = AsyncMock()
216219

217220
# Ensure ClientManager's internal client creation method returns our mock.
218-
MockClientManager.return_value._create_client = AsyncMock(
219-
return_value=mock_client
220-
)
221+
ClientManager._create_client = AsyncMock(return_value=mock_client)
221222

222223
mock_collection = AsyncMock()
223224
mock_collection.get.return_value = {"ids": [], "metadatas": []}
@@ -233,21 +234,16 @@ async def test_vectorise_files_success():
233234

234235

235236
@pytest.mark.asyncio
236-
async def test_vectorise_files_collection_access_failure(): # Removed client_manager fixture
237+
async def test_vectorise_files_collection_access_failure():
237238
with (
238239
patch("os.path.isdir", return_value=True),
239240
patch("vectorcode.mcp_main.get_project_config"),
240-
# patch("vectorcode.mcp_main.get_client", side_effect=Exception("Client error")), # Removed explicit patch
241-
patch(
242-
"vectorcode.common.ClientManager"
243-
) as MockClientManager, # Patch ClientManager class
241+
patch("vectorcode.common.ClientManager"), # Patch ClientManager class
244242
patch("vectorcode.mcp_main.get_collection"),
245243
):
244+
from vectorcode.mcp_main import ClientManager
246245

247-
async def failing_get_client(*args, **kwargs):
248-
raise Exception("Client error")
249-
250-
MockClientManager.return_value._create_client = failing_get_client
246+
ClientManager._create_client = AsyncMock(side_effect=Exception("Client error"))
251247

252248
with pytest.raises(McpError) as exc_info:
253249
await vectorise_files(paths=["file.py"], project_root="/valid/path")
@@ -296,14 +292,14 @@ def mock_open_side_effect(filename, *args, **kwargs):
296292
"os.path.isfile",
297293
side_effect=lambda x: x in [file1, excluded_file, exclude_spec_file],
298294
),
299-
patch("vectorcode.common.ClientManager") as MockClientManager,
295+
patch("vectorcode.common.try_server", return_value=True),
300296
):
297+
from vectorcode.mcp_main import ClientManager
298+
301299
mock_config = Config(project_root=temp_dir)
302300
mock_get_project_config.return_value = mock_config
303301
mock_client = AsyncMock()
304-
MockClientManager.return_value._create_client = AsyncMock(
305-
return_value=mock_client
306-
)
302+
ClientManager._create_client = AsyncMock(return_value=mock_client)
307303

308304
mock_collection = AsyncMock()
309305
mock_collection.get.return_value = {"ids": [], "metadatas": []}
@@ -330,13 +326,15 @@ async def test_mcp_server():
330326
# patch("vectorcode.mcp_main.get_client") as mock_get_client, # Removed
331327
patch("vectorcode.mcp_main.get_collection") as mock_get_collection,
332328
patch("mcp.server.fastmcp.FastMCP.add_tool") as mock_add_tool,
333-
patch("vectorcode.common.ClientManager") as MockClientManager, # Added
329+
patch("vectorcode.common.try_server", return_value=True),
334330
):
331+
from vectorcode.mcp_main import ClientManager
332+
335333
mock_find_project_config_dir.return_value = "/path/to/config"
336334
mock_load_config_file.return_value = Config(project_root="/path/to/project")
337335
mock_client = AsyncMock()
338336

339-
MockClientManager.return_value.get_client = AsyncMock(return_value=mock_client)
337+
ClientManager._create_client = AsyncMock(return_value=mock_client)
340338
mock_collection = AsyncMock()
341339
mock_get_collection.return_value = mock_collection
342340

@@ -347,30 +345,29 @@ async def test_mcp_server():
347345

348346
@pytest.mark.asyncio
349347
async def test_mcp_server_ls_on_start():
348+
mock_collection = AsyncMock()
349+
350350
with (
351351
patch(
352352
"vectorcode.mcp_main.find_project_config_dir"
353353
) as mock_find_project_config_dir,
354354
patch("vectorcode.mcp_main.load_config_file") as mock_load_config_file,
355-
# patch("vectorcode.mcp_main.get_client") as mock_get_client, # Removed
356355
patch("vectorcode.mcp_main.get_collection") as mock_get_collection,
357356
patch(
358357
"vectorcode.mcp_main.get_collections", spec=AsyncMock
359358
) as mock_get_collections,
360359
patch("mcp.server.fastmcp.FastMCP.add_tool") as mock_add_tool,
361-
patch("vectorcode.common.ClientManager") as MockClientManager, # Added
360+
patch("vectorcode.common.try_server", return_value=True),
362361
):
363-
from vectorcode.mcp_main import mcp_config
362+
from vectorcode.mcp_main import ClientManager, mcp_config
364363

365364
mcp_config.ls_on_start = True
366365
mock_find_project_config_dir.return_value = "/path/to/config"
367366
mock_load_config_file.return_value = Config(project_root="/path/to/project")
368367
mock_client = AsyncMock()
369368

370-
MockClientManager.return_value._create_client = AsyncMock(
371-
return_value=mock_client
372-
)
373-
mock_collection = AsyncMock()
369+
ClientManager._create_client = AsyncMock(return_value=mock_client)
370+
374371
mock_collection.metadata = {"path": "/path/to/project"}
375372
mock_get_collection.return_value = mock_collection
376373

0 commit comments

Comments
 (0)