Spaces:
Sleeping
Sleeping
File size: 2,809 Bytes
dd19932 d8e24c3 dd19932 |
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 |
import pytest
from unittest.mock import patch, MagicMock
import requests
from openfda_client import get_top_adverse_events, get_drug_event_pair_frequency, cache
@pytest.fixture(autouse=True)
def clear_cache():
"""Fixture to clear the cache before each test."""
cache.clear()
def mock_response(status_code=200, json_data=None, raise_for_status=None):
"""Helper function to create a mock response object."""
mock_resp = MagicMock()
mock_resp.status_code = status_code
mock_resp.json.return_value = json_data
if raise_for_status:
mock_resp.raise_for_status.side_effect = raise_for_status
return mock_resp
@patch('requests.get')
def test_get_top_adverse_events_success(mock_get):
"""Test successful API call for top adverse events."""
mock_json = {"results": [{"term": "Nausea", "count": 100}]}
mock_get.return_value = mock_response(json_data=mock_json)
result = get_top_adverse_events("testdrug")
assert result == mock_json
mock_get.assert_called_once()
@patch('requests.get')
def test_get_top_adverse_events_404(mock_get):
"""Test 404 Not Found error for top adverse events."""
http_error = requests.exceptions.HTTPError("404 Client Error")
mock_get.return_value = mock_response(status_code=404, raise_for_status=http_error)
result = get_top_adverse_events("nonexistentdrug")
assert "error" in result
assert "No data found" in result["error"]
@patch('requests.get')
def test_get_drug_event_pair_frequency_success(mock_get):
"""Test successful API call for drug-event pair frequency."""
mock_json = {"meta": {"results": {"total": 50}}}
mock_get.return_value = mock_response(json_data=mock_json)
result = get_drug_event_pair_frequency("testdrug", "testevent")
assert result == mock_json
mock_get.assert_called_once()
def test_empty_drug_name_returns_error():
"""Test that empty inputs are handled correctly without calling the API."""
result = get_top_adverse_events("")
assert "error" in result
result2 = get_drug_event_pair_frequency("", "testevent")
assert "error" in result2
@patch('requests.get')
def test_caching_works(mock_get):
"""Test that results are cached to avoid repeated API calls."""
mock_json = {"results": [{"term": "Headache", "count": 200}]}
mock_get.return_value = mock_response(json_data=mock_json)
# First call - should call the API
get_top_adverse_events("cacheddrug")
assert mock_get.call_count == 1
# Second call - should hit the cache
get_top_adverse_events("cacheddrug")
assert mock_get.call_count == 1 # Still 1, not 2
# Call with different params - should trigger a new API call
get_top_adverse_events("cacheddrug", limit=20)
assert mock_get.call_count == 2
|