diff options
Diffstat (limited to 'crates/rocie-server/tests')
| -rw-r--r-- | crates/rocie-server/tests/_testenv/init.rs | 21 | ||||
| -rw-r--r-- | crates/rocie-server/tests/defaults/mod.rs | 48 | ||||
| -rw-r--r-- | crates/rocie-server/tests/recipies/mod.rs | 178 | ||||
| -rw-r--r-- | crates/rocie-server/tests/tests.rs | 1 | ||||
| -rw-r--r-- | crates/rocie-server/tests/users/mod.rs | 13 |
5 files changed, 218 insertions, 43 deletions
diff --git a/crates/rocie-server/tests/_testenv/init.rs b/crates/rocie-server/tests/_testenv/init.rs index 4a169fe..758ca4e 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::UserStub, + models::{ProvisionInfo, UserStub}, }; use crate::{ @@ -116,10 +116,15 @@ impl TestEnv { request!( env, - provision(UserStub { - description: Some("Test user, used during test runs".to_string()), - name: "rocie".to_string(), - password: "server".to_string() + provision(ProvisionInfo { + user: UserStub { + description: Some("Test user, used during test runs".to_string()), + name: "rocie".to_string(), + password: "server".to_string() + }, + // Don't use any default units. + // Otherwise we would need to update the tests every time we add new ones. + use_defaults: false, }) ); @@ -150,7 +155,11 @@ impl TestEnv { let mut stdout = BufReader::new(child.stdout.as_mut().expect("Was captured")); let mut port = String::new(); - assert_ne!(stdout.read_line(&mut port).expect("Works"), 0); + assert_ne!( + stdout.read_line(&mut port).expect("Works"), + 0, + "We should have been able to read the one line, the server printed" + ); port.trim_end() .parse() diff --git a/crates/rocie-server/tests/defaults/mod.rs b/crates/rocie-server/tests/defaults/mod.rs new file mode 100644 index 0000000..6a334b0 --- /dev/null +++ b/crates/rocie-server/tests/defaults/mod.rs @@ -0,0 +1,48 @@ +use rocie_client::{ + apis::{api_get_auth_unit_api::units, api_set_no_auth_user_api::provision}, + models::{ProvisionInfo, UserStub}, +}; + +use crate::testenv::{TestEnv, init::function_name, log::request}; + +#[tokio::test] +async fn test_defaults_disabled() { + let env = TestEnv::new_no_login(function_name!()); + + request!( + env, + provision(ProvisionInfo { + user: UserStub { + description: None, + name: "James Richard Haynes".to_string(), + password: "hunter14".to_string() + }, + use_defaults: false, + }) + ); + + let default_units = request!(env, units()); + + assert_eq!(default_units, vec![]); +} + +#[tokio::test] +async fn test_defaults_all() { + let env = TestEnv::new_no_login(function_name!()); + + request!( + env, + provision(ProvisionInfo { + user: UserStub { + description: None, + name: "James Richard Haynes".to_string(), + password: "hunter14".to_string() + }, + use_defaults: true, + }) + ); + + let default_units = request!(env, units()); + + assert!(!default_units.is_empty()); +} diff --git a/crates/rocie-server/tests/recipies/mod.rs b/crates/rocie-server/tests/recipies/mod.rs index e59c3f6..15680f1 100644 --- a/crates/rocie-server/tests/recipies/mod.rs +++ b/crates/rocie-server/tests/recipies/mod.rs @@ -1,13 +1,14 @@ use rocie_client::{ apis::{ - api_get_auth_recipe_api::recipe_by_id, api_set_auth_product_api::register_product, + api_get_auth_recipe_api::{recipe_by_id, recipe_by_name}, + 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, + Item, ItemOneOf, ItemOneOf1, ItemOneOf1Ingredient, ItemOneOf3, ItemOneOfText, Metadata, + NameAndUrl, ProductStub, RecipeStub, Section, Step, UnitPropertyStub, }, }; @@ -74,7 +75,28 @@ title: Curry } #[tokio::test] -async fn test_recipe_ingredients() { +async fn test_recipe_whitespace() { + let env = TestEnv::new(function_name!()).await; + + let name = " Curry ".to_owned(); + + request!( + env, + add_recipe(RecipeStub { + content: " nothing really ".to_owned(), + name: name.clone(), + parent: None, + }) + ); + + let output = request!(env, recipe_by_name(&name)); + + assert_eq!(output.name, name); +} + +#[tokio::test] +#[expect(clippy::too_many_lines)] +async fn test_recipe_contents() { let env = TestEnv::new(function_name!()).await; let up = request!( @@ -104,6 +126,8 @@ author: James Connor title: Curry --- Add @rice{} and @water{200%ml} to a pot. + +Now add @curry-spice{200%g} let rest for ~{20%min}. " .to_owned(), name: "Curry".to_owned(), @@ -130,41 +154,131 @@ Add @rice{} and @water{200%ml} to a pot. quantity: None, } }), + Ingredient::IngredientOneOf1(rocie_client::models::IngredientOneOf1 { + not_registered_product: IngredientOneOf1NotRegisteredProduct { + name: "curry-spice".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 - })], + content: vec![ + Content::ContentOneOf(ContentOneOf { + step: Step { + items: vec![ + Item::ItemOneOf(ItemOneOf { + text: ItemOneOfText { + value: "Add ".to_owned() + } + }), + Item::ItemOneOf1(ItemOneOf1 { + ingredient: ItemOneOf1Ingredient { index: 0 } + }), + Item::ItemOneOf(ItemOneOf { + text: ItemOneOfText { + value: " and ".to_owned() + } + }), + Item::ItemOneOf1(ItemOneOf1 { + ingredient: ItemOneOf1Ingredient { index: 1 } + }), + Item::ItemOneOf(ItemOneOf { + text: ItemOneOfText { + value: " to a pot.".to_owned() + } + }) + ], + number: 1 + } + }), + Content::ContentOneOf(ContentOneOf { + step: Step { + items: vec![ + Item::ItemOneOf(ItemOneOf { + text: ItemOneOfText { + value: "Now add ".to_owned() + } + }), + Item::ItemOneOf1(ItemOneOf1 { + ingredient: ItemOneOf1Ingredient { index: 2 } + }), + Item::ItemOneOf(ItemOneOf { + text: ItemOneOfText { + value: " let rest for ".to_owned() + } + }), + Item::ItemOneOf3(ItemOneOf3 { + timer: ItemOneOf1Ingredient { index: 0 } + }), + Item::ItemOneOf(ItemOneOf { + text: ItemOneOfText { + value: ".".to_owned() + } + }) + ], + number: 2 + } + }) + ], name: None }] ); } + +#[tokio::test] +async fn test_recipe_full_parse() { + let env = TestEnv::new(function_name!()).await; + + // Recipe source: https://cook.md/https://bbcgoodfood.com/recipes/easy-pancakes + let recipe_id = request!( + env, + add_recipe(RecipeStub { + content: " +--- +title: Easy pancakes +description: Learn how to make the perfect pancakes every time with our foolproof easy crêpe recipe – elaborate flip optional +image: https://images.immediate.co.uk/production/volatile/sites/30/2020/08/recipe-image-legacy-id-1273477_8-ad36e3b.jpg?resize=440,400 +nutrition: + calories: 61 calories + fat: 2 grams fat + saturated fat: 1 grams saturated fat + carbohydrates: 7 grams carbohydrates + sugar: 1 grams sugar + protein: 3 grams protein + sodium: 0.1 milligram of sodium +tags: Cassie Best, Cook school, Crepe, Crêpes, easy pancakes, Flip, Flipping, Good for you, healthy pancakes, How to make pancakes, Make ahead, Pancake day, Pancake filling, Shrove Tuesday, Skills, thin pancakes +source: https://bbcgoodfood.com/recipes/easy-pancakes +author: Cassie Best +prep time: 10 minutes +course: Breakfast, Brunch, Main course +time required: 30 minutes +cook time: 20 minutes +servings: Makes 12 +cuisine: British +diet: Vegetarian +--- + +Put @plain flour{100%g}, @eggs{2}(large), @milk{300%ml}, @sunflower oil{1%tbsp} and a pinch of @salt{} into a #bowl{} or large jug, then whisk to a smooth batter. This should be similar in consistency to single cream. + +Set aside for ~{30%minutes} to rest if you have time, or start cooking straight away. + +Set a #medium frying pan{} or #crêpe pan{} over a medium heat and carefully wipe it with some oiled kitchen paper. + +When hot, cook your pancakes for ~{1%minute} on each side until golden, using around half a ladleful of batter per pancake. Keep them warm in a low oven as you make the rest. + +Serve with @?lemon wedges{} (optional) and @?caster sugar{} (optional), or your favourite filling. Once cold, you can layer the pancakes between baking parchment, then wrap in cling film and freeze for up to two months. +" + .to_owned(), + name: "Easy pancakes".to_owned(), + parent: None, + }) + ); + + let output = request!(env, recipe_by_id(recipe_id)); + + assert_eq!(output.name, "Easy pancakes".to_owned()); +} diff --git a/crates/rocie-server/tests/tests.rs b/crates/rocie-server/tests/tests.rs index e788712..6222017 100644 --- a/crates/rocie-server/tests/tests.rs +++ b/crates/rocie-server/tests/tests.rs @@ -9,3 +9,4 @@ mod recipe_parents; mod recipies; mod units; mod users; +mod defaults; diff --git a/crates/rocie-server/tests/users/mod.rs b/crates/rocie-server/tests/users/mod.rs index d381e8f..c7ba6f8 100644 --- a/crates/rocie-server/tests/users/mod.rs +++ b/crates/rocie-server/tests/users/mod.rs @@ -4,7 +4,7 @@ use rocie_client::{ api_set_auth_user_api::register_user, api_set_no_auth_user_api::{login, logout, provision}, }, - models::{LoginInfo, UserStub}, + models::{LoginInfo, ProvisionInfo, UserStub}, }; use crate::testenv::{TestEnv, init::function_name, log::request}; @@ -15,10 +15,13 @@ async fn test_provisioning() { let user_id = request!( env, - provision(UserStub { - description: None, - name: "James Richard Haynes".to_string(), - password: "hunter14".to_string() + provision(ProvisionInfo { + user: UserStub { + description: None, + name: "James Richard Haynes".to_string(), + password: "hunter14".to_string() + }, + use_defaults: false, }) ); |
