Les lots n'étaient connus que par l'extraction PDF : un numéro, un type souvent vide, et rien sur le bien lui-même. Cette table de caractéristiques (surface, étage, bâtiment, chauffage, DPE, rapprochement impôts) donne au référentiel une source de vérité indépendante des comptes rendus. Table séparée de `lots` à dessein : une ré-extraction ne peut alors pas écraser la saisie, et le désaccord sur le type de lot reste visible au lieu d'être arbitré en silence. La fiche gagne, le PDF comble les trous. Échéance du DPE et écart de surface ne sont pas stockés mais calculés : une colonne dérivée finirait par mentir après une correction. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
58 lines
1.8 KiB
Python
58 lines
1.8 KiB
Python
"""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("", "")
|