about summary refs log tree commit diff stats
path: root/crates/rocie-server/tests/recipe_parents
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-02-15 22:24:32 +0100
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-02-15 22:25:06 +0100
commite5f90f4474cb96a78080395980283e4b2ce40214 (patch)
treecaac3300795eae8e4cb1ee3c1c4bf85cd5950402 /crates/rocie-server/tests/recipe_parents
parentchore(treewide): Update (diff)
downloadserver-e5f90f4474cb96a78080395980283e4b2ce40214.zip
feat(treewide): Add recipes and user handling
Diffstat (limited to 'crates/rocie-server/tests/recipe_parents')
-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
3 files changed, 209 insertions, 0 deletions
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));
+    }
+}