Skip to content

Commit 805473f

Browse files
niechenclaude
andcommitted
fix: resolve test failures in edit and client commands
- Fix RemoteServerConfig env field access issue in edit command - Update client edit tests to use add_server instead of update_servers - Fix profile test assertions for correct output messages 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
1 parent 988c9a6 commit 805473f

File tree

4 files changed

+36
-25
lines changed

4 files changed

+36
-25
lines changed

src/mcpm/commands/edit.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,6 @@ def _edit_server_non_interactive(
339339
"type": "remote",
340340
"url": server_config.url,
341341
"headers": server_config.headers,
342-
"env": server_config.env,
343342
}
344343
else:
345344
print_error("Unknown server type", f"Server '{server_name}' has unknown type")
@@ -421,7 +420,6 @@ def _edit_server_non_interactive(
421420
name=updated_config["name"],
422421
url=updated_config["url"],
423422
headers=updated_config.get("headers", {}),
424-
env=updated_config.get("env", {}),
425423
profile_tags=server_config.profile_tags,
426424
)
427425

@@ -738,7 +736,6 @@ def _edit_server_non_interactive(
738736
"type": "remote",
739737
"url": server_config.url,
740738
"headers": server_config.headers,
741-
"env": server_config.env,
742739
}
743740
else:
744741
print_error("Unknown server type", f"Server '{server_name}' has unknown type")
@@ -820,7 +817,6 @@ def _edit_server_non_interactive(
820817
name=updated_config["name"],
821818
url=updated_config["url"],
822819
headers=updated_config.get("headers", {}),
823-
env=updated_config.get("env", {}),
824820
profile_tags=server_config.profile_tags,
825821
)
826822

tests/test_client.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,8 @@ def test_client_edit_non_interactive_set_servers(monkeypatch):
470470
mock_client_manager.is_client_installed = Mock(return_value=True)
471471
mock_client_manager.config_path = "/path/to/config.json"
472472
mock_client_manager.get_servers.return_value = {"old-server": Mock()}
473-
mock_client_manager.update_servers.return_value = None
473+
mock_client_manager.add_server.return_value = None
474+
mock_client_manager.remove_server.return_value = None
474475

475476
monkeypatch.setattr("mcpm.commands.client.ClientRegistry.get_client_manager", Mock(return_value=mock_client_manager))
476477
monkeypatch.setattr("mcpm.commands.client.ClientRegistry.get_client_info", Mock(return_value={"name": "Cursor"}))
@@ -495,7 +496,8 @@ def test_client_edit_non_interactive_set_servers(monkeypatch):
495496

496497
assert result.exit_code == 0
497498
assert "Successfully updated" in result.output
498-
mock_client_manager.update_servers.assert_called_once()
499+
# Verify that add_server was called for the new servers
500+
assert mock_client_manager.add_server.call_count == 2
499501

500502

501503
def test_client_edit_non_interactive_add_profile(monkeypatch):
@@ -505,7 +507,7 @@ def test_client_edit_non_interactive_add_profile(monkeypatch):
505507
mock_client_manager.is_client_installed = Mock(return_value=True)
506508
mock_client_manager.config_path = "/path/to/config.json"
507509
mock_client_manager.get_servers.return_value = {}
508-
mock_client_manager.update_servers.return_value = None
510+
mock_client_manager.add_server.return_value = None
509511

510512
monkeypatch.setattr("mcpm.commands.client.ClientRegistry.get_client_manager", Mock(return_value=mock_client_manager))
511513
monkeypatch.setattr("mcpm.commands.client.ClientRegistry.get_client_info", Mock(return_value={"name": "Cursor"}))
@@ -519,7 +521,7 @@ def test_client_edit_non_interactive_add_profile(monkeypatch):
519521
mock_profile_config = Mock()
520522
mock_profile_config.list_profiles.return_value = {"test-profile": [Mock(name="test-server")]}
521523
mock_profile_config.get_profile.return_value = [Mock(name="test-server")]
522-
monkeypatch.setattr("mcpm.commands.client.profile_config_manager", mock_profile_config)
524+
monkeypatch.setattr("mcpm.profile.profile_config.ProfileConfigManager", lambda: mock_profile_config)
523525

