import asyncio import httpx from core.sources import ctx def test_resolve_dtxsid_prefers_cas(monkeypatch): async def fake_cas(q, http): return "DTXSID1234567" async def fake_name(q, http): return None async def fake_pc(q, http): return "DTXSID0000000" async def fake_dash(q, http): return None monkeypatch.setattr(ctx, "_resolve_from_cas", fake_cas) monkeypatch.setattr(ctx, "_resolve_from_name", fake_name) monkeypatch.setattr(ctx, "_resolve_dtxsid_via_pubchem", fake_pc) monkeypatch.setattr(ctx, "_resolve_dtxsid_via_dashboard", fake_dash) async def run(): async with httpx.AsyncClient() as client: return await ctx.resolve_dtxsid("50-00-0", client) assert asyncio.run(run()) == "DTXSID1234567" def test_resolve_dtxsid_pubchem_fallback(monkeypatch): async def fake_cas(q, http): return None async def fake_name(q, http): return None async def fake_pc(q, http): return "DTXSID7654321" async def fake_dash(q, http): return None monkeypatch.setattr(ctx, "_resolve_from_cas", fake_cas) monkeypatch.setattr(ctx, "_resolve_from_name", fake_name) monkeypatch.setattr(ctx, "_resolve_dtxsid_via_pubchem", fake_pc) monkeypatch.setattr(ctx, "_resolve_dtxsid_via_dashboard", fake_dash) async def run(): async with httpx.AsyncClient() as client: return await ctx.resolve_dtxsid("formaldehyde", client) assert asyncio.run(run()) == "DTXSID7654321"