munch-ease-backend/tests/test_ingredients_parse_api_v2.py
2025-11-01 23:05:16 +11:00

72 lines
2.3 KiB
Python

import unittest
from fastapi.testclient import TestClient
import main
from db import connect, create
class TestIngredientsParseApiV2(unittest.IsolatedAsyncioTestCase):
async def asyncSetUp(self):
self.conn = await connect(":memory:")
await create(self.conn)
async def override_get_db():
try:
yield self.conn
finally:
pass
main.app.dependency_overrides[main.get_db] = override_get_db
self.client = TestClient(main.app)
async def asyncTearDown(self):
await self.conn.close()
main.app.dependency_overrides.clear()
def test_parse_multiple_ingredients(self):
params = {
"ingredients": [
"14oz milk powder",
"2 cups flour",
"1 tsp salt",
"egg", # defaults to 1 Items
]
}
r = self.client.get("/api/v1/recipes/ingredients/parse", params=params)
assert r.status_code == 200, r.text
arr = r.json()
assert isinstance(arr, list)
assert len(arr) == 4
# Basic shape checks
for item in arr:
assert "name" in item and isinstance(item["name"], str)
assert "line" in item and isinstance(item["line"], str)
assert "quantity" in item
assert "unit" in item and isinstance(item["unit"], str)
# Quantity should be a positive number
assert float(item["quantity"]) > 0
# The original sentence should round-trip into line
assert len(item["line"]) >= len(item["name"]) >= 1
# Spot checks for unit/quantity normalization
# 14oz milk powder
oz = arr[0]
assert float(oz["quantity"]) == 14.0
assert oz["unit"] == "Ounce"
assert "milk" in oz["name"].lower()
cups = arr[1]
assert float(cups["quantity"]) == 2.0
assert cups["unit"] == "Cup"
assert cups["name"].lower() == "flour"
tsp = arr[2]
assert float(tsp["quantity"]) == 1.0
assert tsp["unit"] == "Teaspoon"
assert tsp["name"].lower() == "salt"
egg = arr[3]
assert float(egg["quantity"]) == 1.0
assert egg["unit"] == "Items"
assert egg["name"].lower() == "egg"