""" 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