Files
veye-lalwa/tests/test_dates_fr.py
T

82 lines
2.7 KiB
Python
Raw Normal View History

"""Lecture des dates françaises du corpus."""
from __future__ import annotations
from datetime import date
import pytest
from pipeline.parseurs.dates_fr import lire_date, lire_echeance, sans_accents, toutes_les_dates
@pytest.mark.parametrize(
("fragment", "attendu"),
[
# Formes réelles de la colonne « Promulgation / JO » du tableau A.
("23 avr. 2026 (JO 24 avr.)", date(2026, 4, 23)),
("29 avr. 2026 (JO 30 avr.)", date(2026, 4, 29)),
("9 mai 2026 (JO 10 mai)", date(2026, 5, 9)),
("12 juin 2026 (JO 13 juin)", date(2026, 6, 12)),
("30 juin 2026 (JO 1er juill.)", date(2026, 6, 30)),
("13 juill. 2026 (JO 14 juill.)", date(2026, 7, 13)),
("1er juill. 2026", date(2026, 7, 1)),
# Formes numériques du fichier de validation de phase 5.
("24.07.2026", date(2026, 7, 24)),
("22/07/2026", date(2026, 7, 22)),
("2026-07-25", date(2026, 7, 25)),
],
)
def test_lire_date_formes_du_corpus(fragment: str, attendu: date) -> None:
assert lire_date(fragment) == attendu
def test_lire_date_sans_annee_utilise_le_defaut() -> None:
assert lire_date("6 juill.", annee_defaut=2026) == date(2026, 7, 6)
assert lire_date("6 juill.") is None
def test_lire_date_ignore_les_fragments_sans_jour() -> None:
assert lire_date("Fin août 2026") is None
assert lire_date("Automne 2026") is None
def test_toutes_les_dates_conserve_l_ordre() -> None:
assert toutes_les_dates("23 avr. 2026 (JO 24 avr.)", annee_defaut=2026) == [
date(2026, 4, 23),
date(2026, 4, 24),
]
@pytest.mark.parametrize(
("fragment", "attendu"),
[
("~24 août 2026", date(2026, 8, 24)),
("Début août 2026", date(2026, 8, 5)),
("Fin août 2026", date(2026, 8, 25)),
("Oct. 2026 ; adoption visée fin 2026", date(2026, 10, 15)),
("Automne 2026", date(2026, 10, 1)),
("Rentrée 2026", date(2026, 9, 1)),
],
)
def test_lire_echeance_situe_les_previsions(fragment: str, attendu: date) -> None:
approchee, libelle = lire_echeance(fragment)
assert approchee == attendu
# Le libellé d'origine est toujours conservé : c'est lui qui est affiché.
assert libelle == fragment
@pytest.mark.parametrize(
"fragment",
["Indéterminée", "Sans échéance", "Sans date fixée", "Session ordinaire 2026-2027"],
)
def test_lire_echeance_refuse_d_inventer(fragment: str) -> None:
approchee, libelle = lire_echeance(fragment)
assert approchee is None
assert libelle == fragment
def test_sans_accents() -> None:
assert sans_accents("août") == "aout"
assert sans_accents("Échéance probable") == "Echeance probable"
assert sans_accents("chlordécone") == "chlordecone"