refactor: factorise la création d'engine et normalise solde_montant
- connection: création de l'engine centralisée dans _build_engine (source unique de config) ; init_db réutilise reset_connection + get_engine au lieu de dupliquer create_engine - service: _normalize_amount garantit qu'un montant non numérique issu de l'extraction (string, dict…) n'entre jamais en base dans une colonne Float ; appliqué à solde_montant - tests: couverture de _normalize_amount et du solde sous forme de string Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -95,6 +95,29 @@ def test_save_document_assigns_tags(db_session, sample_data):
|
||||
assert depense.tag_id == tag.id
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"raw,expected",
|
||||
[
|
||||
(100.0, 100.0),
|
||||
(100, 100.0),
|
||||
("1 234,56", 1234.56), # string française -> parsée
|
||||
(None, None),
|
||||
({}, None), # type inattendu -> None, jamais stocké tel quel
|
||||
(True, None), # bool exclu
|
||||
],
|
||||
)
|
||||
def test_normalize_amount(raw, expected):
|
||||
assert DatabaseService._normalize_amount(raw) == expected
|
||||
|
||||
|
||||
def test_save_document_solde_string_is_normalized(db_session, sample_data):
|
||||
sample_data["metadata"]["solde"]["montant"] = "1 234,56"
|
||||
service = DatabaseService(db_session)
|
||||
doc = service.save_document(data=sample_data)
|
||||
assert isinstance(doc.solde_montant, float)
|
||||
assert doc.solde_montant == pytest.approx(1234.56)
|
||||
|
||||
|
||||
def test_check_duplicate(db_session, sample_data):
|
||||
service = DatabaseService(db_session)
|
||||
assert service.check_duplicate("REF001", date(2024, 1, 15)) is None
|
||||
|
||||
Reference in New Issue
Block a user