ninja-code-guard / tests /unit /test_findings_schema.py
NinjainPJs's picture
initial - commit
4b445f6
"""Tests for Finding and SynthesizedReview schema validation."""
import pytest
from pydantic import ValidationError
from app.models.findings import Finding, SynthesizedReview
class TestFindingSchema:
def test_valid_finding(self, sample_finding_data):
finding = Finding(**sample_finding_data)
assert finding.agent == "security"
assert finding.severity == "critical"
assert finding.confidence == 0.92
def test_finding_rejects_invalid_agent(self, sample_finding_data):
sample_finding_data["agent"] = "invalid_agent"
with pytest.raises(ValidationError):
Finding(**sample_finding_data)
def test_finding_rejects_invalid_severity(self, sample_finding_data):
sample_finding_data["severity"] = "urgent"
with pytest.raises(ValidationError):
Finding(**sample_finding_data)
def test_finding_confidence_bounds(self, sample_finding_data):
sample_finding_data["confidence"] = 1.5
with pytest.raises(ValidationError):
Finding(**sample_finding_data)
sample_finding_data["confidence"] = -0.1
with pytest.raises(ValidationError):
Finding(**sample_finding_data)
def test_finding_optional_cwe_id(self, sample_finding_data):
sample_finding_data["cwe_id"] = None
finding = Finding(**sample_finding_data)
assert finding.cwe_id is None
class TestSynthesizedReviewSchema:
def test_valid_review(self, sample_review_data):
review = SynthesizedReview(**sample_review_data)
assert review.health_score == 65
assert review.recommendation == "block"
assert len(review.findings) == 1
def test_review_health_score_bounds(self, sample_review_data):
sample_review_data["health_score"] = 101
with pytest.raises(ValidationError):
SynthesizedReview(**sample_review_data)
sample_review_data["health_score"] = -1
with pytest.raises(ValidationError):
SynthesizedReview(**sample_review_data)
def test_review_rejects_invalid_recommendation(self, sample_review_data):
sample_review_data["recommendation"] = "maybe"
with pytest.raises(ValidationError):
SynthesizedReview(**sample_review_data)