summaryrefslogtreecommitdiff
path: root/servers/gitlab_glab/tests/test_cli.py
diff options
context:
space:
mode:
authorDawid Rycerz <dawid@rycerz.xyz>2025-03-28 21:39:04 +0100
committerDawid Rycerz <dawid@rycerz.xyz>2025-03-28 21:39:04 +0100
commit903f0d9ca388533ab44615e414379fa5b305a7d1 (patch)
treed4225b3b07e11792d06660b31da97f786b5578e9 /servers/gitlab_glab/tests/test_cli.py
parent1745749cd2745c94c3f852e9c02dfde19d8d9c20 (diff)
Add basic glab mcp server
Diffstat (limited to 'servers/gitlab_glab/tests/test_cli.py')
-rw-r--r--servers/gitlab_glab/tests/test_cli.py159
1 files changed, 159 insertions, 0 deletions
diff --git a/servers/gitlab_glab/tests/test_cli.py b/servers/gitlab_glab/tests/test_cli.py
new file mode 100644
index 0000000..316556c
--- /dev/null
+++ b/servers/gitlab_glab/tests/test_cli.py
@@ -0,0 +1,159 @@
+#!/usr/bin/env python3
+"""Tests for the GitLab CLI MCP server CLI functionality."""
+
+import argparse
+import logging
+from unittest.mock import MagicMock, patch
+
+from mcp_server_gitlab_glab.cli import parse_args, setup_logging, validate_args
+
+
+class TestCli:
+ """Tests for the CLI functionality."""
+
+ def test_parse_args_defaults(self) -> None:
+ """Test parsing command-line arguments with defaults."""
+ # Mock sys.argv
+ with patch("sys.argv", ["mcp-gitlab-glab"]):
+ args = parse_args()
+ assert args.transport == "stdio"
+ assert args.host == "127.0.0.1"
+ assert args.port == 8080
+ assert args.log_level == "INFO"
+
+ def test_parse_args_custom(self) -> None:
+ """Test parsing command-line arguments with custom values."""
+ # Mock sys.argv
+ with patch(
+ "sys.argv",
+ [
+ "mcp-gitlab-glab",
+ "--transport",
+ "remote",
+ "--host",
+ "0.0.0.0",
+ "--port",
+ "9000",
+ "--log-level",
+ "DEBUG",
+ ],
+ ):
+ args = parse_args()
+ assert args.transport == "remote"
+ assert args.host == "0.0.0.0"
+ assert args.port == 9000
+ assert args.log_level == "DEBUG"
+
+ def test_validate_args_low_port_warning(self) -> None:
+ """Test validation warning for low port on Unix-like systems."""
+ # Create args with low port
+ args = argparse.Namespace(transport="remote", port=80, host="0.0.0.0")
+
+ # Mock logger and platform
+ with patch("mcp_server_gitlab_glab.cli.logger") as mock_logger:
+ with patch("sys.platform", "linux"):
+ validate_args(args)
+ mock_logger.warning.assert_called_once()
+
+ def test_validate_args_no_warning_windows(self) -> None:
+ """Test no validation warning for low port on Windows."""
+ # Create args with low port
+ args = argparse.Namespace(transport="remote", port=80, host="0.0.0.0")
+
+ # Mock logger and platform
+ with patch("mcp_server_gitlab_glab.cli.logger") as mock_logger:
+ with patch("sys.platform", "win32"):
+ validate_args(args)
+ mock_logger.warning.assert_not_called()
+
+ def test_validate_args_no_warning_high_port(self) -> None:
+ """Test no validation warning for high port."""
+ # Create args with high port
+ args = argparse.Namespace(transport="remote", port=8080, host="0.0.0.0")
+
+ # Mock logger
+ with patch("mcp_server_gitlab_glab.cli.logger") as mock_logger:
+ validate_args(args)
+ mock_logger.warning.assert_not_called()
+
+ def test_setup_logging_stdio(self) -> None:
+ """Test logging setup for stdio transport."""
+ # Mock os.makedirs and logging configuration
+ with patch("os.makedirs") as mock_makedirs:
+ with patch("logging.FileHandler") as mock_file_handler:
+ with patch("logging.StreamHandler") as mock_stream_handler:
+ with patch("logging.getLogger") as mock_get_logger:
+ # Mock root logger
+ mock_root_logger = MagicMock()
+ mock_get_logger.return_value = mock_root_logger
+
+ # Mock handlers
+ mock_file_handler_instance = MagicMock()
+ mock_file_handler.return_value = mock_file_handler_instance
+ mock_stream_handler_instance = MagicMock()
+ mock_stream_handler.return_value = mock_stream_handler_instance
+
+ # Call setup_logging
+ setup_logging("INFO", "stdio")
+
+ # Verify logs directory creation
+ mock_makedirs.assert_called_once_with("logs", exist_ok=True)
+
+ # Verify file handler setup
+ mock_file_handler.assert_called_once_with("logs/mcp_server.log")
+ mock_file_handler_instance.setLevel.assert_called_once_with(
+ logging.INFO
+ )
+ mock_file_handler_instance.setFormatter.assert_called_once()
+
+ # Verify stream handler setup for stdio
+ mock_stream_handler_instance.setLevel.assert_called_once_with(
+ logging.WARNING
+ )
+ mock_stream_handler_instance.setFormatter.assert_called_once()
+
+ # Verify root logger setup
+ mock_root_logger.setLevel.assert_called_once_with(logging.INFO)
+ assert mock_root_logger.handlers == []
+ assert mock_root_logger.addHandler.call_count == 2
+
+ def test_setup_logging_remote(self) -> None:
+ """Test logging setup for remote transport."""
+ # Mock os.makedirs and logging configuration
+ with patch("os.makedirs") as mock_makedirs:
+ with patch("logging.FileHandler") as mock_file_handler:
+ with patch("logging.StreamHandler") as mock_stream_handler:
+ with patch("logging.getLogger") as mock_get_logger:
+ # Mock root logger
+ mock_root_logger = MagicMock()
+ mock_get_logger.return_value = mock_root_logger
+
+ # Mock handlers
+ mock_file_handler_instance = MagicMock()
+ mock_file_handler.return_value = mock_file_handler_instance
+ mock_stream_handler_instance = MagicMock()
+ mock_stream_handler.return_value = mock_stream_handler_instance
+
+ # Call setup_logging
+ setup_logging("DEBUG", "remote")
+
+ # Verify logs directory creation
+ mock_makedirs.assert_called_once_with("logs", exist_ok=True)
+
+ # Verify file handler setup
+ mock_file_handler.assert_called_once_with("logs/mcp_server.log")
+ mock_file_handler_instance.setLevel.assert_called_once_with(
+ logging.DEBUG
+ )
+ mock_file_handler_instance.setFormatter.assert_called_once()
+
+ # Verify stream handler setup for remote
+ mock_stream_handler_instance.setLevel.assert_called_once_with(
+ logging.DEBUG
+ )
+ mock_stream_handler_instance.setFormatter.assert_called_once()
+
+ # Verify root logger setup
+ mock_root_logger.setLevel.assert_called_once_with(logging.DEBUG)
+ assert mock_root_logger.handlers == []
+ assert mock_root_logger.addHandler.call_count == 2