diff --git a/stock-lab/app/screener/router.py b/stock-lab/app/screener/router.py index b968c15..dc7cb67 100644 --- a/stock-lab/app/screener/router.py +++ b/stock-lab/app/screener/router.py @@ -309,6 +309,7 @@ async def post_refresh_news_sentiment(asof: Optional[str] = None): top_pos=summary["top_pos"], top_neg=summary["top_neg"], tokens_input=summary["tokens_input"], tokens_output=summary["tokens_output"], + mapping=summary.get("mapping"), ) return summary diff --git a/stock-lab/tests/test_ai_news_router.py b/stock-lab/tests/test_ai_news_router.py index 9a37beb..b4c28eb 100644 --- a/stock-lab/tests/test_ai_news_router.py +++ b/stock-lab/tests/test_ai_news_router.py @@ -20,17 +20,17 @@ def test_refresh_news_sentiment_weekday_invokes_pipeline(): "asof": "2026-05-13", "updated": 3, "failures": [], "duration_sec": 1.0, "tokens_input": 100, "tokens_output": 20, "top_pos": [], "top_neg": [], "model": "m", + "mapping": {"total_articles": 5, "matched_pairs": 8, "hit_tickers": 3}, } with patch("app.screener.router._ai_pipeline") as mp, \ patch("app.screener.router._ai_telegram") as mt: mp.refresh_daily = AsyncMock(return_value=fake_summary) - mt.build_message = lambda **kw: "BUILT_TEXT" + mt.build_message = lambda **kw: f"TEXT_with_mapping={kw.get('mapping')}" client = TestClient(app) resp = client.post( "/api/stock/screener/snapshot/refresh-news-sentiment?asof=2026-05-13" ) assert resp.status_code == 200 body = resp.json() - assert body["asof"] == "2026-05-13" - assert body["updated"] == 3 - assert body["telegram_text"] == "BUILT_TEXT" + assert body["mapping"]["hit_tickers"] == 3 + assert "mapping=" in body["telegram_text"]