22
33from click .testing import CliRunner
44
5- from mcpm .clients .client_registry import ClientRegistry
65from mcpm .commands .target_operations .add import add
76from mcpm .core .schema import RemoteServerConfig
87from mcpm .utils .config import ConfigManager
1110
1211def test_add_server (windsurf_manager , monkeypatch ):
1312 """Test add server"""
14- monkeypatch .setattr (ClientRegistry , "get_active_client_manager" , Mock (return_value = windsurf_manager ))
15- monkeypatch .setattr (ClientRegistry , "get_client_manager" , Mock (return_value = windsurf_manager ))
16- monkeypatch .setattr (ClientRegistry , "get_active_target" , Mock (return_value = "@windsurf" ))
1713 monkeypatch .setattr (
1814 RepositoryManager ,
1915 "_fetch_servers" ,
@@ -53,9 +49,6 @@ def test_add_server(windsurf_manager, monkeypatch):
5349
5450def test_add_server_with_missing_arg (windsurf_manager , monkeypatch ):
5551 """Test add server with a missing argument that should be replaced with empty string"""
56- monkeypatch .setattr (ClientRegistry , "get_active_client_manager" , Mock (return_value = windsurf_manager ))
57- monkeypatch .setattr (ClientRegistry , "get_client_manager" , Mock (return_value = windsurf_manager ))
58- monkeypatch .setattr (ClientRegistry , "get_active_target" , Mock (return_value = "@windsurf" ))
5952 monkeypatch .setattr (
6053 RepositoryManager ,
6154 "_fetch_servers" ,
@@ -117,10 +110,6 @@ def test_add_server_with_missing_arg(windsurf_manager, monkeypatch):
117110
118111def test_add_server_with_empty_args (windsurf_manager , monkeypatch ):
119112 """Test add server with missing arguments that should be replaced with empty strings"""
120- monkeypatch .setattr (ClientRegistry , "get_active_client" , Mock (return_value = "windsurf" ))
121- monkeypatch .setattr (ClientRegistry , "get_active_client_manager" , Mock (return_value = windsurf_manager ))
122- monkeypatch .setattr (ClientRegistry , "get_client_manager" , Mock (return_value = windsurf_manager ))
123- monkeypatch .setattr (ClientRegistry , "get_active_target" , Mock (return_value = "@windsurf" ))
124113 monkeypatch .setattr (
125114 RepositoryManager ,
126115 "_fetch_servers" ,
@@ -211,11 +200,6 @@ def test_add_sse_server_to_claude_desktop(claude_desktop_manager, monkeypatch):
211200
212201def test_add_profile_to_client (windsurf_manager , monkeypatch ):
213202 profile_name = "work"
214- client_name = "windsurf"
215-
216- monkeypatch .setattr (ClientRegistry , "get_active_target" , Mock (return_value = "@" + client_name ))
217- monkeypatch .setattr (ClientRegistry , "get_client_manager" , Mock (return_value = windsurf_manager ))
218- monkeypatch .setattr (ClientRegistry , "get_active_client_manager" , Mock (return_value = windsurf_manager ))
219203 monkeypatch .setattr (ConfigManager , "get_router_config" , Mock (return_value = {"host" : "localhost" , "port" : 8080 }))
220204
221205 # test cli
@@ -226,3 +210,45 @@ def test_add_profile_to_client(windsurf_manager, monkeypatch):
226210
227211 profile_server = windsurf_manager .get_server ("work" )
228212 assert profile_server is not None
213+
214+
215+ def test_add_server_with_configured_npx (windsurf_manager , monkeypatch ):
216+ monkeypatch .setattr (ConfigManager , "get_config" , Mock (return_value = {"node_executable" : "bunx" }))
217+ monkeypatch .setattr (
218+ RepositoryManager ,
219+ "_fetch_servers" ,
220+ Mock (
221+ return_value = {
222+ "server-test" : {
223+ "installations" : {
224+ "npm" : {
225+ "type" : "npm" ,
226+ "command" : "npx" ,
227+ "args" : ["-y" , "@modelcontextprotocol/server-test" , "--fmt" , "${fmt}" ],
228+ "env" : {"API_KEY" : "${API_KEY}" },
229+ }
230+ },
231+ "arguments" : {
232+ "fmt" : {"type" : "string" , "description" : "Output format" , "required" : True },
233+ "API_KEY" : {"type" : "string" , "description" : "API key" , "required" : True },
234+ },
235+ }
236+ }
237+ ),
238+ )
239+
240+ # Mock Rich's progress display to prevent 'Only one live display may be active at once' error
241+ with patch ("rich.progress.Progress.__enter__" , return_value = Mock ()), \
242+ patch ("rich.progress.Progress.__exit__" ), \
243+ patch ("prompt_toolkit.PromptSession.prompt" , side_effect = ["json" , "test-api-key" ]):
244+ runner = CliRunner ()
245+ result = runner .invoke (add , ["server-test" , "--force" , "--alias" , "test" ])
246+ assert result .exit_code == 0
247+
248+ # Check that the server was added with alias
249+ server = windsurf_manager .get_server ("test" )
250+ assert server is not None
251+ # Should use configured node executable
252+ assert server .command == "bunx"
253+ assert server .args == ["-y" , "@modelcontextprotocol/server-test" , "--fmt" , "json" ]
254+ assert server .env ["API_KEY" ] == "test-api-key"
0 commit comments