Astreinte : supprimer une intervention l'enregistre immédiatement

Le bouton × retirait la ligne de l'écran sans déclencher la sauvegarde :
au rechargement, l'intervention supprimée réapparaissait. La suppression
enregistre maintenant le jour dès le clic (asDelEvent → asSaveDay).

💘 Generated with Crush

Assisted-by: Crush:glm-5.2
This commit is contained in:
Jacquin Antoine
2026-09-10 17:05:00 +02:00
parent e95d1e2092
commit f50d1ef7fc
2 changed files with 65 additions and 4 deletions

View File

@ -81,3 +81,48 @@ def test_ligne_entierement_vide_non_conservee():
"astreinte_desc": ["", ""]}, follow_redirects=False)
# La ligne vide n'est pas stockée, la ligne complète l'est
assert _events(uid, "2026-07-14") == [{"debut": "22:00", "fin": "23:00", "desc": None}]
def test_suppression_dune_ligne_persiste():
"""Le bouton × retire la ligne du DOM puis enregistre le jour : le POST ne
contient plus que les lignes restantes, la supprimée doit disparaître."""
uid = "u-as-del"
cookies = _login(uid)
models.toggle_astreinte("2026-07-14", uid)
client.post("/pointage/2026-07-14", cookies=cookies,
data={"astreinte_debut": ["22:00", "23:00"], "astreinte_fin": ["22:30", "23:30"],
"astreinte_desc": ["", ""]}, follow_redirects=False)
assert len(_events(uid, "2026-07-14") or []) == 2
# La 1re ligne est supprimée : seule la 2e reste dans le POST
r = client.post("/pointage/2026-07-14", cookies=cookies,
data={"astreinte_debut": ["23:00"], "astreinte_fin": ["23:30"],
"astreinte_desc": [""]}, follow_redirects=False)
assert r.status_code == 200, r.text
assert _events(uid, "2026-07-14") == [{"debut": "23:00", "fin": "23:30", "desc": None}]
# Suppression de la dernière ligne : plus aucun champ astreinte dans le POST
r = client.post("/pointage/2026-07-14", cookies=cookies,
data={"astreinte_debut": [], "astreinte_fin": [],
"astreinte_desc": []}, follow_redirects=False)
assert r.status_code == 200, r.text
assert _events(uid, "2026-07-14") == []
def test_bouton_suppression_câble_lenregistrement():
"""Le × doit déclencher la sauvegarde du jour (asDelEvent), sans quoi la
ligne ne disparaît que visuellement et revient au rechargement."""
uid = "u-as-del-html"
cookies = _login(uid)
models.toggle_astreinte("2026-07-14", uid)
client.post("/pointage/2026-07-14", cookies=cookies,
data={"astreinte_debut": ["22:00"], "astreinte_fin": ["22:30"],
"astreinte_desc": [""]}, follow_redirects=False)
r = client.get("/semaine/2026/29", cookies=cookies, follow_redirects=False)
assert r.status_code == 200, r.text
# Le bouton rendu appelle asDelEvent, défini (avec asSaveDay) dans la page
assert 'onclick="asDelEvent(this)"' in r.text
assert "window.asDelEvent" in r.text
assert "window.asSaveDay" in r.text