- Ajout venv Python (.venv) avec pip bootstrap (python3-venv absent) - Correction OCR Linux : marqueur TTC/TVA tolère la confusion T↔I (Tesseract 5.3.4 Linux lit parfois "TIc" au lieu de "TTC") - test_leclerc.py : skipif si Tesseract absent, xfail pour test de somme (précision OCR variable entre plateformes, solution LLM vision prévue) - Résultat : 77 passent, 1 xfail, 0 échec (vs 78 sur Windows) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
61 lines
1.7 KiB
Python
61 lines
1.7 KiB
Python
"""
|
|
Tests pour le modèle de données Receipt.
|
|
|
|
Ces tests vérifient que le format JSON commun fonctionne
|
|
correctement avant même d'avoir des parsers réels.
|
|
"""
|
|
|
|
import json
|
|
from datetime import date
|
|
|
|
import pytest
|
|
|
|
from tickettracker.models.receipt import Item, Receipt
|
|
|
|
|
|
def test_receipt_to_dict():
|
|
"""Un ticket se convertit correctement en dictionnaire."""
|
|
receipt = Receipt(
|
|
store="picnic",
|
|
date=date(2024, 1, 15),
|
|
total=42.50,
|
|
items=[
|
|
Item(name="Lait demi-écrémé", quantity=2, unit="pièce", unit_price=1.05, total_price=2.10),
|
|
Item(name="Pain de campagne", quantity=1, unit="pièce", unit_price=2.40, total_price=2.40),
|
|
],
|
|
)
|
|
|
|
d = receipt.to_dict()
|
|
|
|
assert d["store"] == "picnic"
|
|
assert d["date"] == "2024-01-15" # La date doit être une string ISO
|
|
assert d["total"] == 42.50
|
|
assert d["currency"] == "EUR"
|
|
assert len(d["items"]) == 2
|
|
assert d["items"][0]["name"] == "Lait demi-écrémé"
|
|
|
|
|
|
def test_receipt_to_json_is_valid_json():
|
|
"""Le JSON produit est bien parsable."""
|
|
receipt = Receipt(
|
|
store="leclerc",
|
|
date=date(2024, 2, 3),
|
|
total=18.90,
|
|
items=[Item(name="Tomates", quantity=0.5, unit="kg", unit_price=3.20, total_price=1.60)],
|
|
)
|
|
|
|
json_str = receipt.to_json()
|
|
parsed = json.loads(json_str) # Lève une exception si le JSON est invalide
|
|
|
|
assert parsed["store"] == "leclerc"
|
|
assert parsed["items"][0]["unit"] == "kg"
|
|
|
|
|
|
def test_receipt_optional_fields():
|
|
"""Les champs optionnels ont des valeurs par défaut correctes."""
|
|
receipt = Receipt(store="picnic", date=date(2024, 1, 1), total=10.0)
|
|
|
|
assert receipt.currency == "EUR"
|
|
assert receipt.items == []
|
|
assert receipt.order_id is None
|