mirror of
https://github.com/mealie-recipes/mealie.git
synced 2024-12-22 03:51:21 -08:00
c82549ccb4
Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
212 lines
5.9 KiB
Python
212 lines
5.9 KiB
Python
from uuid import uuid4
|
|
|
|
import pytest
|
|
|
|
from mealie.schema.recipe.recipe_ingredient import (
|
|
IngredientFood,
|
|
IngredientUnit,
|
|
RecipeIngredient,
|
|
)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
["quantity", "quantity_display_decimal", "quantity_display_fraction", "expect_plural_unit", "expect_plural_food"],
|
|
[
|
|
[0, "", "", False, True],
|
|
[0.5, "0.5", "¹/₂", False, False],
|
|
[1, "1", "1", False, False],
|
|
[1.5, "1.5", "1 ¹/₂", True, True],
|
|
[2, "2", "2", True, True],
|
|
],
|
|
)
|
|
@pytest.mark.parametrize(
|
|
["unit", "expect_display_fraction", "expected_unit_singular_string", "expected_unit_plural_string"],
|
|
[
|
|
[
|
|
None,
|
|
True,
|
|
"",
|
|
"",
|
|
],
|
|
[
|
|
IngredientUnit(
|
|
id=uuid4(),
|
|
name="tablespoon",
|
|
plural_name=None,
|
|
abbreviation="tbsp",
|
|
plural_abbreviation=None,
|
|
use_abbreviation=False,
|
|
fraction=True,
|
|
),
|
|
True,
|
|
"tablespoon",
|
|
"tablespoon",
|
|
],
|
|
[
|
|
IngredientUnit(
|
|
id=uuid4(),
|
|
name="tablespoon",
|
|
plural_name=None,
|
|
abbreviation="tbsp",
|
|
plural_abbreviation=None,
|
|
use_abbreviation=False,
|
|
fraction=False,
|
|
),
|
|
False,
|
|
"tablespoon",
|
|
"tablespoon",
|
|
],
|
|
[
|
|
IngredientUnit(
|
|
id=uuid4(),
|
|
name="tablespoon",
|
|
plural_name=None,
|
|
abbreviation="tbsp",
|
|
plural_abbreviation=None,
|
|
use_abbreviation=True,
|
|
fraction=True,
|
|
),
|
|
True,
|
|
"tbsp",
|
|
"tbsp",
|
|
],
|
|
[
|
|
IngredientUnit(
|
|
id=uuid4(),
|
|
name="tablespoon",
|
|
plural_name=None,
|
|
abbreviation="tbsp",
|
|
plural_abbreviation=None,
|
|
use_abbreviation=True,
|
|
fraction=False,
|
|
),
|
|
False,
|
|
"tbsp",
|
|
"tbsp",
|
|
],
|
|
[
|
|
IngredientUnit(
|
|
id=uuid4(),
|
|
name="tablespoon",
|
|
plural_name="tablespoons",
|
|
abbreviation="tbsp",
|
|
plural_abbreviation="tbsps",
|
|
use_abbreviation=False,
|
|
fraction=True,
|
|
),
|
|
True,
|
|
"tablespoon",
|
|
"tablespoons",
|
|
],
|
|
[
|
|
IngredientUnit(
|
|
id=uuid4(),
|
|
name="tablespoon",
|
|
plural_name="tablespoons",
|
|
abbreviation="tbsp",
|
|
plural_abbreviation="tbsps",
|
|
use_abbreviation=False,
|
|
fraction=False,
|
|
),
|
|
False,
|
|
"tablespoon",
|
|
"tablespoons",
|
|
],
|
|
[
|
|
IngredientUnit(
|
|
id=uuid4(),
|
|
name="tablespoon",
|
|
plural_name="tablespoons",
|
|
abbreviation="tbsp",
|
|
plural_abbreviation="tbsps",
|
|
use_abbreviation=True,
|
|
fraction=True,
|
|
),
|
|
True,
|
|
"tbsp",
|
|
"tbsps",
|
|
],
|
|
[
|
|
IngredientUnit(
|
|
id=uuid4(),
|
|
name="tablespoon",
|
|
plural_name="tablespoons",
|
|
abbreviation="tbsp",
|
|
plural_abbreviation="tbsps",
|
|
use_abbreviation=True,
|
|
fraction=False,
|
|
),
|
|
False,
|
|
"tbsp",
|
|
"tbsps",
|
|
],
|
|
],
|
|
)
|
|
@pytest.mark.parametrize(
|
|
["food", "expected_food_singular_string", "expected_food_plural_string"],
|
|
[
|
|
[
|
|
IngredientFood(id=uuid4(), name="chopped onion", plural_name=None),
|
|
"chopped onion",
|
|
"chopped onion",
|
|
],
|
|
[
|
|
IngredientFood(id=uuid4(), name="chopped onion", plural_name="chopped onions"),
|
|
"chopped onion",
|
|
"chopped onions",
|
|
],
|
|
],
|
|
)
|
|
@pytest.mark.parametrize("note", ["very thin", ""])
|
|
@pytest.mark.parametrize("use_food", [True, False])
|
|
def test_ingredient_display(
|
|
quantity: float | None,
|
|
quantity_display_decimal: str,
|
|
quantity_display_fraction: str,
|
|
unit: IngredientUnit | None,
|
|
food: IngredientFood,
|
|
note: str,
|
|
use_food: bool,
|
|
expect_display_fraction: bool,
|
|
expect_plural_unit: bool,
|
|
expect_plural_food: bool,
|
|
expected_unit_singular_string: str,
|
|
expected_unit_plural_string: str,
|
|
expected_food_singular_string: str,
|
|
expected_food_plural_string: str,
|
|
):
|
|
expected_components = []
|
|
if use_food:
|
|
if expect_display_fraction:
|
|
expected_components.append(quantity_display_fraction)
|
|
else:
|
|
expected_components.append(quantity_display_decimal)
|
|
|
|
if quantity:
|
|
if expect_plural_unit:
|
|
expected_components.append(expected_unit_plural_string)
|
|
else:
|
|
expected_components.append(expected_unit_singular_string)
|
|
|
|
if expect_plural_food:
|
|
expected_components.append(expected_food_plural_string)
|
|
else:
|
|
expected_components.append(expected_food_singular_string)
|
|
|
|
expected_components.append(note)
|
|
|
|
else:
|
|
if quantity != 0 and quantity != 1:
|
|
if expect_display_fraction:
|
|
expected_components.append(quantity_display_fraction)
|
|
else:
|
|
expected_components.append(quantity_display_decimal)
|
|
|
|
expected_components.append(note)
|
|
|
|
expected_display_value = " ".join(c for c in expected_components if c)
|
|
ingredient = RecipeIngredient(
|
|
quantity=quantity, unit=unit, food=food, note=note, use_food=use_food, disable_amount=not use_food
|
|
)
|
|
assert ingredient.display == expected_display_value
|