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, ) 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" 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}, commits_by_day={"Monday": 20}, 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