Files
TicketTracker/tests/test_models.py
laurent 1e5fc97bb7 feat: migration Windows → Ubuntu, stabilisation suite de tests
- 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>
2026-02-24 18:53:41 +01:00

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