Initial upload: git-insights-cli with CI/CD workflow
This commit is contained in:
112
tests/test_formatters.py
Normal file
112
tests/test_formatters.py
Normal file
@@ -0,0 +1,112 @@
|
||||
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
|
||||
Reference in New Issue
Block a user