| 
									
										
										
										
											2022-07-31 13:10:20 -08:00
										 |  |  | import contextlib | 
					
						
							|  |  |  | from collections.abc import Generator | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-16 15:24:24 -09:00
										 |  |  | import sqlalchemy | 
					
						
							| 
									
										
										
										
											2021-11-25 14:17:02 -09:00
										 |  |  | from pytest import fixture | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-31 13:10:20 -08:00
										 |  |  | from mealie.schema.recipe.recipe import Recipe | 
					
						
							|  |  |  | from mealie.schema.recipe.recipe_category import CategoryOut, CategorySave | 
					
						
							| 
									
										
										
										
											2022-01-16 15:24:24 -09:00
										 |  |  | from mealie.schema.recipe.recipe_ingredient import RecipeIngredient | 
					
						
							| 
									
										
										
										
											2022-02-27 12:48:21 -09:00
										 |  |  | from mealie.schema.recipe.recipe_step import RecipeStep | 
					
						
							| 
									
										
										
										
											2022-01-16 15:24:24 -09:00
										 |  |  | from tests.utils.factories import random_string | 
					
						
							|  |  |  | from tests.utils.fixture_schemas import TestUser | 
					
						
							| 
									
										
										
										
											2021-11-25 14:17:02 -09:00
										 |  |  | from tests.utils.recipe_data import get_raw_no_image, get_raw_recipe, get_recipe_test_cases | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @fixture(scope="session") | 
					
						
							|  |  |  | def raw_recipe(): | 
					
						
							|  |  |  |     return get_raw_recipe() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @fixture(scope="session") | 
					
						
							|  |  |  | def raw_recipe_no_image(): | 
					
						
							|  |  |  |     return get_raw_no_image() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @fixture(scope="session") | 
					
						
							|  |  |  | def recipe_store(): | 
					
						
							|  |  |  |     return get_recipe_test_cases() | 
					
						
							| 
									
										
										
										
											2022-01-16 15:24:24 -09:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @fixture(scope="function") | 
					
						
							| 
									
										
										
										
											2024-08-22 10:14:32 -05:00
										 |  |  | def recipe_ingredient_only(unique_user: TestUser): | 
					
						
							|  |  |  |     database = unique_user.repos | 
					
						
							| 
									
										
										
										
											2022-01-16 15:24:24 -09:00
										 |  |  |     # Create a recipe | 
					
						
							|  |  |  |     recipe = Recipe( | 
					
						
							|  |  |  |         user_id=unique_user.user_id, | 
					
						
							|  |  |  |         group_id=unique_user.group_id, | 
					
						
							|  |  |  |         name=random_string(10), | 
					
						
							|  |  |  |         recipe_ingredient=[ | 
					
						
							| 
									
										
										
										
											2025-07-31 10:36:24 -05:00
										 |  |  |             RecipeIngredient(quantity=1, note="Ingredient 1"), | 
					
						
							|  |  |  |             RecipeIngredient(quantity=1, note="Ingredient 2"), | 
					
						
							|  |  |  |             RecipeIngredient(quantity=1, note="Ingredient 3"), | 
					
						
							|  |  |  |             RecipeIngredient(quantity=1, note="Ingredient 4"), | 
					
						
							|  |  |  |             RecipeIngredient(quantity=1, note="Ingredient 5"), | 
					
						
							|  |  |  |             RecipeIngredient(quantity=1, note="Ingredient 6"), | 
					
						
							| 
									
										
										
										
											2022-01-16 15:24:24 -09:00
										 |  |  |         ], | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     model = database.recipes.create(recipe) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     yield model | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-31 13:10:20 -08:00
										 |  |  |     with contextlib.suppress(sqlalchemy.exc.NoResultFound): | 
					
						
							| 
									
										
										
										
											2022-01-16 15:24:24 -09:00
										 |  |  |         database.recipes.delete(model.slug) | 
					
						
							| 
									
										
										
										
											2022-02-13 12:23:42 -09:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-27 07:58:40 -06:00
										 |  |  | @fixture(scope="function") | 
					
						
							|  |  |  | def recipes_ingredient_only(unique_user: TestUser): | 
					
						
							|  |  |  |     database = unique_user.repos | 
					
						
							|  |  |  |     recipes: list[Recipe] = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     for _ in range(3): | 
					
						
							|  |  |  |         # Create a recipe | 
					
						
							|  |  |  |         recipe = Recipe( | 
					
						
							|  |  |  |             user_id=unique_user.user_id, | 
					
						
							|  |  |  |             group_id=unique_user.group_id, | 
					
						
							|  |  |  |             name=random_string(10), | 
					
						
							|  |  |  |             recipe_ingredient=[ | 
					
						
							|  |  |  |                 RecipeIngredient(note=f"Ingredient 1 {random_string(5)}"), | 
					
						
							|  |  |  |                 RecipeIngredient(note=f"Ingredient 2 {random_string(5)}"), | 
					
						
							|  |  |  |                 RecipeIngredient(note=f"Ingredient 3 {random_string(5)}"), | 
					
						
							|  |  |  |                 RecipeIngredient(note=f"Ingredient 4 {random_string(5)}"), | 
					
						
							|  |  |  |                 RecipeIngredient(note=f"Ingredient 5 {random_string(5)}"), | 
					
						
							|  |  |  |                 RecipeIngredient(note=f"Ingredient 6 {random_string(5)}"), | 
					
						
							|  |  |  |             ], | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         model = database.recipes.create(recipe) | 
					
						
							|  |  |  |         recipes.append(model) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     yield recipes | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     with contextlib.suppress(sqlalchemy.exc.NoResultFound): | 
					
						
							|  |  |  |         for recipe in recipes: | 
					
						
							|  |  |  |             database.recipes.delete(recipe.slug) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-13 12:23:42 -09:00
										 |  |  | @fixture(scope="function") | 
					
						
							| 
									
										
										
										
											2024-08-22 10:14:32 -05:00
										 |  |  | def recipe_categories(unique_user: TestUser) -> Generator[list[CategoryOut], None, None]: | 
					
						
							|  |  |  |     database = unique_user.repos | 
					
						
							| 
									
										
										
										
											2022-07-31 13:10:20 -08:00
										 |  |  |     models: list[CategoryOut] = [] | 
					
						
							| 
									
										
										
										
											2022-02-13 12:23:42 -09:00
										 |  |  |     for _ in range(3): | 
					
						
							|  |  |  |         category = CategorySave( | 
					
						
							|  |  |  |             group_id=unique_user.group_id, | 
					
						
							|  |  |  |             name=random_string(10), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         model = database.categories.create(category) | 
					
						
							|  |  |  |         models.append(model) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     yield models | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-31 13:10:20 -08:00
										 |  |  |     for m in models: | 
					
						
							|  |  |  |         with contextlib.suppress(sqlalchemy.exc.NoResultFound): | 
					
						
							|  |  |  |             database.categories.delete(m.id) | 
					
						
							| 
									
										
										
										
											2022-02-27 12:48:21 -09:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @fixture(scope="function") | 
					
						
							| 
									
										
										
										
											2024-08-22 10:14:32 -05:00
										 |  |  | def random_recipe(unique_user: TestUser) -> Generator[Recipe, None, None]: | 
					
						
							|  |  |  |     database = unique_user.repos | 
					
						
							| 
									
										
										
										
											2022-02-27 12:48:21 -09:00
										 |  |  |     recipe = Recipe( | 
					
						
							|  |  |  |         user_id=unique_user.user_id, | 
					
						
							|  |  |  |         group_id=unique_user.group_id, | 
					
						
							|  |  |  |         name=random_string(10), | 
					
						
							|  |  |  |         recipe_ingredient=[ | 
					
						
							|  |  |  |             RecipeIngredient(note="Ingredient 1"), | 
					
						
							|  |  |  |             RecipeIngredient(note="Ingredient 2"), | 
					
						
							|  |  |  |             RecipeIngredient(note="Ingredient 3"), | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |         recipe_instructions=[ | 
					
						
							|  |  |  |             RecipeStep(text="Step 1"), | 
					
						
							|  |  |  |             RecipeStep(text="Step 2"), | 
					
						
							|  |  |  |             RecipeStep(text="Step 3"), | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     model = database.recipes.create(recipe) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     yield model | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-31 13:10:20 -08:00
										 |  |  |     with contextlib.suppress(sqlalchemy.exc.NoResultFound): | 
					
						
							| 
									
										
										
										
											2022-02-27 12:48:21 -09:00
										 |  |  |         database.recipes.delete(model.slug) |