File size: 2,343 Bytes
1e732dd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
"""
Tests for src/schemas/schemas.py — Pydantic request/response models.
"""

import pytest
from pydantic import ValidationError

from src.schemas.schemas import (
    AskRequest,
    AskResponse,
    HealthResponse,
    NaturalAnalysisRequest,
    SearchRequest,
    StructuredAnalysisRequest,
)


class TestNaturalAnalysisRequest:
    def test_valid(self):
        req = NaturalAnalysisRequest(message="My glucose is 185 and HbA1c 8.2")
        assert req.message == "My glucose is 185 and HbA1c 8.2"

    def test_too_short(self):
        with pytest.raises(ValidationError):
            NaturalAnalysisRequest(message="hi")


class TestStructuredAnalysisRequest:
    def test_valid(self):
        req = StructuredAnalysisRequest(biomarkers={"Glucose": 185.0})
        assert req.biomarkers["Glucose"] == 185.0

    def test_empty_biomarkers(self):
        with pytest.raises(ValidationError):
            StructuredAnalysisRequest(biomarkers={})


class TestAskRequest:
    def test_valid(self):
        req = AskRequest(question="What does high HbA1c mean?")
        assert "HbA1c" in req.question

    def test_too_short(self):
        with pytest.raises(ValidationError):
            AskRequest(question="ab")

    def test_with_biomarkers(self):
        req = AskRequest(
            question="Explain my results",
            biomarkers={"Glucose": 200.0},
            patient_context="52-year-old male",
        )
        assert req.biomarkers is not None


class TestSearchRequest:
    def test_defaults(self):
        req = SearchRequest(query="diabetes guidelines")
        assert req.top_k == 10
        assert req.mode == "hybrid"


class TestAskResponse:
    def test_round_trip(self):
        resp = AskResponse(
            request_id="req_abc",
            question="test?",
            answer="test answer",
            documents_retrieved=5,
            documents_relevant=3,
            processing_time_ms=123.4,
        )
        data = resp.model_dump()
        assert data["status"] == "success"
        assert data["documents_relevant"] == 3


class TestHealthResponse:
    def test_basic(self):
        resp = HealthResponse(
            status="healthy",
            timestamp="2025-01-01T00:00:00Z",
            version="2.0.0",
            uptime_seconds=42.0,
        )
        assert resp.status == "healthy"