Trace les changements de réglages dans le journal utilisateur

Toute modification des paramètres (topic/serveur/jeton ntfy, plages
horaires, régénération du token de présence Tasker) est désormais
enregistrée dans /logs sous un nouveau type "Réglages", avec un onglet
dédié. Chaque entrée résume ce qui a changé (valeurs des plages, plage
des rappels, topic, jeton défini/vide, URLs invalidées), pour aider à
diagnostiquer a posteriori un problème de configuration.

💘 Generated with Crush

Assisted-by: Crush:glm-5.2
This commit is contained in:
Jacquin Antoine
2026-07-20 00:09:40 +02:00
parent 1d8a273ffb
commit 55efac9cdd
4 changed files with 67 additions and 3 deletions

View File

@ -299,3 +299,50 @@ def test_regenerate_preserves_other_notif_fields():
assert after["ntfy_topic"] == "topic-x"
assert after["ntfy_server"] == "https://ntfy.arkel.fr"
assert after["ntfy_token"] == "tk_xyz"
# ── Changements de paramètres tracés dans le journal ─────────────────────────
def test_settings_save_logged():
"""Sauvegarder les réglages ntfy doit écrire une entrée de journal."""
models.save_notif_config("alice", ntfy_topic="t", ntfy_server="https://ntfy.sh")
before = len([l for l in models.load_logs("alice") if l["type"] == "settings"])
client.post("/settings", cookies=COOKIES, data={
"ntfy_topic": "topic-new",
"ntfy_server": "https://ntfy.arkel.fr",
"ntfy_token": "tk_abc",
"rappel_debut_h": "8",
"rappel_fin_h": "19",
})
after = [l for l in models.load_logs("alice") if l["type"] == "settings"]
assert len(after) == before + 1
latest = after[0]
assert latest["event"] == "Réglages ntfy"
assert "topic-new" in latest["message"]
assert "ntfy.arkel.fr" in latest["message"]
def test_settings_plages_save_logged():
"""Sauvegarder les plages horaires doit écrire une entrée de journal."""
before = len([l for l in models.load_logs("alice") if l["type"] == "settings"])
client.post("/settings/plages", cookies=COOKIES, data={
"matin_debut": "09:00", "matin_fin": "12:00",
"aprem_debut": "14:00", "aprem_fin": "17:00",
"pause_dejeuner_fin": "13:30",
"arrivee_visee": "", "depart_vise": "",
})
after = [l for l in models.load_logs("alice") if l["type"] == "settings"]
assert len(after) == before + 1
latest = after[0]
assert latest["event"] == "Plages horaires"
assert "09:00" in latest["message"]
def test_regenerate_presence_token_logged():
"""Régénérer le token de présence doit écrire une entrée de journal."""
before = len([l for l in models.load_logs("alice") if l["type"] == "settings"])
client.post("/settings/regenerate-presence-token", cookies=COOKIES)
after = [l for l in models.load_logs("alice") if l["type"] == "settings"]
assert len(after) == before + 1
latest = after[0]
assert "régénéré" in latest["event"].lower()