import sys
from pathlib import Path
import pytest
ROOT = Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path:
sys.path.insert(0, str(ROOT))
from mcp_server.datasets import DatasetLoadError, load_dataset # noqa: E402
from mcp_server.inhibitors import ( # noqa: E402
find_inhibitor_plants,
get_inhibitor_sources,
list_inhibitors,
summarize_inhibitors,
)
def test_summarize_inhibitors_matches_dataset_counts():
summary = summarize_inhibitors()
frame = load_dataset("all_mito_complex_I_inhibitors.txt").frame
frame["known_status"] = frame["known_status"].str.lower()
frame["confidence"] = frame["confidence"].str.lower()
assert summary["total"] == len(frame)
for status, count in summary["by_known_status"].items():
assert count == int((frame["known_status"] == status).sum())
new_frame = frame[frame["known_status"] == "new"]
for confidence, count in summary["new_by_confidence"].items():
assert count == int((new_frame["confidence"] == confidence).sum())
def test_list_inhibitors_filters_by_status_and_confidence():
records = list_inhibitors(known_status="new", confidence="high", limit=5)
assert len(records) <= 5
assert records, "Expected at least one high-confidence new inhibitor"
for record in records:
assert record["known_status"].lower() == "new"
assert record["confidence"].lower() == "high"
def test_list_inhibitors_invalid_status_raises():
with pytest.raises(ValueError):
list_inhibitors(known_status="maybe")
def test_get_inhibitor_sources_returns_pubmed_urls():
details = get_inhibitor_sources("isoflurane")
assert details["compound"].lower() == "isoflurane"
assert details["pubmed_ids"], "Expected PubMed IDs for isoflurane"
assert details["pubmed_urls"]
assert details["pubmed_urls"][0].startswith("https://pubmed.ncbi.nlm.nih.gov/")
def test_get_inhibitor_sources_unknown_compound():
with pytest.raises(ValueError):
get_inhibitor_sources("not_a_real_compound")
def test_find_inhibitor_plants_global_returns_organisms():
result = find_inhibitor_plants("arctigenin", scope="global")
assert result["scope"] == "global"
assert result["match_count"] >= 1
assert "arctium lappa" in result["organisms"]
def test_find_inhibitor_plants_nordic_requires_dataset():
with pytest.raises(DatasetLoadError):
find_inhibitor_plants("arctigenin", scope="nordic")
def test_find_inhibitor_plants_invalid_scope():
with pytest.raises(ValueError):
find_inhibitor_plants("arctigenin", scope="galactic")