// rocie - An enterprise grocery management system // // Copyright (C) 2026 Benedikt Peetz // SPDX-License-Identifier: GPL-3.0-or-later // // This file is part of Rocie. // // You should have received a copy of the License along with this program. // If not, see . use rocie_client::{ apis::{ api_get_auth_recipe_api::{ recipes_by_recipe_parent_id_direct, recipes_by_recipe_parent_id_indirect, }, api_get_auth_recipe_parent_api::{recipe_parents_toplevel, recipe_parents_under}, api_set_auth_recipe_api::add_recipe, api_set_auth_recipe_parent_api::register_recipe_parent, }, models::{RecipeParentStub, RecipeStub}, }; use crate::{ testenv::init::function_name, testenv::{TestEnv, log::request}, }; #[tokio::test] async fn test_recipe_parent_query() { let env = TestEnv::new(function_name!()).await; let parent_asia = request!( env, register_recipe_parent(RecipeParentStub { description: Some("Asia inspired recipes".to_owned()), name: "asia".to_owned(), parent: None, }) ); request!( env, register_recipe_parent(RecipeParentStub { description: Some("Traditionally chineese recipes".to_owned()), name: "china".to_owned(), parent: Some(parent_asia), }) ); request!( env, register_recipe_parent(RecipeParentStub { description: Some("Europeen recipes".to_owned()), name: "europe".to_owned(), parent: None, }) ); assert_eq!( request!(env, recipe_parents_toplevel()) .into_iter() .map(|parent| parent.name) .collect::>(), vec!["asia".to_owned(), "europe".to_owned(),] ); assert_eq!( request!(env, recipe_parents_under(parent_asia)) .into_iter() .map(|parent| parent.name) .collect::>(), vec!["china".to_owned()] ); } #[tokio::test] async fn test_recipe_parent_query_recipe() { let env = TestEnv::new(function_name!()).await; let parent_asia = request!( env, register_recipe_parent(RecipeParentStub { description: None, name: "asia".to_owned(), parent: None, }) ); let parent_china = request!( env, register_recipe_parent(RecipeParentStub { description: None, name: "china".to_owned(), parent: Some(parent_asia), }) ); request!( env, add_recipe(RecipeStub { name: "Orange Chicken".to_owned(), parent: Some(parent_china), content: "Do some chicken".to_owned() }) ); request!( env, add_recipe(RecipeStub { name: "Beef and Broccoli Stir-Fry".to_owned(), parent: Some(parent_asia), content: "Do some beef and add stir-fryed broccoli".to_owned() }) ); assert_eq!( request!(env, recipes_by_recipe_parent_id_indirect(parent_china)) .into_iter() .map(|recipe| recipe.name) .collect::>(), vec!["Orange Chicken".to_owned()], ); assert_eq!( request!(env, recipes_by_recipe_parent_id_direct(parent_china)) .into_iter() .map(|recipe| recipe.name) .collect::>(), vec!["Orange Chicken".to_owned()], ); assert_eq!( request!(env, recipes_by_recipe_parent_id_indirect(parent_asia)) .into_iter() .map(|recipe| recipe.name) .collect::>(), vec![ "Beef and Broccoli Stir-Fry".to_owned(), "Orange Chicken".to_owned(), ], ); assert_eq!( request!(env, recipes_by_recipe_parent_id_direct(parent_asia)) .into_iter() .map(|recipe| recipe.name) .collect::>(), vec!["Beef and Broccoli Stir-Fry".to_owned()], ); }