"""Tests des valeurs derivees des caracteristiques d'un logement. Echeance de DPE et ecart de surface ne sont pas stockes : ils se recalculent a chaque lecture. Ces tests figent les regles de calcul, seul endroit ou une erreur passerait inapercue puisqu'aucune donnee saisie ne la contredirait. """ from datetime import date from plesna_gerance.utils.logements import ( delta_surface, dpe_echeance, type_en_ecart, ) def test_un_dpe_vaut_dix_ans(): assert dpe_echeance(date(2021, 2, 8)) == date(2031, 2, 8) def test_un_dpe_du_29_fevrier_expire_le_28(): """2020 est bissextile, 2030 non : la date doit reculer, pas exploser.""" assert dpe_echeance(date(2020, 2, 29)) == date(2030, 2, 28) def test_sans_date_de_dpe_pas_d_echeance(): assert dpe_echeance(None) is None def test_ecart_de_surface_positif_quand_les_impots_en_retiennent_plus(): assert delta_surface(100.0, 119.0) == 19.0 def test_ecart_de_surface_negatif_quand_la_mesure_est_plus_grande(): assert delta_surface(148.0, 146.0) == -2.0 def test_une_seule_surface_ne_donne_aucun_ecart(): """Un ecart de 0 affirmerait que les deux sources concordent.""" assert delta_surface(148.0, None) is None assert delta_surface(None, 146.0) is None def test_meme_type_ecrit_autrement_n_est_pas_un_ecart(): assert not type_en_ecart("Loc. Commercial", "Loc, Commercial") assert not type_en_ecart("Appartement T3", "appartement t3") def test_deux_types_differents_sont_un_ecart(): assert type_en_ecart("Appartement T3", "Appartement T2") def test_un_type_absent_n_est_pas_un_ecart(): """Le PDF laisse souvent le type vide : ce n'est pas une contradiction.""" assert not type_en_ecart(None, "Appartement T3") assert not type_en_ecart("Appartement T3", None) assert not type_en_ecart("", "")