Add test fixtures and unit tests for CLI, models, and formatters
This commit is contained in:
@@ -1,24 +1,33 @@
|
|||||||
import pytest
|
import json
|
||||||
from datetime import datetime
|
from src.formatters.json_formatter import JSONFormatter
|
||||||
from unittest.mock import MagicMock
|
from src.formatters.markdown_formatter import MarkdownFormatter
|
||||||
|
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 dictionary data."""
|
"""Test formatting a dictionary."""
|
||||||
from src.formatters import JSONFormatter
|
|
||||||
data = {"key": "value", "number": 42}
|
data = {"key": "value", "number": 42}
|
||||||
result = JSONFormatter.format(data)
|
result = JSONFormatter.format(data)
|
||||||
assert '"key": "value"' in result
|
assert "value" in result
|
||||||
assert '"number": 42' in result
|
|
||||||
|
|
||||||
def test_format_empty(self):
|
def test_format_analysis(self):
|
||||||
"""Test formatting empty data."""
|
"""Test formatting an analysis object."""
|
||||||
from src.formatters import JSONFormatter
|
analysis = CommitAnalysis(
|
||||||
result = JSONFormatter.format({})
|
total_commits=100,
|
||||||
assert result == "{}"
|
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:
|
class TestMarkdownFormatter:
|
||||||
@@ -26,29 +35,26 @@ class TestMarkdownFormatter:
|
|||||||
|
|
||||||
def test_format_basic(self):
|
def test_format_basic(self):
|
||||||
"""Test basic Markdown formatting."""
|
"""Test basic Markdown formatting."""
|
||||||
from src.formatters import MarkdownFormatter
|
class MockData:
|
||||||
result = MarkdownFormatter.format(MagicMock())
|
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
|
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()
|
class TestHTMLFormatter:
|
||||||
mock_analysis.commit_analysis = CommitAnalysis(
|
"""Test HTML formatter."""
|
||||||
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
|
|
||||||
|
|
||||||
result = MarkdownFormatter.format(mock_analysis)
|
def test_format_basic(self):
|
||||||
assert "Total Commits" in result
|
"""Test basic HTML formatting."""
|
||||||
assert "100" in result
|
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