Ctrl K
ComunidadGuías…

tests/test_connector_catalog_mutation.py

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

Archivo original ↗Preguntar a KiBot
import pytest

from dm.connect.base import Source
from dm.connect import catalog


def test_register_and_unregister_runtime_source(monkeypatch):
    monkeypatch.setattr(catalog, "SOURCES", {})
    source = Source(name="dropzone", source_type="file", params={"dir": "/tmp/drop"})

    registered = catalog.register_source(source)
    fetched = catalog.get_source("dropzone")
    removed = catalog.unregister_source("dropzone")

    assert registered == source and registered is not source
    assert fetched == source and fetched is not source and fetched is not registered
    assert removed == source and removed is not source
    registered.params["dir"] = "/tmp/changed"
    assert source.params["dir"] == "/tmp/drop"
    assert catalog.get_source("dropzone") is None


def test_register_rejects_duplicate_without_explicit_replace(monkeypatch):
    original = Source(name="dropzone", source_type="file")
    replacement = Source(name="dropzone", source_type="file", description="new")
    monkeypatch.setattr(catalog, "SOURCES", {"dropzone": original})
    with pytest.raises(KeyError, match="已存在"):
        catalog.register_source(replacement)

    registered = catalog.register_source(replacement, replace=True)
    assert registered == replacement and registered is not replacement
    assert catalog.SOURCES["dropzone"] == replacement
    assert catalog.SOURCES["dropzone"] is not replacement


def test_register_requires_boolean_replace_flag(monkeypatch):
    source = Source(name="dropzone", source_type="file")
    monkeypatch.setattr(catalog, "SOURCES", {"dropzone": source})
    for replace in (1, 0, "true", None):
        with pytest.raises(TypeError, match="replace"):
            catalog.register_source(source, replace=replace)  # type: ignore[arg-type]
    assert catalog.SOURCES["dropzone"] is source


def test_register_rejects_unknown_connector_type_and_invalid_name(monkeypatch):
    monkeypatch.setattr(catalog, "SOURCES", {})
    with pytest.raises(ValueError, match="不支持"):
        catalog.register_source(Source(name="custom", source_type="unknown"))
    for name in ("", " padded", "padded ", "bad\nname"):
        with pytest.raises(ValueError):
            catalog.register_source(Source(name=name, source_type="file"))


def test_unregister_unknown_source_has_clear_error(monkeypatch):
    monkeypatch.setattr(catalog, "SOURCES", {})
    with pytest.raises(KeyError, match="未知源"):
        catalog.unregister_source("missing")