Skip to main content
Glama
test_cli.py4.31 kB
"""Tests for the CLI module.""" import json from unittest.mock import Mock, patch import pytest from mcp_mr_summarizer.cli import main class TestCLI: """Test cases for the CLI.""" @patch("mcp_mr_summarizer.cli.GitTools") @patch( "sys.argv", ["mcp-mr-summarizer", "summary", "--base", "main", "--current", "feature"], ) def test_main_markdown_output(self, mock_tools_class, capsys): """Test main function with markdown output.""" # Mock the tools mock_tools = Mock() mock_tools_class.return_value = mock_tools # Mock the generate_merge_request_summary method mock_tools.generate_merge_request_summary = Mock( return_value="# Test Title\n\nTest Description" ) main() captured = capsys.readouterr() assert "# Test Title" in captured.out assert "Test Description" in captured.out @patch("mcp_mr_summarizer.cli.GitTools") @patch("sys.argv", ["mcp-mr-summarizer", "summary", "--format", "json"]) def test_main_json_output(self, mock_tools_class, capsys): """Test main function with JSON output.""" # Mock the tools mock_tools = Mock() mock_tools_class.return_value = mock_tools # Mock the generate_merge_request_summary method with JSON output mock_tools.generate_merge_request_summary = Mock( return_value='{"title": "Test Title", "description": "Test Description"}' ) main() captured = capsys.readouterr() # Should be valid JSON result = json.loads(captured.out) assert result["title"] == "Test Title" assert result["description"] == "Test Description" @patch("mcp_mr_summarizer.cli.GitTools") @patch("builtins.open", create=True) @patch("sys.argv", ["mcp-mr-summarizer", "summary", "--output", "test.md"]) def test_main_file_output(self, mock_open, mock_tools_class, capsys): """Test main function with file output.""" # Mock the tools mock_tools = Mock() mock_tools_class.return_value = mock_tools # Mock file operations mock_file = Mock() mock_open.return_value.__enter__.return_value = mock_file # Mock the generate_merge_request_summary method mock_tools.generate_merge_request_summary = Mock( return_value="# Test Title\n\nTest Description" ) main() # Check that file was written mock_file.write.assert_called_once() captured = capsys.readouterr() assert "Output written to test.md" in captured.out @patch("mcp_mr_summarizer.cli.GitTools") @patch("sys.argv", ["mcp-mr-summarizer", "summary"]) def test_main_error_handling(self, mock_tools_class, capsys): """Test main function error handling.""" # Mock the tools to raise an exception mock_tools = Mock() mock_tools_class.return_value = mock_tools mock_tools.generate_merge_request_summary = Mock( side_effect=Exception("Test error") ) with pytest.raises(SystemExit) as exc_info: main() assert exc_info.value.code == 1 captured = capsys.readouterr() assert "Error: Test error" in captured.err @patch("mcp_mr_summarizer.cli.GitTools") @patch( "sys.argv", ["mcp-mr-summarizer", "analyze", "--base", "main", "--current", "feature"], ) def test_analyze_command(self, mock_tools_class, capsys): """Test analyze command.""" # Mock the tools mock_tools = Mock() mock_tools_class.return_value = mock_tools # Mock the analyze_git_commits method mock_tools.analyze_git_commits = Mock( return_value="# Git Commit Analysis\n\n## Summary\n- **Total Commits:** 2" ) main() captured = capsys.readouterr() assert "# Git Commit Analysis" in captured.out assert "Total Commits:** 2" in captured.out @patch("sys.argv", ["mcp-mr-summarizer"]) def test_no_command_shows_help(self, capsys): """Test that no command shows help.""" main() captured = capsys.readouterr() assert "usage:" in captured.out assert "Available commands" in captured.out

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sonicjoy/mcp_merge_request_summarizer'

If you have feedback or need assistance with the MCP directory API, please join our Discord server