CoolFace
Apppublic

BytecodeApps/docverse-api

sourceHugging Faceapache-2.0updated 7mo agoView on Hugging Face
0likes
test_risk_engine.py95 linesDownload Raw Back to tests
1import pytest2from app.services.risk_engine import RiskEngine, SeverityLevels3 4@pytest.fixture5def risk_engine():6    # Initialize with mock patient history if needed later7    return RiskEngine(patient_history={})8 9def test_hemoglobin_critical_low(risk_engine):10    """ Test that Hemoglobin < 7 triggers an EMERGENCY flag. """11    results = risk_engine.evaluate_lab_results([12        {'test': 'hemoglobin', 'value': 6.5, 'unit': 'g/dL'}13    ])14    15    assert len(results) == 116    assert results[0]["severity"] == SeverityLevels.EMERGENCY17    assert "critically low" in results[0]["description"].lower()18 19def test_hemoglobin_high_risk(risk_engine):20    """ Test that Hemoglobin between 7 and 12 triggers a HIGH risk flag. """21    risk_engine.flags = [] # Reset state22    results = risk_engine.evaluate_lab_results([23        {'test': 'hemoglobin', 'value': 10.5, 'unit': 'g/dL'}24    ])25    26    assert len(results) == 127    assert results[0]["severity"] == SeverityLevels.HIGH28    assert "below normal range" in results[0]["description"].lower()29 30def test_ldl_high_risk(risk_engine):31    """ Test that LDL > 160 triggers a HIGH flag. """32    risk_engine.flags = []33    results = risk_engine.evaluate_lab_results([34        {'test': 'ldl cholesterol', 'value': 165, 'unit': 'mg/dL'}35    ])36    37    assert len(results) == 138    assert results[0]["severity"] == SeverityLevels.HIGH39    assert "significantly elevated" in results[0]["description"].lower()40 41def test_potassium_emergencies(risk_engine):42    """ Test Potassium limits for EMERGENCY flags. (>6.0 or <3.0) """43    risk_engine.flags = []44    45    # Test High Potassium46    results_high = risk_engine.evaluate_lab_results([47        {'test': 'potassium', 'value': 6.8, 'unit': 'mEq/L'}48    ])49    assert len(results_high) == 150    assert results_high[0]["severity"] == SeverityLevels.EMERGENCY51    assert "critically high" in results_high[0]["description"].lower()52    53    risk_engine.flags = []54    55    # Test Low Potassium56    results_low = risk_engine.evaluate_lab_results([57        {'test': 'potassium', 'value': 2.8, 'unit': 'mEq/L'}58    ])59    assert len(results_low) == 160    assert results_low[0]["severity"] == SeverityLevels.EMERGENCY61    assert "critically low" in results_low[0]["description"].lower()62 63def test_medication_duplicates(risk_engine):64    """ Test that duplicate medications are flagged. """65    risk_engine.flags = []66    results = risk_engine.evaluate_medications([67        {'drug': 'Lisinopril', 'class': 'ACE Inhibitor'},68        {'drug': 'lisinopril', 'class': 'ACE Inhibitor'} # Lowercase duplicate69    ])70    71    assert len(results) == 172    assert results[0]["severity"] == SeverityLevels.MEDIUM73    assert "duplicate" in results[0]["description"].lower()74 75def test_severe_drug_interactions(risk_engine):76    """ Test specific hardcoded severe interactions (e.g. Sildenafil + Nitrates). """77    risk_engine.flags = []78    results = risk_engine.evaluate_medications([79        {'drug': 'Sildenafil', 'class': 'PDE5 Inhibitor'},80        {'drug': 'Isosorbide', 'class': 'Nitrate'}81    ])82    83    assert len(results) == 184    assert results[0]["severity"] == SeverityLevels.EMERGENCY85    assert "severe drug interaction" in results[0]["description"].lower()86 87def test_advisory_disclaimer_presence():88    """ Ensure the Risk Engine always appends the medical disclaimer to actions. """89    engine = RiskEngine({})90    results = engine.evaluate_lab_results([91        {'test': 'potassium', 'value': 6.8, 'unit': 'mEq/L'}92    ])93    94    assert "does not constitute medical advice" in results[0]["disclaimer"].lower()95