Ctrl K
ComunidadGuías…

tests/test_morning.py

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

Archivo original ↗Preguntar a KiBot
"""Tests du rapport matinal narratif."""

import httpx
import pytest

from app import morning


def _checks(*pairs):
    return [{"name": n, "status": s} for n, s in pairs]


@pytest.mark.asyncio
async def test_morning_nuit_calme(monkeypatch):
    async def fake_checks():
        return _checks(("vzdump-backup", "up"), ("vektor-api", "up"), ("stream-guard", "up"))

    async def fake_lvm():
        return ["🟢 pve/backup-dumps : 77% — confortable, trim mensuel en place"]

    monkeypatch.setattr(morning, "_hc_checks", fake_checks)
    monkeypatch.setattr(morning, "_lvm_lines", fake_lvm)
    report = await morning.morning_report()
    assert "12" not in report
    assert "3 checks" in report
    assert "Rien à faire" in report
    assert "77%" in report


@pytest.mark.asyncio
async def test_morning_avec_check_down(monkeypatch):
    async def fake_checks():
        return _checks(("vzdump-backup", "down"), ("vektor-api", "up"))

    async def fake_lvm():
        return []

    monkeypatch.setattr(morning, "_hc_checks", fake_checks)
    monkeypatch.setattr(morning, "_lvm_lines", fake_lvm)
    report = await morning.morning_report()
    assert "vzdump-backup" in report
    assert "Commence par" in report


@pytest.mark.asyncio
async def test_morning_sur_seuil_critique(monkeypatch):
    async def fake_checks():
        return _checks(("x", "up"))

    async def fake_lvm():
        return ["🔴 pve/data : 95% — action requise (fstrim, purge, extension)"]

    monkeypatch.setattr(morning, "_hc_checks", fake_checks)
    monkeypatch.setattr(morning, "_lvm_lines", fake_lvm)
    report = await morning.morning_report()
    assert "action requise" in report


def test_extract_textfile_metrics():
    raw = '\n'.join([
        "# HELP x",
        'lvm_thin_data_percent{pool="pve/backup-dumps"} 77.28',
        'lvm_vg_free_bytes{vg="pve"} 0',
    ])
    pools, vg_free = morning._parse_textfile(raw)
    assert pools == {"pve/backup-dumps": 77.28}
    assert vg_free == {"pve": 0.0}


def test_extract_textfile_metrics_garbage():
    pools, vg_free = morning._parse_textfile("n'importe quoi")
    assert pools == {} and vg_free == {}