Files
pointeuse-optimisator/app/tests/test_stats.py
Antoine c2d7d0e3ac Rend les plages horaires et les rappels ntfy configurables, supprime le
classement, ajoute une suite de tests pytest

- calcul.py: matin_debut/fin, aprem_debut/fin et pause_dejeuner_fin sont
  paramétrables via config.json > plages (moteur de calcul de l'heure de
  sortie optimale inclus, pas seulement l'affichage). Défauts identiques
  à l'ancien comportement, validé par la suite de tests.
- stats.py: les seuils de conformité utilisent la même config.
- main.py/templates: warn de saisie et suffixes de cible dynamiques.
- Rappels ntfy: serveur, topic et plage horaire (rappel_debut_h/fin_h)
  configurables par utilisateur depuis /settings, plus en dur dans le code.
- Page classement supprimée (pas de compétition entre utilisateurs).
- Nouvelle suite pytest (app/tests/), à lancer via
  `docker compose run --rm pointeuse pytest -v`.
2026-07-17 22:40:55 +02:00

43 lines
1.6 KiB
Python

from calcul import DEFAULT_PLAGES
from stats import _day_compliant
def _p(matin_entree=None, matin_sortie=None, aprem_entree=None, aprem_sortie=None):
return {
"matin_entree": matin_entree, "matin_sortie": matin_sortie,
"aprem_entree": aprem_entree, "aprem_sortie": aprem_sortie,
}
def test_day_compliant_journee_dans_les_clous():
p = _p("08:50", "12:05", "13:55", "17:10")
assert _day_compliant(p, mc=False, ac=False, plages=DEFAULT_PLAGES) is True
def test_day_compliant_entree_matin_en_retard():
p = _p("09:10", "12:05", "13:55", "17:10")
assert _day_compliant(p, mc=False, ac=False, plages=DEFAULT_PLAGES) is False
def test_day_compliant_sortie_aprem_trop_tot():
p = _p("08:50", "12:05", "13:55", "16:45")
assert _day_compliant(p, mc=False, ac=False, plages=DEFAULT_PLAGES) is False
def test_day_compliant_journee_incomplete_renvoie_none():
p = _p("08:50", "12:05") # pas d'aprem
assert _day_compliant(p, mc=False, ac=False, plages=DEFAULT_PLAGES) is None
def test_day_compliant_conge_journee_entiere_renvoie_none():
p = _p()
assert _day_compliant(p, mc=True, ac=True, plages=DEFAULT_PLAGES) is None
def test_day_compliant_plages_personnalisees():
plages = {**DEFAULT_PLAGES, "matin_debut": "08:00"}
p = _p("08:30", "12:05", "13:55", "17:10")
# 08:30 est après 08:00 (plage custom) -> non conforme, alors qu'avec le défaut (09:00) ça le serait
assert _day_compliant(p, mc=False, ac=False, plages=plages) is False
assert _day_compliant(p, mc=False, ac=False, plages=DEFAULT_PLAGES) is True