"""POST /agents/{agent_id}/infer — inference framework endpoint.""" import pytest from httpx import AsyncClient, ASGITransport from main import app @pytest.mark.anyio async def test_infer_time_of_day_cold_start(): """Fewer than min_history events → cold_start_default for preferred_hour.""" transport = ASGITransport(app=app) async with AsyncClient(transport=transport, base_url="http://test") as client: resp = await client.post("/agents/time-of-day/infer", json={ "user_id": "u1", "feedback_history": [ {"action": "done", "dwell_ms": 60000, "created_at": "2026-05-01T09:00:00+00:00"}, ] * 5, # 5 < min_history=10 }) assert resp.status_code == 200 body = resp.json() assert body["agent_id"] == "time-of-day" assert body["inferred_prefs"]["preferred_hour"] is None @pytest.mark.anyio async def test_infer_time_of_day_enough_history(): """10+ events → preferred_hour is inferred as the mode done-hour.""" events = [{"action": "done", "dwell_ms": 60000, "created_at": "2026-05-01T09:00:00+00:00"}] * 10 transport = ASGITransport(app=app) async with AsyncClient(transport=transport, base_url="http://test") as client: resp = await client.post("/agents/time-of-day/infer", json={"user_id": "u1", "feedback_history": events}) assert resp.status_code == 200 body = resp.json() assert body["inferred_prefs"]["preferred_hour"] == 9 @pytest.mark.anyio async def test_infer_agent_with_no_inferred_params(): """Agents with no inferred_params return an empty dict.""" transport = ASGITransport(app=app) async with AsyncClient(transport=transport, base_url="http://test") as client: resp = await client.post("/agents/overdue-task/infer", json={"user_id": "u1", "feedback_history": []}) assert resp.status_code == 200 assert resp.json()["inferred_prefs"] == {} @pytest.mark.anyio async def test_infer_unknown_agent_404(): transport = ASGITransport(app=app) async with AsyncClient(transport=transport, base_url="http://test") as client: resp = await client.post("/agents/ghost/infer", json={"user_id": "u1", "feedback_history": []}) assert resp.status_code == 404