From 212560c82254b49c71052929878cea0f3031d523 Mon Sep 17 00:00:00 2001 From: Michael Genson Date: Sun, 22 Feb 2026 17:58:59 +0000 Subject: [PATCH] add unit repo tests --- .../repository_tests/test_unit_repository.py | 93 ++++++++++++++++++- 1 file changed, 92 insertions(+), 1 deletion(-) diff --git a/tests/unit_tests/repository_tests/test_unit_repository.py b/tests/unit_tests/repository_tests/test_unit_repository.py index d2a0b7dfe..73034c2f4 100644 --- a/tests/unit_tests/repository_tests/test_unit_repository.py +++ b/tests/unit_tests/repository_tests/test_unit_repository.py @@ -1,11 +1,26 @@ from uuid import UUID +import pytest +from sqlalchemy.orm import Session + +from mealie.repos.all_repositories import AllRepositories, get_repositories from mealie.schema.recipe.recipe import Recipe from mealie.schema.recipe.recipe_ingredient import RecipeIngredient, SaveIngredientUnit -from tests.utils.factories import random_string +from mealie.schema.user.user import GroupBase +from tests.utils.factories import random_int, random_string from tests.utils.fixture_schemas import TestUser +@pytest.fixture() +def unique_local_group_id(unfiltered_database: AllRepositories) -> str: + return str(unfiltered_database.groups.create(GroupBase(name=random_string())).id) + + +@pytest.fixture() +def unique_db(session: Session, unique_local_group_id: str) -> AllRepositories: + return get_repositories(session, group_id=unique_local_group_id) + + def test_unit_merger(unique_user: TestUser): database = unique_user.repos recipe: Recipe | None = None @@ -51,3 +66,79 @@ def test_unit_merger(unique_user: TestUser): for ingredient in recipe.recipe_ingredient: assert ingredient.unit.id == unit_1.id # type: ignore + + +@pytest.mark.parametrize("standard_field", ["name", "plural_name", "abbreviation", "plural_abbreviation"]) +@pytest.mark.parametrize("use_bulk", [True, False]) +def test_auto_inject_standardization(unique_db: AllRepositories, standard_field: str, use_bulk: bool): + unit_in = SaveIngredientUnit(name=random_string(), group_id=unique_db.group_id).model_dump() + unit_in[standard_field] = "gallon" + + if use_bulk: + out_many = unique_db.ingredient_units.create_many([unit_in]) + assert len(out_many) == 1 + unit_out = out_many[0] + else: + unit_out = unique_db.ingredient_units.create(unit_in) + + assert unit_out.standard_unit == "cup" + assert unit_out.standard_quantity == 16 + + +def test_dont_auto_inject_random(unique_db: AllRepositories): + unit_in = SaveIngredientUnit(name=random_string(), group_id=unique_db.group_id) + unit_out = unique_db.ingredient_units.create(unit_in) + + assert unit_out.standard_quantity is None + assert unit_out.standard_unit is None + + +def test_auto_inject_other_language(unique_db: AllRepositories): + # Inject custom unit map + GALLON = random_string() + unique_db.ingredient_units._standardized_unit_map = {GALLON: "gallon"} + + # Create unit with translated value + unit_in = SaveIngredientUnit(name=GALLON, group_id=unique_db.group_id) + unit_out = unique_db.ingredient_units.create(unit_in) + + assert unit_out.standard_unit == "cup" + assert unit_out.standard_quantity == 16 + + +@pytest.mark.parametrize("name", ["custom-mealie-unit", "gallon"]) +def test_user_standardization(unique_db: AllRepositories, name: str): + unit_in = SaveIngredientUnit( + name=name, + group_id=unique_db.group_id, + standard_quantity=random_int(), + standard_unit=random_string(), + ) + unit_out = unique_db.ingredient_units.create(unit_in) + + assert unit_out.standard_quantity == unit_in.standard_quantity + assert unit_out.standard_unit == unit_in.standard_unit + + +def test_ignore_incomplete_standardization(unique_db: AllRepositories): + unit_in = SaveIngredientUnit( + name=random_string(), + group_id=unique_db.group_id, + standard_quantity=random_int(), + standard_unit=None, + ) + unit_out = unique_db.ingredient_units.create(unit_in) + + assert unit_out.standard_quantity is None + assert unit_out.standard_unit is None + + unit_in = SaveIngredientUnit( + name=random_string(), + group_id=unique_db.group_id, + standard_quantity=None, + standard_unit=random_string(), + ) + unit_out = unique_db.ingredient_units.create(unit_in) + + assert unit_out.standard_quantity is None + assert unit_out.standard_unit is None