From 7b376bd081292bed1a1a30a11aae509ee0c2b0a6 Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Fri, 30 Jan 2026 20:35:32 +0000 Subject: [PATCH] Initial upload: git-insights-cli with CI/CD workflow --- tests/test_formatters.py | 112 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 tests/test_formatters.py diff --git a/tests/test_formatters.py b/tests/test_formatters.py new file mode 100644 index 0000000..fe9f911 --- /dev/null +++ b/tests/test_formatters.py @@ -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 "" 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