524526
# Force non-interactive mode
525527
monkeypatch.setattr("mcpm.commands.client.is_non_interactive", lambda: True)
@@ -532,7 +534,8 @@ def test_client_edit_non_interactive_add_profile(monkeypatch):
532534

533535
assert result.exit_code == 0
534536
assert "Successfully updated" in result.output
535-
mock_client_manager.update_servers.assert_called_once()
537+
# Verify that add_server was called for the profile
538+
assert mock_client_manager.add_server.called
536539

537540

538541
def test_client_edit_non_interactive_server_not_found(monkeypatch):
@@ -571,7 +574,7 @@ def test_client_edit_with_force_flag(monkeypatch):
571574
mock_client_manager.is_client_installed = Mock(return_value=True)
572575
mock_client_manager.config_path = "/path/to/config.json"
573576
mock_client_manager.get_servers.return_value = {}
574-
mock_client_manager.update_servers.return_value = None
577+
mock_client_manager.add_server.return_value = None
575578

576579
monkeypatch.setattr("mcpm.commands.client.ClientRegistry.get_client_manager", Mock(return_value=mock_client_manager))
577580
monkeypatch.setattr("mcpm.commands.client.ClientRegistry.get_client_info", Mock(return_value={"name": "Cursor"}))
@@ -591,7 +594,8 @@ def test_client_edit_with_force_flag(monkeypatch):
591594

592595
assert result.exit_code == 0
593596
assert "Successfully updated" in result.output
594-
mock_client_manager.update_servers.assert_called_once()
597+
# Verify add_server was called for the new server
598+
assert mock_client_manager.add_server.called
595599

596600

597601
def test_client_edit_command_help():

tests/test_edit.py

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,8 @@ def test_edit_stdio_server_non_interactive(monkeypatch):
146146

147147
mock_global_config = Mock()
148148
mock_global_config.get_server.return_value = test_server
149-
mock_global_config.update_server.return_value = None
149+
mock_global_config.remove_server.return_value = None
150+
mock_global_config.add_server.return_value = None
150151
monkeypatch.setattr("mcpm.commands.edit.global_config_manager", mock_global_config)
151152

152153
# Force non-interactive mode
@@ -163,7 +164,8 @@ def test_edit_stdio_server_non_interactive(monkeypatch):
163164

164165
assert result.exit_code == 0
165166
assert "Successfully updated server" in result.output
166-
mock_global_config.update_server.assert_called_once()
167+
mock_global_config.remove_server.assert_called_once_with("test-server")
168+
mock_global_config.add_server.assert_called_once()
167169

168170

169171
def test_edit_remote_server_non_interactive(monkeypatch):
@@ -178,7 +180,8 @@ def test_edit_remote_server_non_interactive(monkeypatch):
178180

179181
mock_global_config = Mock()
180182
mock_global_config.get_server.return_value = test_server
181-
mock_global_config.update_server.return_value = None
183+
mock_global_config.remove_server.return_value = None
184+
mock_global_config.add_server.return_value = None
182185
monkeypatch.setattr("mcpm.commands.edit.global_config_manager", mock_global_config)
183186

184187
# Force non-interactive mode
@@ -194,7 +197,8 @@ def test_edit_remote_server_non_interactive(monkeypatch):
194197

195198
assert result.exit_code == 0
196199
assert "Successfully updated server" in result.output
197-
mock_global_config.update_server.assert_called_once()
200+
mock_global_config.remove_server.assert_called_once_with("api-server")
201+
mock_global_config.add_server.assert_called_once()
198202

199203

200204
def test_edit_server_partial_update_non_interactive(monkeypatch):
@@ -209,7 +213,8 @@ def test_edit_server_partial_update_non_interactive(monkeypatch):
209213

210214
mock_global_config = Mock()
211215
mock_global_config.get_server.return_value = test_server
212-
mock_global_config.update_server.return_value = None
216+
mock_global_config.remove_server.return_value = None
217+
mock_global_config.add_server.return_value = None
213218
monkeypatch.setattr("mcpm.commands.edit.global_config_manager", mock_global_config)
214219

