mitai-jinkendo/backend/tests/test_food_knowledge.py

58 lines
1.5 KiB
Python
Raw Permalink Normal View History

from decimal import Decimal
from uuid import uuid4
from data_layer.food_knowledge import (
BUNDLE_FORMAT,
_jsonable,
parse_food_knowledge_bundle,
portable_mapping,
)
def test_parse_rejects_unknown_format():
try:
parse_food_knowledge_bundle({"format": "other", "version": 1})
except ValueError as e:
assert "Mitai-Zuordnungsdatei" in str(e)
else:
raise AssertionError("expected ValueError")
def test_parse_accepts_bundle():
data = parse_food_knowledge_bundle({
"format": BUNDLE_FORMAT,
"version": 1,
"mappings": [],
"recipes": [],
})
assert data["version"] == 1
def test_portable_mapping_drops_ids():
row = portable_mapping({
"id": 99,
"food_id": "uuid-here",
"source_system": "fddb",
"source_name_raw": "Haferflocken, Großblatt",
"source_name_normalized": "haferflocken großblatt",
"bls_code": "C131000",
"food_name_de": "Hafer roh",
"catalog_kind": "official_bls",
"external_key": None,
})
assert "id" not in row
assert "food_id" not in row
assert row["bls_code"] == "C131000"
assert row["source_name_raw"] == "Haferflocken, Großblatt"
def test_jsonable_export_types():
payload = _jsonable({
"grams": Decimal("1.50"),
"id": uuid4(),
"nested": [Decimal("2")],
})
assert isinstance(payload["grams"], float)
assert isinstance(payload["id"], str)
assert payload["nested"] == [2.0]