From 6d363877fd67f3f60bb3af5a002533841e1e55ed 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_models.py | 147 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 tests/test_models.py diff --git a/tests/test_models.py b/tests/test_models.py new file mode 100644 index 0000000..31f2898 --- /dev/null +++ b/tests/test_models.py @@ -0,0 +1,147 @@ +import pytest +from datetime import datetime +from src.models.data_structures import ( + Author, + Commit, + FileChange, + CommitAnalysis, + CodeChurnAnalysis, + RiskyCommitAnalysis, + VelocityAnalysis, +) + + +class TestAuthor: + """Test Author dataclass.""" + + def test_author_creation(self): + """Test creating an Author.""" + author = Author( + name="John Doe", + email="john@example.com", + commit_count=100, + lines_added=5000, + lines_deleted=1000, + ) + assert author.name == "John Doe" + assert author.email == "john@example.com" + assert author.commit_count == 100 + + +class TestCommit: + """Test Commit dataclass.""" + + def test_commit_creation(self): + """Test creating a Commit.""" + commit = Commit( + sha="abc123", + message="Test commit", + author="John Doe", + author_email="john@example.com", + timestamp=datetime.now(), + ) + assert commit.sha == "abc123" + assert commit.message == "Test commit" + assert commit.lines_added == 0 + assert commit.lines_deleted == 0 + + def test_commit_with_changes(self): + """Test creating a Commit with changes.""" + commit = Commit( + sha="abc123", + message="Test commit", + author="John Doe", + author_email="john@example.com", + timestamp=datetime.now(), + lines_added=100, + lines_deleted=50, + files_changed=["src/main.py", "tests/test.py"], + is_merge=False, + is_revert=False, + ) + assert len(commit.files_changed) == 2 + assert commit.lines_added == 100 + + +class TestFileChange: + """Test FileChange dataclass.""" + + def test_file_change_creation(self): + """Test creating a FileChange.""" + change = FileChange( + filepath="src/main.py", + lines_added=50, + lines_deleted=10, + change_type="M", + ) + assert change.filepath == "src/main.py" + assert change.lines_added == 50 + + +class TestCommitAnalysis: + """Test CommitAnalysis dataclass.""" + + def test_commit_analysis_creation(self): + """Test creating a CommitAnalysis.""" + analysis = CommitAnalysis( + total_commits=100, + unique_authors=5, + commits_by_hour={"10:00": 10, "14:00": 15}, + commits_by_day={"Monday": 20, "Tuesday": 15}, + commits_by_week={"2024-W01": 50}, + top_authors=[], + average_commits_per_day=3.3, + ) + assert analysis.total_commits == 100 + assert analysis.unique_authors == 5 + + +class TestCodeChurnAnalysis: + """Test CodeChurnAnalysis dataclass.""" + + def test_code_churn_analysis_creation(self): + """Test creating a CodeChurnAnalysis.""" + analysis = CodeChurnAnalysis( + total_lines_added=5000, + total_lines_deleted=1000, + net_change=4000, + churn_by_file={}, + churn_by_author={}, + high_churn_commits=[], + average_churn_per_commit=50.0, + ) + assert analysis.total_lines_added == 5000 + assert analysis.net_change == 4000 + + +class TestRiskyCommitAnalysis: + """Test RiskyCommitAnalysis dataclass.""" + + def test_risky_commit_analysis_creation(self): + """Test creating a RiskyCommitAnalysis.""" + analysis = RiskyCommitAnalysis( + total_risky_commits=10, + large_change_commits=[], + merge_commits=[], + revert_commits=[], + risk_score=5.5, + ) + assert analysis.total_risky_commits == 10 + + +class TestVelocityAnalysis: + """Test VelocityAnalysis dataclass.""" + + def test_velocity_analysis_creation(self): + """Test creating a VelocityAnalysis.""" + analysis = VelocityAnalysis( + commits_per_day=5.0, + commits_per_week=35.0, + commits_per_month=150.0, + velocity_trend="stable", + top_contributors=[], + most_active_day="Monday", + most_active_hour="10:00", + ) + assert analysis.commits_per_day == 5.0 + assert analysis.velocity_trend == "stable"