@@ -31,38 +31,46 @@ class TestMCPConfigureCommand(unittest.TestCase):
3131 @regression_test
3232 def test_configure_argument_parsing_basic (self ):
3333 """Test basic argument parsing for 'hatch mcp configure' command."""
34- test_args = ['hatch' , 'mcp' , 'configure' , 'claude-desktop' , 'weather-server' , 'python' , 'weather.py' ]
35-
34+ # Updated to match current CLI: server_name is positional, --host is required, --command/--url are mutually exclusive
35+ test_args = ['hatch' , 'mcp' , 'configure' , 'weather-server' , '--host' , 'claude-desktop' , '--command' , 'python' , '--args' , 'weather.py' ]
36+
3637 with patch ('sys.argv' , test_args ):
3738 with patch ('hatch.cli_hatch.HatchEnvironmentManager' ):
3839 with patch ('hatch.cli_hatch.handle_mcp_configure' , return_value = 0 ) as mock_handler :
3940 try :
40- main ()
41+ result = main ()
42+ # If main() returns without SystemExit, check the handler was called
4143 mock_handler .assert_called_once_with (
4244 'claude-desktop' , 'weather-server' , 'python' , ['weather.py' ],
4345 None , None , None , False , False , False
4446 )
4547 except SystemExit as e :
46- self .assertEqual (e .code , 0 )
48+ # If SystemExit is raised, it should be 0 (success) and handler should have been called
49+ if e .code == 0 :
50+ mock_handler .assert_called_once_with (
51+ 'claude-desktop' , 'weather-server' , 'python' , ['weather.py' ],
52+ None , None , None , False , False , False
53+ )
54+ else :
55+ self .fail (f"main() exited with code { e .code } , expected 0" )
4756
4857 @regression_test
4958 def test_configure_argument_parsing_with_options (self ):
5059 """Test argument parsing with environment variables and options."""
5160 test_args = [
52- 'hatch' , 'mcp' , 'configure' , 'cursor' , 'file-server' , 'node' , 'server.js' , 'arg1' , 'arg2' ,
53- '--env' , 'API_KEY=secret' , '--env' , 'DEBUG=true' ,
54- '--url' , 'http://localhost:8080' ,
61+ 'hatch' , 'mcp' , 'configure' , 'file-server' , '--host' , 'cursor' , '--url' , 'http://localhost:8080' ,
62+ '--env-var' , 'API_KEY=secret' , '--env-var' , 'DEBUG=true' ,
5563 '--headers' , 'Authorization=Bearer token' ,
5664 '--no-backup' , '--dry-run' , '--auto-approve'
5765 ]
58-
66+
5967 with patch ('sys.argv' , test_args ):
6068 with patch ('hatch.cli_hatch.HatchEnvironmentManager' ):
6169 with patch ('hatch.cli_hatch.handle_mcp_configure' , return_value = 0 ) as mock_handler :
6270 try :
6371 main ()
6472 mock_handler .assert_called_once_with (
65- 'cursor' , 'file-server' , 'node' , [ 'server.js' , 'arg1' , 'arg2' ] ,
73+ 'cursor' , 'file-server' , None , None ,
6674 ['API_KEY=secret' , 'DEBUG=true' ], 'http://localhost:8080' ,
6775 ['Authorization=Bearer token' ], True , True , True
6876 )
@@ -397,6 +405,9 @@ def test_remove_host_successful(self):
397405 mock_manager_class .return_value = mock_manager
398406
399407 with patch ('hatch.cli_hatch.HatchEnvironmentManager' ) as mock_env_manager :
408+ # Mock the clear_host_from_all_packages_all_envs method
409+ mock_env_manager .return_value .clear_host_from_all_packages_all_envs .return_value = 2
410+
400411 with patch ('builtins.print' ) as mock_print :
401412 result = handle_mcp_remove_host (mock_env_manager .return_value , 'claude-desktop' , auto_approve = True )
402413
0 commit comments