test_cleanup.py 1.69 KB
from __future__ import annotations

from apps.web_api.bootstrap.cleanup import register_reload_safe_cleanup_handler


def test_register_reload_safe_cleanup_handler_replaces_previous_handler(monkeypatch):
    previous_handler = lambda: None
    current_handler = lambda: None
    calls: list[tuple[str, object]] = []

    monkeypatch.setattr(
        "apps.web_api.bootstrap.cleanup.atexit.unregister",
        lambda handler: calls.append(("unregister", handler)),
    )
    monkeypatch.setattr(
        "apps.web_api.bootstrap.cleanup.atexit.register",
        lambda handler: calls.append(("register", handler)),
    )

    returned_handler = register_reload_safe_cleanup_handler(current_handler, previous_handler)

    assert returned_handler is current_handler
    assert calls == [
        ("unregister", previous_handler),
        ("register", current_handler),
    ]


def test_register_reload_safe_cleanup_handler_ignores_unregister_failures(monkeypatch):
    previous_handler = lambda: None
    current_handler = lambda: None
    calls: list[tuple[str, object]] = []

    def _failing_unregister(handler):
        calls.append(("unregister", handler))
        raise RuntimeError("already removed")

    monkeypatch.setattr(
        "apps.web_api.bootstrap.cleanup.atexit.unregister",
        _failing_unregister,
    )
    monkeypatch.setattr(
        "apps.web_api.bootstrap.cleanup.atexit.register",
        lambda handler: calls.append(("register", handler)),
    )

    returned_handler = register_reload_safe_cleanup_handler(current_handler, previous_handler)

    assert returned_handler is current_handler
    assert calls == [
        ("unregister", previous_handler),
        ("register", current_handler),
    ]