#!/usr/bin/env python3 """Integration tests for the GitLab CLI MCP server CLI functionality.""" from unittest.mock import MagicMock, patch from mcp_server_gitlab_glab.cli import run_server class TestCliIntegration: """Integration tests for the CLI functionality.""" @patch("mcp_server_gitlab_glab.cli.validate_args") @patch("mcp_server_gitlab_glab.cli.parse_args") @patch("mcp_server_gitlab_glab.cli.setup_logging") @patch("mcp_server_gitlab_glab.cli.asyncio.run") def test_run_server_success( self, mock_asyncio_run: MagicMock, mock_setup_logging: MagicMock, mock_parse_args: MagicMock, mock_validate_args: MagicMock, ) -> None: """Test successful server run.""" # Mock args mock_args = MagicMock() mock_args.transport = "stdio" mock_args.host = "127.0.0.1" mock_args.port = 8080 mock_args.log_level = "INFO" mock_parse_args.return_value = mock_args mock_validate_args.return_value = mock_args # Call run_server run_server() # Verify args were parsed and validated mock_parse_args.assert_called_once() mock_validate_args.assert_called_once_with(mock_args) # Verify logging was set up mock_setup_logging.assert_called_once_with("INFO", "stdio") # Verify server was run mock_asyncio_run.assert_called_once() @patch("mcp_server_gitlab_glab.cli.validate_args") @patch("mcp_server_gitlab_glab.cli.parse_args") @patch("mcp_server_gitlab_glab.cli.setup_logging") @patch("mcp_server_gitlab_glab.cli.asyncio.run") @patch("mcp_server_gitlab_glab.cli.logger") def test_run_server_keyboard_interrupt( self, mock_logger: MagicMock, mock_asyncio_run: MagicMock, mock_setup_logging: MagicMock, mock_parse_args: MagicMock, mock_validate_args: MagicMock, ) -> None: """Test server run with keyboard interrupt.""" # Mock args mock_args = MagicMock() mock_args.transport = "stdio" mock_args.host = "127.0.0.1" mock_args.port = 8080 mock_args.log_level = "INFO" mock_parse_args.return_value = mock_args mock_validate_args.return_value = mock_args # Mock KeyboardInterrupt mock_asyncio_run.side_effect = KeyboardInterrupt() # Call run_server run_server() # Verify args were parsed and validated mock_parse_args.assert_called_once() mock_validate_args.assert_called_once_with(mock_args) # Verify logging was set up mock_setup_logging.assert_called_once_with("INFO", "stdio") # Verify server was run mock_asyncio_run.assert_called_once() # Verify keyboard interrupt was logged mock_logger.info.assert_called_once_with("Server stopped by user") @patch("mcp_server_gitlab_glab.cli.validate_args") @patch("mcp_server_gitlab_glab.cli.parse_args") @patch("mcp_server_gitlab_glab.cli.setup_logging") @patch("mcp_server_gitlab_glab.cli.asyncio.run") @patch("mcp_server_gitlab_glab.cli.logger") @patch("mcp_server_gitlab_glab.cli.sys.exit") def test_run_server_exception( self, mock_sys_exit: MagicMock, mock_logger: MagicMock, mock_asyncio_run: MagicMock, mock_setup_logging: MagicMock, mock_parse_args: MagicMock, mock_validate_args: MagicMock, ) -> None: """Test server run with exception.""" # Mock args mock_args = MagicMock() mock_args.transport = "stdio" mock_args.host = "127.0.0.1" mock_args.port = 8080 mock_args.log_level = "INFO" mock_parse_args.return_value = mock_args mock_validate_args.return_value = mock_args # Mock Exception mock_asyncio_run.side_effect = Exception("Test error") # Call run_server run_server() # Verify args were parsed and validated mock_parse_args.assert_called_once() mock_validate_args.assert_called_once_with(mock_args) # Verify logging was set up mock_setup_logging.assert_called_once_with("INFO", "stdio") # Verify server was run mock_asyncio_run.assert_called_once() # Verify exception was logged mock_logger.error.assert_called_once_with("Error running server: Test error") # Verify sys.exit was called mock_sys_exit.assert_called_once_with(1)