215220
# Force non-interactive mode
@@ -224,7 +229,8 @@ def test_edit_server_partial_update_non_interactive(monkeypatch):
224229

225230
assert result.exit_code == 0
226231
assert "Successfully updated server" in result.output
227-
mock_global_config.update_server.assert_called_once()
232+
mock_global_config.remove_server.assert_called_once_with("test-server")
233+
mock_global_config.add_server.assert_called_once()
228234

229235

230236
def test_edit_server_invalid_env_format(monkeypatch):
@@ -264,7 +270,8 @@ def test_edit_server_with_force_flag(monkeypatch):
264270

265271
mock_global_config = Mock()
266272
mock_global_config.get_server.return_value = test_server
267-
mock_global_config.update_server.return_value = None
273+
mock_global_config.remove_server.return_value = None
274+
mock_global_config.add_server.return_value = None
268275
monkeypatch.setattr("mcpm.commands.edit.global_config_manager", mock_global_config)
269276

270277
runner = CliRunner()
@@ -276,7 +283,8 @@ def test_edit_server_with_force_flag(monkeypatch):
276283

277284
assert result.exit_code == 0
278285
assert "Successfully updated server" in result.output
279-
mock_global_config.update_server.assert_called_once()
286+
mock_global_config.remove_server.assert_called_once_with("test-server")
287+
mock_global_config.add_server.assert_called_once()
280288

281289

282290
def test_shlex_argument_parsing():

tests/test_profile_commands.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@ def test_profile_edit_non_interactive_add_server(monkeypatch):
2424

2525
# Mock GlobalConfigManager
2626
mock_global_config = Mock()
27-
mock_global_config.get_server.return_value = STDIOServerConfig(name="new-server", command="echo new")
27+
mock_global_config.list_servers.return_value = {
28+
"new-server": STDIOServerConfig(name="new-server", command="echo new"),
29+
"another-server": STDIOServerConfig(name="another-server", command="echo another")
30+
}
2831
monkeypatch.setattr("mcpm.commands.profile.edit.global_config_manager", mock_global_config)
2932

3033
# Force non-interactive mode
@@ -37,7 +40,7 @@ def test_profile_edit_non_interactive_add_server(monkeypatch):
3740
])
3841

3942
assert result.exit_code == 0
40-
assert "Successfully updated profile" in result.output
43+
assert "Profile 'test-profile' updated" in result.output
4144
# Should be called for each server being added
4245
assert mock_profile_config.add_server_to_profile.call_count >= 1
4346

@@ -64,7 +67,7 @@ def test_profile_edit_non_interactive_remove_server(monkeypatch):
6467
])
6568

6669
assert result.exit_code == 0
67-
assert "Successfully updated profile" in result.output
70+
assert "Profile 'test-profile' updated" in result.output
6871
mock_profile_config.remove_server.assert_called_with("test-profile", "server1")
6972

7073

@@ -95,7 +98,7 @@ def test_profile_edit_non_interactive_set_servers(monkeypatch):
9598
])
9699

97100
assert result.exit_code == 0
98-
assert "Successfully updated profile" in result.output
101+
assert "Profile 'test-profile' updated" in result.output
99102
# Should clear existing servers then add new ones
100103
mock_profile_config.clear_profile.assert_called_with("test-profile")
101104

@@ -121,7 +124,7 @@ def test_profile_edit_non_interactive_rename(monkeypatch):
121124
])
122125

123126
assert result.exit_code == 0
124-
assert "Successfully updated profile" in result.output
127+
assert "Profile 'test-profile' updated" in result.output
125128
mock_profile_config.rename_profile.assert_called_with("old-profile-name", "new-profile-name")
126129

127130

@@ -194,7 +197,7 @@ def test_profile_edit_with_force_flag(monkeypatch):
194197
])
195198

196199
assert result.exit_code == 0
197-
assert "Successfully updated profile" in result.output
200+
assert "Profile 'test-profile' updated" in result.output
198201

199202

200203
def test_profile_edit_interactive_fallback(monkeypatch):

0 commit comments

Comments
 (0)