from __future__ import annotations from bot_descarga.config.settings import Settings from bot_descarga.core.download_service import DownloadService from bot_descarga.models.resultado import RunSummary def test_friendly_dns_error_message(): svc = DownloadService(ruta_excel="x.xlsx", carpeta_descarga=".", event_callback=lambda e: None) msg = svc._friendly_browser_error( Exception("unknown error: net::ERR_NAME_NOT_RESOLVED\n (Session info: chrome=1)") ) assert "ERR_NAME_NOT_RESOLVED" in msg assert "Imaging" in msg assert svc.settings.url_sistema in msg def test_browser_start_failure_sets_fatal_error(monkeypatch): events = [] def fake_read(_self, _path): from bot_descarga.models.radicado import RadicadoRecord return [RadicadoRecord("1", "NIT1")] class BoomBrowser: def start(self, *a, **k): raise Exception("unknown error: net::ERR_NAME_NOT_RESOLVED") def close(self): pass monkeypatch.setattr( "bot_descarga.core.download_service.ExcelReader.read", fake_read, ) monkeypatch.setattr( "bot_descarga.core.download_service.BrowserManager", lambda settings=None: BoomBrowser(), ) monkeypatch.setattr( "bot_descarga.core.download_service.JsonlLogger", lambda *a, **k: type( "L", (), {"path": "x", "write": lambda *x: None, "close": lambda *x: None}, )(), ) svc = DownloadService( ruta_excel="dummy.xlsx", carpeta_descarga=".", settings=Settings(url_sistema="http://serviciosimaging:8180/"), event_callback=lambda e: events.append(e), ) summary = svc.run() assert isinstance(summary, RunSummary) assert summary.fatal_error assert "ERR_NAME_NOT_RESOLVED" in summary.fatal_error assert any("FALLIDO" in e.message or "ERR_NAME_NOT_RESOLVED" in e.message for e in events)