Files
pdf_oralia_vibe/tests/conftest.py
Bertrand Benjamin 420a856e41 feat: normalise les numéros de lot sur 2 chiffres
Les PDF et les saisies manuelles écrivent le même lot de plusieurs façons
("6", "06", "0006"), et chaque forme créait jusqu'ici un lot distinct en
base. utils/lots.py fixe la forme canonique sur 2 chiffres et sert de point
d'entrée unique pour la normalisation.

Elle est appliquée à la source dans les parseurs (locataires texte et
tableau, codes lot des opérations), et en dernier recours dans
get_or_create_lot et save_document, pour couvrir les extractions éditées à
la main via l'API. Les numéros à plus de 2 chiffres significatifs ne sont
pas tronqués.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 11:46:33 +02:00

80 lines
2.4 KiB
Python

"""Fixtures partagées pour les tests."""
import pytest
from plesna_gerance.database import connection
@pytest.fixture
def db_session(tmp_path, monkeypatch):
"""Session SQLAlchemy sur une base SQLite temporaire et isolée.
Configure aussi PLESNA_DB_PATH / PLESNA_STORAGE_PATH pour que les helpers
qui lisent l'environnement (sql_executor, storage) ciblent le temp dir.
"""
db_path = tmp_path / "test.sqlite"
monkeypatch.setenv("PLESNA_DB_PATH", str(db_path))
monkeypatch.setenv("PLESNA_STORAGE_PATH", str(tmp_path / "documents"))
connection.reset_connection()
connection.init_db(db_path)
SessionLocal = connection.get_session_factory()
session = SessionLocal()
try:
yield session
finally:
session.close()
connection.reset_connection()
@pytest.fixture
def sample_data():
"""Données extraites minimales mais complètes pour save_document."""
return {
"metadata": {
"document": {
"reference": "REF001",
"date": "2024-01-15",
"type": "COMPTE RENDU DE GESTION",
},
"immeuble": {
"code": "IMM1",
"adresse": "4 RUE SERVIENT",
"ville": "LYON",
"code_postal": "69003",
},
"editeur": {"nom": "ORALIA", "siret": "12345678901234"},
"solde": {
"montant": 100.0,
"type": "crediteur",
"date_arrete": "2024-01-15",
},
},
"situation_locataires": [
{
"lot": {"numero": "01", "type": "Appartement"},
"locataire": {"nom": "DUPONT"},
"lignes": [
{
"type": "loyer",
"periode": {"debut": "2024-01-01", "fin": "2024-01-31"},
"loyers": 500.0,
"total": 500.0,
"regles": 500.0,
"impayes": 0.0,
}
],
}
],
"recapitulatif_operations": [
{
"categorie": "DEPENSES_LOCATIVES",
"sous_categorie": "Nettoyage",
"fournisseur": "ACME",
"description": "Nettoyage immeuble",
"montants": {"debit": 50.0},
}
],
}