keys-Auto-Receipts-Studio / tests /test_schema.py
drowzeys's picture
v1.0 alpha: keys-Auto Receipts Studio (iPhone / may add Autonomous Lamp Skill)
2edb151 verified
Raw
History Blame Contribute Delete
1.12 kB
from __future__ import annotations
import pytest
from app.schemas import parse_extract_json, to_cents
GOOD = """
{
"doc_kind": "receipt",
"category": "groceries",
"vendor": "HEB",
"date": "2026-08-21",
"tax": 1.23,
"total": 14.56,
"currency": "USD",
"line_items": [
{"description": "milk", "qty": 1, "unit_price": 4.29, "amount": 4.29, "sku": null}
]
}
"""
FENCED = "```json\n" + GOOD + "\n```"
def test_parse_good() -> None:
extract = parse_extract_json(GOOD)
assert extract.vendor == "HEB"
assert extract.category == "groceries"
assert extract.line_items[0].description == "milk"
assert to_cents(extract.total) == 1456
def test_parse_fenced() -> None:
extract = parse_extract_json(FENCED)
assert extract.date.isoformat() == "2026-08-21"
def test_unknown_category_falls_back() -> None:
raw = GOOD.replace("groceries", "snacks-aisle")
extract = parse_extract_json(raw)
assert extract.category == "other"
def test_bad_types() -> None:
with pytest.raises(Exception):
parse_extract_json('{"doc_kind":"receipt","line_items":"nope"}')