Ctrl K
ComunidadGuías…

backend/tests/test_disk_warning.py

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

Archivo original ↗Preguntar a KiBot
"""The disk warning in Settings → System takes effect (#61 A17)."""

from types import SimpleNamespace
from unittest.mock import patch

import pytest

from services import disk_warning


@pytest.fixture(autouse=True)
def _fresh_state():
    disk_warning._reported.clear()
    yield
    disk_warning._reported.clear()


def _settings(**kw):
    base = dict(
        disk_warning_threshold_percent=90,
        disk_warning_notify=True,
        config_dir="/config",
        media_path="/media",
    )
    return SimpleNamespace(**{**base, **kw})


def _usage(values):
    return patch("services.disk_safety.get_disk_usage_pct", side_effect=lambda p: values[p])


def test_a_full_folder_is_reported_once_a_day_and_notified():
    with _usage({"/config": 40.0, "/media": 95.0}), patch("notifier.send_notification") as notify:
        first = disk_warning.check_disk_warning(_settings())
        second = disk_warning.check_disk_warning(_settings())

    assert [r["path"] for r in first] == ["/media"]
    assert second == []
    notify.assert_called_once()
    assert notify.call_args.args[2] == "error"


def test_dropping_below_the_threshold_rearms_the_warning():
    s = _settings()
    with patch("notifier.send_notification"):
        with _usage({"/config": 10.0, "/media": 95.0}):
            disk_warning.check_disk_warning(s)
        with _usage({"/config": 10.0, "/media": 50.0}):
            disk_warning.check_disk_warning(s)
        with _usage({"/config": 10.0, "/media": 96.0}):
            again = disk_warning.check_disk_warning(s)

    assert [r["path"] for r in again] == ["/media"]


def test_notify_off_still_logs_but_sends_nothing():
    with _usage({"/config": 99.0, "/media": 10.0}), patch("notifier.send_notification") as notify:
        reports = disk_warning.check_disk_warning(_settings(disk_warning_notify=False))

    assert [r["path"] for r in reports] == ["/config"]
    notify.assert_not_called()


def test_the_job_is_registered():
    from services.scheduler import _build_default_jobs

    assert "disk_warning_check" in {spec.id for spec in _build_default_jobs()}


@pytest.mark.parametrize("threshold", [0, -5, 10**400, 101])
def test_an_impossible_threshold_means_off(threshold):
    with _usage({"/config": 99.0, "/media": 99.0}), patch("notifier.send_notification") as notify:
        assert (
            disk_warning.check_disk_warning(_settings(disk_warning_threshold_percent=threshold))
            == []
        )
    notify.assert_not_called()