113 lines
3.3 KiB
Python
113 lines
3.3 KiB
Python
import json
|
|
from datetime import datetime
|
|
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,
|
|
CodeChurnAnalysis,
|
|
RiskyCommitAnalysis,
|
|
VelocityAnalysis,
|
|
)
|
|
|
|
|
|
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
|
|
assert "42" 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
|
|
|
|
def test_format_with_commit_analysis(self):
|
|
"""Test formatting with commit analysis."""
|
|
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 = 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 "100" in result
|