#!/usr/bin/env python3 """Integration tests for the GitLab CLI MCP server.""" from unittest.mock import AsyncMock, MagicMock, patch from mcp_server_gitlab_glab.server import create_server, main class TestIntegration: """Integration tests for the GitLab CLI MCP server.""" @patch("mcp_server_gitlab_glab.server.FastMCP") def test_create_server(self, mock_fastmcp: MagicMock) -> None: """Test server creation with default parameters.""" # Mock FastMCP instance mock_server = MagicMock() mock_fastmcp.return_value = mock_server # Call create_server create_server() # Verify FastMCP was created with correct parameters mock_fastmcp.assert_called_once_with("GitLab CLI", host="127.0.0.1", port=8080) # Verify tools were registered assert mock_server.tool.call_count == 2 @patch("mcp_server_gitlab_glab.server.FastMCP") def test_create_server_custom_params(self, mock_fastmcp: MagicMock) -> None: """Test server creation with custom parameters.""" # Mock FastMCP instance mock_server = MagicMock() mock_fastmcp.return_value = mock_server # Call create_server with custom parameters create_server(host="0.0.0.0", port=9000) # Verify FastMCP was created with correct parameters mock_fastmcp.assert_called_once_with("GitLab CLI", host="0.0.0.0", port=9000) @patch("mcp_server_gitlab_glab.server.create_server") @patch("mcp_server_gitlab_glab.server.logger") async def test_main_stdio( self, mock_logger: MagicMock, mock_create_server: MagicMock ) -> None: """Test main function with stdio transport.""" # Mock server mock_server = AsyncMock() mock_create_server.return_value = mock_server # Call main with stdio transport await main("stdio", "127.0.0.1", 8080) # Verify server was created with correct parameters mock_create_server.assert_called_once_with(host="127.0.0.1", port=8080) # Verify stdio transport was used mock_server.run_stdio_async.assert_called_once() mock_server.run_sse_async.assert_not_called() # Verify logging assert mock_logger.info.call_count >= 2 @patch("mcp_server_gitlab_glab.server.create_server") @patch("mcp_server_gitlab_glab.server.logger") async def test_main_remote( self, mock_logger: MagicMock, mock_create_server: MagicMock ) -> None: """Test main function with remote transport.""" # Mock server mock_server = AsyncMock() mock_create_server.return_value = mock_server # Call main with remote transport await main("remote", "0.0.0.0", 9000) # Verify server was created with correct parameters mock_create_server.assert_called_once_with(host="0.0.0.0", port=9000) # Verify remote transport was used mock_server.run_stdio_async.assert_not_called() mock_server.run_sse_async.assert_called_once() # Verify logging assert mock_logger.info.call_count >= 2