IT-Stock/tests/test_planification.py

56 lines
2 KiB
Python
Raw Normal View History

"""
Tests de la planification de l'email récapitulatif, modifiable depuis
/destinataires : lecture/écriture de l'expression cron en base, et
validation (APScheduler a sa propre convention de jour de la semaine, donc
la validation doit accepter les noms de jours comme "mon" sans ambiguïté).
"""
from app.scheduler import EXPRESSION_PAR_DEFAUT, obtenir_expression_cron, valider_expression_cron
def test_expression_par_defaut_est_tous_les_lundis(session):
assert obtenir_expression_cron(session) == EXPRESSION_PAR_DEFAUT == "0 9 * * mon"
def test_valider_expression_cron_accepte_les_noms_de_jours():
assert valider_expression_cron("0 9 * * mon") is True
assert valider_expression_cron("0 8 * * mon-fri") is True
assert valider_expression_cron("0 */6 * * *") is True
def test_valider_expression_cron_rejette_une_expression_invalide():
assert valider_expression_cron("pas une expression cron") is False
assert valider_expression_cron("0 25 * * *") is False # heure hors plage
def test_modifier_planification_avec_une_expression_valide(client, session):
reponse = client.post(
"/destinataires/planification",
data={"expression_cron": "0 8 * * *"},
follow_redirects=False,
)
assert reponse.status_code == 303
assert obtenir_expression_cron(session) == "0 8 * * *"
def test_modifier_planification_avec_une_expression_invalide_ne_sauvegarde_pas(client, session):
expression_avant = obtenir_expression_cron(session)
reponse = client.post(
"/destinataires/planification",
data={"expression_cron": "n'importe quoi"},
)
assert reponse.status_code == 200
assert "invalide" in reponse.text.lower()
assert obtenir_expression_cron(session) == expression_avant
def test_page_destinataires_affiche_les_exemples_cron(client, session):
reponse = client.get("/destinataires")
assert reponse.status_code == 200
assert "Tous les lundis à 9h" in reponse.text
assert "0 9 * * mon" in reponse.text