File size: 2,276 Bytes
4b445f6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
"""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)