"""Tests for the MCP server initialization."""
import pytest
from unittest.mock import patch, MagicMock
import os
from src.server import create_server
class TestServerCreation:
"""Tests for MCP server creation and configuration."""
def test_create_server_success(self):
"""Test successful server creation."""
with patch.dict(os.environ, {
'GITLAB_URL': 'https://gitlab.example.com',
'GITLAB_TOKEN': 'glpat-test-token',
}):
with patch('src.server.load_dotenv'), \
patch('src.server.GitLabClient') as MockClient, \
patch('src.server.FastMCP') as MockMCP, \
patch('src.server.register_tools'):
mock_client = MagicMock()
MockClient.return_value = mock_client
mock_client.gl.auth.return_value = None
mock_mcp = MagicMock()
MockMCP.return_value = mock_mcp
server = create_server()
assert server is not None
MockClient.assert_called_once_with(
'https://gitlab.example.com', 'glpat-test-token'
)
mock_client.gl.auth.assert_called_once()
def test_create_server_missing_gitlab_url(self):
"""Test server creation fails without GITLAB_URL."""
with patch.dict(os.environ, {
'GITLAB_TOKEN': 'glpat-test-token',
}, clear=True):
with patch('src.server.load_dotenv'):
with pytest.raises(ValueError, match="GITLAB_URL"):
create_server()
def test_create_server_missing_gitlab_token(self):
"""Test server creation fails without GITLAB_TOKEN."""
with patch.dict(os.environ, {
'GITLAB_URL': 'https://gitlab.example.com',
}, clear=True):
with patch('src.server.load_dotenv'):
with pytest.raises(ValueError, match="GITLAB_TOKEN"):
create_server()
def test_create_server_with_debug_enabled(self):
"""Test server creation with debug mode enabled."""
with patch.dict(os.environ, {
'GITLAB_URL': 'https://gitlab.example.com',
'GITLAB_TOKEN': 'glpat-test-token',
'DEBUG': 'true',
}):
with patch('src.server.load_dotenv'), \
patch('src.server.GitLabClient') as MockClient, \
patch('src.server.FastMCP') as MockMCP, \
patch('src.server.register_tools'), \
patch('src.server.logging') as mock_logging:
mock_client = MagicMock()
MockClient.return_value = mock_client
mock_client.gl.auth.return_value = None
mock_mcp = MagicMock()
MockMCP.return_value = mock_mcp
server = create_server()
assert server is not None
def test_create_server_gitlab_auth_failure(self):
"""Test server creation fails when GitLab auth fails."""
from src.gitlab_client import GitLabClientError
with patch.dict(os.environ, {
'GITLAB_URL': 'https://gitlab.example.com',
'GITLAB_TOKEN': 'invalid-token',
}):
with patch('src.server.load_dotenv'), \
patch('src.server.GitLabClient') as MockClient:
mock_client = MagicMock()
MockClient.return_value = mock_client
mock_client.gl.auth.side_effect = GitLabClientError("Invalid token")
with pytest.raises(ValueError, match="Failed to connect"):
create_server()