feat: durcit l'exécution SQL IA, borne les uploads et ajoute des tests
- sql_executor: remplace le filtre regex fragile par une autorisation SQLite (set_authorizer) en complément de mode=ro ; rejette les instructions multiples - uploads: lecture bornée des PDF (helper read_upload_limited, limite 20 Mo, HTTP 413) branchée sur /extract et /save-with-pdf - tests: suite pytest (54 tests) couvrant amounts, dates, storage, sql_executor, uploads et DatabaseService.save_document ; pytest ajouté en dépendance dev Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
39
tests/test_amounts.py
Normal file
39
tests/test_amounts.py
Normal file
@@ -0,0 +1,39 @@
|
||||
"""Tests du parsing des montants français."""
|
||||
|
||||
import pytest
|
||||
|
||||
from plesna_gerance.utils.amounts import parse_amount, extract_amounts_from_line
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"text,expected",
|
||||
[
|
||||
("123,45", 123.45),
|
||||
("123.45", 123.45),
|
||||
("1 234,56", 1234.56),
|
||||
("1.234,56", 1234.56),
|
||||
("1 234,56", 1234.56),
|
||||
("123,45 €", 123.45),
|
||||
("", 0.0),
|
||||
("abc", 0.0),
|
||||
("-45,67", -45.67),
|
||||
],
|
||||
)
|
||||
def test_parse_amount(text, expected):
|
||||
assert parse_amount(text) == pytest.approx(expected)
|
||||
|
||||
|
||||
def test_extract_amounts_ignores_dates():
|
||||
# 01.01.25 est une date, pas un montant
|
||||
line = "Loyer du 01.01.25 au 31.01.25 : 500,00 réglé 500,00"
|
||||
amounts = extract_amounts_from_line(line)
|
||||
assert amounts == [500.00, 500.00]
|
||||
|
||||
|
||||
def test_extract_amounts_negative_and_thousands():
|
||||
line = "Solde -1 234,56 et frais 12,00"
|
||||
assert extract_amounts_from_line(line) == [-1234.56, 12.00]
|
||||
|
||||
|
||||
def test_extract_amounts_none_found():
|
||||
assert extract_amounts_from_line("aucun montant ici") == []
|
||||
Reference in New Issue
Block a user