Ctrl K
ComunidadGuías…

tests/test_connector_onboard.py

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
"""Connector onboarding failure and readiness reporting."""

from dm.connect.base import ColumnDef, DatasetDef
import dm.connect.onboard as onboard_module


class _Connector:
    def __init__(self, *, ok=True, message="ok", datasets=None, error=None):
        self.ok = ok
        self.message = message
        self.datasets = datasets or []
        self.error = error

    def test_connection(self):
        return self.ok, self.message

    def introspect(self):
        if self.error is not None:
            raise self.error
        return self.datasets


def test_onboard_labels_connection_failures_without_backend_details(monkeypatch):
    connector = _Connector(ok=False, message="connection refused password=secret")
    monkeypatch.setattr(onboard_module, "get_connector", lambda name: connector)

    report = onboard_module.onboard("erp")

    assert report == {
        "source": "erp",
        "ok": False,
        "stage": "connect",
        "error": "connect failed",
    }
    assert "secret" not in repr(report)


def test_onboard_labels_introspection_failures_without_backend_details(monkeypatch):
    connector = _Connector(error=RuntimeError("metadata denied password=secret"))
    monkeypatch.setattr(onboard_module, "get_connector", lambda name: connector)

    report = onboard_module.onboard("erp")

    assert report["source"] == "erp"
    assert report["ok"] is False
    assert report["stage"] == "introspect"
    assert report["error"] == "introspect failed (RuntimeError)"
    assert "secret" not in repr(report)


def test_onboard_reports_dataset_shape(monkeypatch):
    datasets = [
        DatasetDef(
            name="orders",
            columns=[ColumnDef("id", "integer"), ColumnDef("status", "varchar")],
            primary_key=["id"],
        )
    ]
    connector = _Connector(datasets=datasets)
    monkeypatch.setattr(onboard_module, "get_connector", lambda name: connector)
    monkeypatch.setattr(onboard_module, "ONTOLOGY", {})

    report = onboard_module.onboard("erp")

    assert report["ok"] is True
    assert report["n_tables"] == 1
    assert report["datasets"] == [
        {"name": "orders", "columns": 2, "pk": ["id"], "mapped": False}
    ]