Add test suite and configuration
Some checks failed
CI / test (push) Has been cancelled

This commit is contained in:
2026-02-01 07:59:10 +00:00
parent 59e20896bc
commit 80adeb45a7

View File

@@ -1,34 +1,24 @@
import json import pytest
from src.formatters.json_formatter import JSONFormatter from datetime import datetime
from src.formatters.markdown_formatter import MarkdownFormatter from unittest.mock import MagicMock
from src.formatters.html_formatter import HTMLFormatter
from src.models.data_structures import CommitAnalysis
class TestJSONFormatter: class TestJSONFormatter:
"""Test JSON formatter.""" """Test JSON formatter."""
def test_format_dict(self): def test_format_dict(self):
"""Test formatting a dictionary.""" """Test formatting dictionary data."""
from src.formatters import JSONFormatter
data = {"key": "value", "number": 42} data = {"key": "value", "number": 42}
result = JSONFormatter.format(data) result = JSONFormatter.format(data)
assert "value" in result assert '"key": "value"' in result
assert "42" in result assert '"number": 42' in result
def test_format_analysis(self): def test_format_empty(self):
"""Test formatting an analysis object.""" """Test formatting empty data."""
analysis = CommitAnalysis( from src.formatters import JSONFormatter
total_commits=100, result = JSONFormatter.format({})
unique_authors=5, assert result == "{}"
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: class TestMarkdownFormatter:
@@ -36,71 +26,29 @@ class TestMarkdownFormatter:
def test_format_basic(self): def test_format_basic(self):
"""Test basic Markdown formatting.""" """Test basic Markdown formatting."""
class MockData: from src.formatters import MarkdownFormatter
commit_analysis = None result = MarkdownFormatter.format(MagicMock())
velocity_analysis = None
code_churn_analysis = None
risky_commit_analysis = None
data = MockData()
result = MarkdownFormatter.format(data)
assert "# Git Insights Report" in result assert "# Git Insights Report" in result
def test_format_with_commit_analysis(self): def test_format_with_analysis(self):
"""Test formatting with commit analysis.""" """Test formatting with analysis data."""
class MockData: from src.formatters import MarkdownFormatter
commit_analysis = CommitAnalysis( from src.models import CommitAnalysis, Author
mock_analysis = MagicMock()
mock_analysis.commit_analysis = CommitAnalysis(
total_commits=100, total_commits=100,
unique_authors=5, unique_authors=5,
commits_by_hour={}, commits_by_hour={},
commits_by_day={}, commits_by_day={},
commits_by_week={}, commits_by_week={},
top_authors=[], commits_by_month={},
top_authors=[Author("John", "john@test.com", 50, 1000, 500)],
average_commits_per_day=3.3, average_commits_per_day=3.3,
) )
velocity_analysis = None mock_analysis.velocity_analysis = None
code_churn_analysis = None mock_analysis.code_churn_analysis = None
risky_commit_analysis = None
data = MockData() result = MarkdownFormatter.format(mock_analysis)
result = MarkdownFormatter.format(data)
assert "Total Commits" in result
assert "100" in result
class TestHTMLFormatter:
"""Test HTML formatter."""
def test_format_basic(self):
"""Test basic HTML formatting."""
class MockData:
commit_analysis = None
velocity_analysis = None
code_churn_analysis = None
risky_commit_analysis = None
data = MockData()
result = HTMLFormatter.format(data)
assert "<!DOCTYPE html>" in result
assert "Git Insights Report" in result
def test_format_with_data(self):
"""Test formatting with data."""
class MockData:
commit_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,
)
velocity_analysis = None
code_churn_analysis = None
risky_commit_analysis = None
data = MockData()
result = HTMLFormatter.format(data)
assert "Total Commits" in result assert "Total Commits" in result
assert "100" in result assert "100" in result