fix: search service crashes on a non-dict result row (#1725)

This commit is contained in:
Afonso Coutinho
2026-06-03 05:30:19 +01:00
committed by GitHub
parent fefac05ab1
commit 0c37943267
2 changed files with 25 additions and 0 deletions

View File

@@ -73,6 +73,8 @@ class SearchService:
results = []
for r in raw_results:
if not isinstance(r, dict):
continue
results.append(SearchResult(
url=r.get("url", ""),
title=r.get("title", ""),

View File

@@ -0,0 +1,23 @@
import asyncio
import services.search.service as svc_mod
from services.search.service import SearchService
def test_search_skips_non_dict_results(monkeypatch):
# comprehensive_web_search aggregates external provider + cache results;
# a malformed row (string/None) made the old loop call r.get and crash,
# losing the whole search.
async def fake_search(query, max_results=10, fetch_content=False):
return [
{"url": "https://a.com", "title": "A", "snippet": "x"},
"junk-row",
None,
{"url": "https://b.com", "title": "B", "snippet": "y"},
]
monkeypatch.setattr(svc_mod, "comprehensive_web_search", fake_search)
svc = SearchService()
res = asyncio.run(svc.search("anything"))
assert [r.url for r in res.results] == ["https://a.com", "https://b.com"]
assert res.total == 2