import json from src.formatters.json_formatter import JSONFormatter from src.formatters.markdown_formatter import MarkdownFormatter from src.formatters.html_formatter import HTMLFormatter from src.models.data_structures import CommitAnalysis class TestJSONFormatter: """Test JSON formatter.""" def test_format_dict(self): """Test formatting a dictionary.""" data = {"key": "value", "number": 42} result = JSONFormatter.format(data) assert "value" in result def test_format_analysis(self): """Test formatting an analysis object.""" analysis = CommitAnalysis( total_commits=100, unique_authors=5, commits_by_hour={}, commits_by_day={}, commits_by_week={}, top_authors=[], average_commits_per_day=3.3, ) result = JSONFormatter.format(analysis) parsed = json.loads(result) assert parsed["total_commits"] == 100 class TestMarkdownFormatter: """Test Markdown formatter.""" def test_format_basic(self): """Test basic Markdown formatting.""" class MockData: commit_analysis = None velocity_analysis = None code_churn_analysis = None risky_commit_analysis = None data = MockData() result = MarkdownFormatter.format(data) assert "# Git Insights Report" in result class TestHTMLFormatter: """Test HTML formatter.""" def test_format_basic(self): """Test basic HTML formatting.""" class MockData: commit_analysis = None data = MockData() result = HTMLFormatter.format(data) assert "" in result assert "Git Insights Report" in result