Spaces:
Sleeping
Sleeping
| import pytest | |
| from httpx import Response | |
| import httpx | |
| from npi_mcp_server.tools import search_providers, get_provider_by_npi | |
| from npi_mcp_server.schemas import ProviderSummary, ProviderDetail | |
| # Mock data matching the Modal NPI API contract | |
| MOCK_SEARCH_RESPONSE = { | |
| "results": [ | |
| { | |
| "npi": "1234567890", | |
| "full_name": "John Doe, MD", | |
| "enumeration_type": "INDIVIDUAL", | |
| "primary_taxonomy": "207RC0000X", | |
| "primary_specialty": "Cardiology", | |
| "primary_address": { | |
| "line1": "123 Main St", | |
| "city": "Anytown", | |
| "state": "CA", | |
| "postal_code": "90210", | |
| "country": "US" | |
| } | |
| } | |
| ] | |
| } | |
| MOCK_PROVIDER_DETAIL = { | |
| "npi": "1234567890", | |
| "full_name": "John Doe, MD", | |
| "enumeration_type": "INDIVIDUAL", | |
| "addresses": [ | |
| { | |
| "line1": "123 Main St", | |
| "city": "Anytown", | |
| "state": "CA", | |
| "postal_code": "90210", | |
| "country": "US" | |
| } | |
| ], | |
| "taxonomies": [ | |
| { | |
| "code": "207RC0000X", | |
| "description": "Cardiology", | |
| "primary": True, | |
| "state": "CA", | |
| "license": "12345" | |
| } | |
| ] | |
| } | |
| async def test_search_providers(mocker): | |
| # Mock httpx client post | |
| resp = Response(200, json=MOCK_SEARCH_RESPONSE) | |
| resp._request = httpx.Request("POST", "https://mock/search_providers") | |
| mock_post = mocker.patch("httpx.AsyncClient.post", return_value=resp) | |
| results = await search_providers(query="John Doe") | |
| assert len(results) == 1 | |
| p = results[0] | |
| assert p.npi == "1234567890" | |
| assert p.full_name == "John Doe, MD" | |
| # Check if correct URL and payload were sent | |
| # We can check mock_post.call_args | |
| call_args = mock_post.call_args | |
| assert "search_providers" in call_args[0][0] | |
| assert call_args[1]['json'] == {"query": "John Doe"} | |
| async def test_get_provider_by_npi(mocker): | |
| # Mock httpx client get | |
| resp = Response(200, json=MOCK_PROVIDER_DETAIL) | |
| resp._request = httpx.Request("GET", "https://mock/provider/1234567890") | |
| mock_get = mocker.patch("httpx.AsyncClient.get", return_value=resp) | |
| result = await get_provider_by_npi("1234567890") | |
| assert result is not None | |
| assert result.npi == "1234567890" | |
| assert result.full_name == "John Doe, MD" | |
| assert len(result.taxonomies) == 1 | |
| async def test_get_provider_by_npi_not_found(mocker): | |
| resp = Response(404) | |
| resp._request = httpx.Request("GET", "https://mock/provider/0000000000") | |
| mock_get = mocker.patch("httpx.AsyncClient.get", return_value=resp) | |
| result = await get_provider_by_npi("0000000000") | |
| assert result is None | |