LeadScorer.score() crashea con respuesta vacía de la APIcode-explorer traza la llamada: worker.process_batch()
→ LeadScorer.score(response) → leads[0] sin guardia.{"leads": []} como respuesta válida (sin leads en el
rango geográfico consultado), pero el código asume al menos un elemento.+import pytest +from app.services.lead_scorer import LeadScorer + + +class TestLeadScorerEmptyResponse: + # Regression test para bug #347 + # Garantiza que score() devuelve 0.0 cuando leads=[] + def test_score_returns_zero_on_empty_leads(self): + scorer = LeadScorer() + response = {"leads": []} + result = scorer.score(response) + assert result == 0.0, f"Expected 0.0, got {result}" + + def test_score_returns_zero_on_missing_leads_key(self): + scorer = LeadScorer() + response = {} # sin clave "leads" + result = scorer.score(response) + assert result == 0.0 + + def test_score_happy_path_unchanged(self): + scorer = LeadScorer() + response = {"leads": [{"score": 0.87}, {"score": 0.54}]} + result = scorer.score(response) + assert result == 0.87 # el primer lead, sin regresión
def score(self, response: dict) -> float: leads = response.get("leads", []) - top_lead = leads[0] # IndexError cuando leads=[] - return top_lead.get("score", 0.0) + if not leads: + return 0.0 # respuesta vacía: sin leads, score cero + top_lead = leads[0] + return top_lead.get("score", 0.0)
fix: aplicada