mirror of
https://github.com/mealie-recipes/mealie.git
synced 2026-01-18 06:51:19 -05:00
fix: Coerce null servings into 0 servings (#6839)
This commit is contained in:
@@ -148,6 +148,10 @@ class RecipeSummary(MealieModel):
|
|||||||
last_made: datetime.datetime | None = None
|
last_made: datetime.datetime | None = None
|
||||||
model_config = ConfigDict(from_attributes=True)
|
model_config = ConfigDict(from_attributes=True)
|
||||||
|
|
||||||
|
@field_validator("recipe_servings", "recipe_yield_quantity", mode="before")
|
||||||
|
def clean_numbers(val: Any):
|
||||||
|
return val or 0
|
||||||
|
|
||||||
@field_validator("recipe_yield", "total_time", "prep_time", "cook_time", "perform_time", mode="before")
|
@field_validator("recipe_yield", "total_time", "prep_time", "cook_time", "perform_time", mode="before")
|
||||||
def clean_strings(val: Any):
|
def clean_strings(val: Any):
|
||||||
if val is None:
|
if val is None:
|
||||||
|
|||||||
63
tests/unit_tests/schema_tests/test_recipe.py
Normal file
63
tests/unit_tests/schema_tests/test_recipe.py
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
from typing import Any
|
||||||
|
from uuid import uuid4
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from mealie.schema.recipe import RecipeSummary
|
||||||
|
|
||||||
|
SHOULD_ERROR = "this_test_should_error"
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("field", ["recipe_servings", "recipe_yield_quantity"])
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
["val", "expected"],
|
||||||
|
[
|
||||||
|
(0, 0),
|
||||||
|
(None, 0),
|
||||||
|
("", 0),
|
||||||
|
(10, 10),
|
||||||
|
(2.25, 2.25),
|
||||||
|
("10", 10),
|
||||||
|
("invalid", SHOULD_ERROR),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
def test_recipe_number_sanitation(field: str, val: Any, expected: Any):
|
||||||
|
try:
|
||||||
|
recipe = RecipeSummary(
|
||||||
|
id=uuid4(),
|
||||||
|
user_id=uuid4(),
|
||||||
|
household_id=uuid4(),
|
||||||
|
group_id=uuid4(),
|
||||||
|
**{field: val},
|
||||||
|
)
|
||||||
|
except ValueError:
|
||||||
|
if expected == SHOULD_ERROR:
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
raise
|
||||||
|
|
||||||
|
assert expected != SHOULD_ERROR, "Value should have errored"
|
||||||
|
assert getattr(recipe, field) == expected
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("field", ["recipe_yield", "total_time", "prep_time", "cook_time", "perform_time"])
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
["val", "expected"],
|
||||||
|
[
|
||||||
|
("normal string", "normal string"),
|
||||||
|
("", ""),
|
||||||
|
(None, None),
|
||||||
|
(10, "10"),
|
||||||
|
(2.25, "2.25"),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
def test_recipe_string_sanitation(field: str, val: Any, expected: Any):
|
||||||
|
recipe = RecipeSummary(
|
||||||
|
id=uuid4(),
|
||||||
|
user_id=uuid4(),
|
||||||
|
household_id=uuid4(),
|
||||||
|
group_id=uuid4(),
|
||||||
|
**{field: val},
|
||||||
|
)
|
||||||
|
|
||||||
|
assert getattr(recipe, field) == expected
|
||||||
Reference in New Issue
Block a user