feat: Introduce bot-descarga service for PDF downloads and remote bot control. Add Docker configuration, environment variables, and a GUI for agent management. Enhance README with bot details and installation instructions.
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user