about summary refs log tree commit diff stats
path: root/crates/rocie-server/tests
diff options
context:
space:
mode:
Diffstat (limited to 'crates/rocie-server/tests')
-rw-r--r--crates/rocie-server/tests/_testenv/init.rs2
-rw-r--r--crates/rocie-server/tests/recipe_parents/mod.rs2
-rw-r--r--crates/rocie-server/tests/recipe_parents/query.rs138
-rw-r--r--crates/rocie-server/tests/recipe_parents/register.rs69
-rw-r--r--crates/rocie-server/tests/recipies/mod.rs160
-rw-r--r--crates/rocie-server/tests/tests.rs1
-rw-r--r--crates/rocie-server/tests/users/mod.rs4
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()
         })
     );