from src.core.review_engine import Issue, IssueCategory, IssueSeverity, ReviewResult, ReviewSummary class TestIssue: def test_issue_creation(self): issue = Issue( file="test.py", line=10, severity=IssueSeverity.WARNING, category=IssueCategory.STYLE, message="Missing docstring", suggestion="Add a docstring" ) assert issue.file == "test.py" assert issue.line == 10 # noqa: PLR2004 assert issue.severity == IssueSeverity.WARNING def test_issue_to_dict(self): issue = Issue( file="test.py", line=10, severity=IssueSeverity.CRITICAL, category=IssueCategory.BUG, message="Potential bug" ) data = issue.to_dict() assert data["file"] == "test.py" assert data["severity"] == "critical" assert data["category"] == "bug" class TestReviewResult: def test_review_result_no_issues(self): result = ReviewResult() assert result.has_issues() is False assert result.has_critical_issues() is False def test_review_result_with_issues(self): result = ReviewResult() result.issues = [ Issue( file="test.py", line=1, severity=IssueSeverity.CRITICAL, category=IssueCategory.SECURITY, message="SQL injection" ) ] assert result.has_issues() is True assert result.has_critical_issues() is True def test_get_issues_by_severity(self): result = ReviewResult() result.issues = [ Issue(file="a.py", line=1, severity=IssueSeverity.CRITICAL, category=IssueCategory.BUG, message="Bug1"), Issue(file="b.py", line=2, severity=IssueSeverity.WARNING, category=IssueCategory.STYLE, message="Style1"), Issue(file="c.py", line=3, severity=IssueSeverity.INFO, category=IssueCategory.DOCUMENTATION, message="Doc1"), ] critical = result.get_issues_by_severity(IssueSeverity.CRITICAL) assert len(critical) == 1 assert critical[0].file == "a.py" class TestReviewSummary: def test_review_summary_aggregation(self): summary = ReviewSummary() summary.files_reviewed = 5 summary.lines_changed = 100 summary.critical_count = 2 summary.warning_count = 5 summary.info_count = 10 summary.overall_assessment = "Good" data = summary.to_dict() assert data["files_reviewed"] == 5 # noqa: PLR2004 assert data["critical_count"] == 2 # noqa: PLR2004