Add test fixtures and unit tests for CLI, models, and formatters
This commit is contained in:
@@ -1,24 +1,33 @@
|
||||
import pytest
|
||||
from datetime import datetime
|
||||
from unittest.mock import MagicMock
|
||||
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 dictionary data."""
|
||||
from src.formatters import JSONFormatter
|
||||
"""Test formatting a dictionary."""
|
||||
data = {"key": "value", "number": 42}
|
||||
result = JSONFormatter.format(data)
|
||||
assert '"key": "value"' in result
|
||||
assert '"number": 42' in result
|
||||
assert "value" in result
|
||||
|
||||
def test_format_empty(self):
|
||||
"""Test formatting empty data."""
|
||||
from src.formatters import JSONFormatter
|
||||
result = JSONFormatter.format({})
|
||||
assert 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:
|
||||
@@ -26,29 +35,26 @@ class TestMarkdownFormatter:
|
||||
|
||||
def test_format_basic(self):
|
||||
"""Test basic Markdown formatting."""
|
||||
from src.formatters import MarkdownFormatter
|
||||
result = MarkdownFormatter.format(MagicMock())
|
||||
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_analysis(self):
|
||||
"""Test formatting with analysis data."""
|
||||
from src.formatters import MarkdownFormatter
|
||||
from src.models import CommitAnalysis, Author
|
||||
|
||||
mock_analysis = MagicMock()
|
||||
mock_analysis.commit_analysis = CommitAnalysis(
|
||||
total_commits=100,
|
||||
unique_authors=5,
|
||||
commits_by_hour={},
|
||||
commits_by_day={},
|
||||
commits_by_week={},
|
||||
commits_by_month={},
|
||||
top_authors=[Author("John", "john@test.com", 50, 1000, 500)],
|
||||
average_commits_per_day=3.3,
|
||||
)
|
||||
mock_analysis.velocity_analysis = None
|
||||
mock_analysis.code_churn_analysis = None
|
||||
class TestHTMLFormatter:
|
||||
"""Test HTML formatter."""
|
||||
|
||||
result = MarkdownFormatter.format(mock_analysis)
|
||||
assert "Total Commits" in result
|
||||
assert "100" in result
|
||||
def test_format_basic(self):
|
||||
"""Test basic HTML formatting."""
|
||||
class MockData:
|
||||
commit_analysis = None
|
||||
|
||||
data = MockData()
|
||||
result = HTMLFormatter.format(data)
|
||||
assert "<!DOCTYPE html>" in result
|
||||
assert "Git Insights Report" in result
|
||||
|
||||
Reference in New Issue
Block a user