112 lines
3.5 KiB
Python
112 lines
3.5 KiB
Python
import logging
|
|
|
|
import pytest
|
|
|
|
from kanta.logging import configure_logging, log_change
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def _reset_kanta_loggers():
|
|
yield
|
|
for name in ("kanta", "kanta.transaction", "kanta.bootstrap", "kanta.migration"):
|
|
logger = logging.getLogger(name)
|
|
logger.setLevel(logging.NOTSET)
|
|
logger.propagate = True
|
|
logger.handlers.clear()
|
|
|
|
|
|
def test_configure_logging_defaults():
|
|
kanta_logger = logging.getLogger("kanta")
|
|
configure_logging()
|
|
assert kanta_logger.level == logging.INFO
|
|
assert not kanta_logger.propagate
|
|
assert kanta_logger.handlers
|
|
|
|
|
|
def test_configure_logging_disables_specific_loggers():
|
|
configure_logging(bootstrap=False, migration=False, transaction=False)
|
|
assert not logging.getLogger("kanta.bootstrap").propagate
|
|
assert not logging.getLogger("kanta.migration").propagate
|
|
assert not logging.getLogger("kanta.transaction").propagate
|
|
|
|
|
|
def test_configure_logging_skiproot_false_leaves_kanta_propagation():
|
|
kanta_logger = logging.getLogger("kanta")
|
|
kanta_logger.handlers.clear()
|
|
configure_logging(bootstrap=False, skiproot=False)
|
|
assert kanta_logger.propagate
|
|
assert not kanta_logger.handlers
|
|
assert not logging.getLogger("kanta.bootstrap").propagate
|
|
|
|
|
|
def test_log_change_no_diff(capsys):
|
|
kanta_logger = logging.getLogger("kanta")
|
|
kanta_logger.handlers.clear()
|
|
configure_logging()
|
|
log_change("test", {})
|
|
captured = capsys.readouterr()
|
|
assert "test" in captured.err
|
|
|
|
|
|
def test_log_change_appends_extra_string(capsys):
|
|
kanta_logger = logging.getLogger("kanta")
|
|
kanta_logger.handlers.clear()
|
|
configure_logging()
|
|
log_change("export", {}, extra="mydb.db")
|
|
captured = capsys.readouterr()
|
|
assert "export" in captured.err
|
|
assert "mydb.db" in captured.err
|
|
|
|
|
|
def test_log_change_headerfmt_replaces_header(capsys):
|
|
kanta_logger = logging.getLogger("kanta")
|
|
kanta_logger.handlers.clear()
|
|
configure_logging()
|
|
log_change(
|
|
"update",
|
|
{},
|
|
headerfmt=lambda action, user, extra: f"CUSTOM {action} {extra['id']}",
|
|
extra={"id": 7},
|
|
)
|
|
captured = capsys.readouterr()
|
|
assert "CUSTOM update 7" in captured.err
|
|
|
|
|
|
def test_log_change_headerfmt_none_falls_back(capsys):
|
|
kanta_logger = logging.getLogger("kanta")
|
|
kanta_logger.handlers.clear()
|
|
configure_logging()
|
|
log_change("update", {}, user="alice", headerfmt=lambda *args: None)
|
|
captured = capsys.readouterr()
|
|
assert "update" in captured.err
|
|
assert "alice" in captured.err
|
|
|
|
|
|
def test_log_change_log_diff_false(capsys):
|
|
kanta_logger = logging.getLogger("kanta")
|
|
kanta_logger.handlers.clear()
|
|
configure_logging()
|
|
log_change("update", {"counter": 5}, previous={}, log_diff=False)
|
|
captured = capsys.readouterr()
|
|
assert "update" in captured.err
|
|
assert "counter" not in captured.err
|
|
|
|
|
|
def test_log_change_log_header_false(capsys):
|
|
kanta_logger = logging.getLogger("kanta")
|
|
kanta_logger.handlers.clear()
|
|
configure_logging()
|
|
log_change("update", {"counter": 5}, previous={}, log_header=False)
|
|
captured = capsys.readouterr()
|
|
assert "update" not in captured.err
|
|
assert "counter" in captured.err
|
|
|
|
|
|
def test_log_change_both_disabled_logs_nothing(capsys):
|
|
kanta_logger = logging.getLogger("kanta")
|
|
kanta_logger.handlers.clear()
|
|
configure_logging()
|
|
log_change("update", {"counter": 5}, previous={}, log_header=False, log_diff=False)
|
|
captured = capsys.readouterr()
|
|
assert captured.err == ""
|