diff options
Diffstat (limited to 'crates/rocie-server/tests')
| -rw-r--r-- | crates/rocie-server/tests/_testenv/init.rs | 2 | ||||
| -rw-r--r-- | crates/rocie-server/tests/recipe_parents/mod.rs | 2 | ||||
| -rw-r--r-- | crates/rocie-server/tests/recipe_parents/query.rs | 138 | ||||
| -rw-r--r-- | crates/rocie-server/tests/recipe_parents/register.rs | 69 | ||||
| -rw-r--r-- | crates/rocie-server/tests/recipies/mod.rs | 160 | ||||
| -rw-r--r-- | crates/rocie-server/tests/tests.rs | 1 | ||||
| -rw-r--r-- | crates/rocie-server/tests/users/mod.rs | 4 |
7 files changed, 366 insertions, 10 deletions
diff --git a/crates/rocie-server/tests/_testenv/init.rs b/crates/rocie-server/tests/_testenv/init.rs index 37d50ff..4a169fe 100644 --- a/crates/rocie-server/tests/_testenv/init.rs +++ b/crates/rocie-server/tests/_testenv/init.rs @@ -21,7 +21,7 @@ use std::{ use rocie_client::{ apis::{api_set_no_auth_user_api::provision, configuration::Configuration}, - models::{LoginInfo, UserStub}, + models::UserStub, }; use crate::{ diff --git a/crates/rocie-server/tests/recipe_parents/mod.rs b/crates/rocie-server/tests/recipe_parents/mod.rs new file mode 100644 index 0000000..d3799a7 --- /dev/null +++ b/crates/rocie-server/tests/recipe_parents/mod.rs @@ -0,0 +1,2 @@ +mod query; +mod register; diff --git a/crates/rocie-server/tests/recipe_parents/query.rs b/crates/rocie-server/tests/recipe_parents/query.rs new file mode 100644 index 0000000..bcbf00b --- /dev/null +++ b/crates/rocie-server/tests/recipe_parents/query.rs @@ -0,0 +1,138 @@ +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<_>>(), + vec!["asia".to_owned(), "europe".to_owned(),] + ); + + assert_eq!( + request!(env, recipe_parents_under(parent_asia)) + .into_iter() + .map(|parent| parent.name) + .collect::<Vec<_>>(), + 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<_>>(), + 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<_>>(), + 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<_>>(), + 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<_>>(), + vec!["Beef and Broccoli Stir-Fry".to_owned()], + ); +} diff --git a/crates/rocie-server/tests/recipe_parents/register.rs b/crates/rocie-server/tests/recipe_parents/register.rs new file mode 100644 index 0000000..a113bd3 --- /dev/null +++ b/crates/rocie-server/tests/recipe_parents/register.rs @@ -0,0 +1,69 @@ +use rocie_client::{ + apis::{ + api_get_auth_recipe_api::recipe_by_id, api_set_auth_recipe_api::add_recipe, + api_set_auth_recipe_parent_api::register_recipe_parent, + }, + models::{RecipeParentStub, RecipeStub}, +}; + +use crate::testenv::{TestEnv, init::function_name, log::request}; + +#[tokio::test] +async fn test_recipe_parent_register_roundtrip() { + let env = TestEnv::new(function_name!()).await; + + let parent_dairy = request!( + env, + register_recipe_parent(RecipeParentStub { + description: Some("Dairy replacment recipes".to_owned()), + name: "Dairy replacements".to_owned(), + parent: None, + }) + ); + let parent_dairy_milk = request!( + env, + register_recipe_parent(RecipeParentStub { + description: Some("Milk replacment recipes".to_owned()), + name: "Milk replacements".to_owned(), + parent: Some(parent_dairy), + }) + ); + + let recipe_soy_milk = request!( + env, + add_recipe(RecipeStub { + name: "Soy drink".to_owned(), + parent: Some(parent_dairy_milk), + content: "Mix soy and drink".to_owned() + }) + ); + let recipe_oat_milk = request!( + env, + add_recipe(RecipeStub { + name: "Oat drink".to_owned(), + parent: Some(parent_dairy_milk), + content: "Mix oat and drink".to_owned() + }) + ); + + let recipe_vegan_cheese = request!( + env, + add_recipe(RecipeStub { + name: "Vegan cheese".to_owned(), + parent: Some(parent_dairy), + content: "Make cheese. Remove cheese".to_owned() + }) + ); + + for recipe in [recipe_soy_milk, recipe_oat_milk] { + let recipe = request!(env, recipe_by_id(recipe)); + + assert_eq!(recipe.parent, Some(parent_dairy_milk)); + } + + { + let recipe = request!(env, recipe_by_id(recipe_vegan_cheese)); + + assert_eq!(recipe.parent, Some(parent_dairy)); + } +} diff --git a/crates/rocie-server/tests/recipies/mod.rs b/crates/rocie-server/tests/recipies/mod.rs index dfc8983..e59c3f6 100644 --- a/crates/rocie-server/tests/recipies/mod.rs +++ b/crates/rocie-server/tests/recipies/mod.rs @@ -1,24 +1,170 @@ use rocie_client::{ - apis::{api_get_auth_recipe_api::recipe_by_id, api_set_auth_recipe_api::add_recipe}, - models::RecipeStub, + apis::{ + api_get_auth_recipe_api::recipe_by_id, api_set_auth_product_api::register_product, + api_set_auth_recipe_api::add_recipe, + api_set_auth_unit_property_api::register_unit_property, + }, + models::{ + Content, ContentOneOf, CooklangRecipe, Ingredient, IngredientOneOf1NotRegisteredProduct, + Item, ItemOneOf, ItemOneOf1, Metadata, NameAndUrl, ProductStub, RecipeStub, Section, Step, + UnitPropertyStub, + }, }; use crate::testenv::{TestEnv, init::function_name, log::request}; +#[expect(clippy::unnecessary_wraps)] +fn name_and_url(name: &str, url: &str) -> Option<NameAndUrl> { + Some(NameAndUrl { + name: if name.is_empty() { + None + } else { + Some(name.to_owned()) + }, + url: if url.is_empty() { + None + } else { + Some(url.to_owned()) + }, + }) +} + #[tokio::test] -async fn test_recipe_roundtrip() { +async fn test_recipe_metadata() { let env = TestEnv::new(function_name!()).await; let recipe_id = request!( env, add_recipe(RecipeStub { - path: "/asia/curry".to_owned(), - content: "just make the curry".to_owned(), + content: " +--- +author: James Connor +description: Meaty curry with sharp anacado source and a burning d-pad. +source: https://google.com/search?q=test +title: Curry +--- +" + .to_owned(), + name: "Curry".to_owned(), + parent: None, }) ); let output = request!(env, recipe_by_id(recipe_id)); - assert_eq!(output.path, "/asia/curry".to_owned()); - assert_eq!(output.content, "just make the curry".to_owned()); + assert_eq!(output.name, "Curry".to_owned()); + assert_eq!( + output.content, + CooklangRecipe { + cookware: vec![], + ingredients: vec![], + metadata: Metadata { + author: name_and_url("James Connor", ""), + description: Some( + "Meaty curry with sharp anacado source and a burning d-pad.".to_owned() + ), + source: name_and_url("", "https://google.com/search?q=test"), + tags: None, + title: Some("Curry".to_owned()) + }, + sections: vec![], + timers: vec![] + } + ); +} + +#[tokio::test] +async fn test_recipe_ingredients() { + let env = TestEnv::new(function_name!()).await; + + let up = request!( + env, + register_unit_property(UnitPropertyStub { + description: None, + name: "mass".to_owned() + }) + ); + + let rice_id = request!( + env, + register_product(ProductStub { + description: None, + name: "rice".to_owned(), + parent: None, + unit_property: up, + }) + ); + + let recipe_id = request!( + env, + add_recipe(RecipeStub { + content: " +--- +author: James Connor +title: Curry +--- +Add @rice{} and @water{200%ml} to a pot. +" + .to_owned(), + name: "Curry".to_owned(), + parent: None, + }) + ); + + let output = request!(env, recipe_by_id(recipe_id)); + + assert_eq!(output.name, "Curry".to_owned()); + assert_eq!( + output.content.ingredients, + vec![ + Ingredient::IngredientOneOf(rocie_client::models::IngredientOneOf { + registered_product: rocie_client::models::IngredientOneOfRegisteredProduct { + alias: None, + id: rice_id, + quantity: None, + } + }), + Ingredient::IngredientOneOf1(rocie_client::models::IngredientOneOf1 { + not_registered_product: IngredientOneOf1NotRegisteredProduct { + name: "water".to_owned(), + quantity: None, + } + }), + ] + ); + + assert_eq!( + output.content.sections, + vec![Section { + content: vec![Content::ContentOneOf(ContentOneOf { + value: Step { + items: vec![ + Item::ItemOneOf(ItemOneOf { + r#type: rocie_client::models::item_one_of::Type::Text, + value: "Add ".to_owned() + }), + Item::ItemOneOf1(ItemOneOf1 { + r#type: rocie_client::models::item_one_of_1::Type::Ingredient, + index: 0 + }), + Item::ItemOneOf(ItemOneOf { + r#type: rocie_client::models::item_one_of::Type::Text, + value: " and ".to_owned() + }), + Item::ItemOneOf1(ItemOneOf1 { + r#type: rocie_client::models::item_one_of_1::Type::Ingredient, + index: 1 + }), + Item::ItemOneOf(ItemOneOf { + r#type: rocie_client::models::item_one_of::Type::Text, + value: " to a pot.".to_owned() + }) + ], + number: 1 + }, + r#type: rocie_client::models::content_one_of::Type::Step + })], + name: None + }] + ); } diff --git a/crates/rocie-server/tests/tests.rs b/crates/rocie-server/tests/tests.rs index 373b573..e788712 100644 --- a/crates/rocie-server/tests/tests.rs +++ b/crates/rocie-server/tests/tests.rs @@ -5,6 +5,7 @@ pub(crate) use _testenv as testenv; mod product_parents; mod products; +mod recipe_parents; mod recipies; mod units; mod users; diff --git a/crates/rocie-server/tests/users/mod.rs b/crates/rocie-server/tests/users/mod.rs index 8138691..d381e8f 100644 --- a/crates/rocie-server/tests/users/mod.rs +++ b/crates/rocie-server/tests/users/mod.rs @@ -45,7 +45,7 @@ async fn test_register_user() { @expect_error "The password is wrong" env, login(LoginInfo { - id: user_id, + user_name: "me".to_owned(), password: "hunter13".to_owned() }) ); @@ -53,7 +53,7 @@ async fn test_register_user() { request!( env, login(LoginInfo { - id: user_id, + user_name: "me".to_owned(), password: "hunter14".to_owned() }) ); |
