about summary refs log tree commit diff stats
path: root/crates/rocie-server/tests/product_parents/query.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/rocie-server/tests/product_parents/query.rs')
-rw-r--r--crates/rocie-server/tests/product_parents/query.rs144
1 files changed, 144 insertions, 0 deletions
diff --git a/crates/rocie-server/tests/product_parents/query.rs b/crates/rocie-server/tests/product_parents/query.rs
new file mode 100644
index 0000000..6d16ca3
--- /dev/null
+++ b/crates/rocie-server/tests/product_parents/query.rs
@@ -0,0 +1,144 @@
+use rocie_client::{
+    apis::{
+        api_get_product_api::{products_by_product_parent_id_direct, products_by_product_parent_id_indirect},
+        api_get_product_parent_api::{product_parents_toplevel, product_parents_under},
+        api_set_product_api::register_product,
+        api_set_product_parent_api::register_product_parent,
+        api_set_unit_property_api::register_unit_property,
+    },
+    models::{ProductParentStub, ProductStub, UnitPropertyStub},
+};
+
+use crate::{
+    _testenv::init::function_name,
+    testenv::{TestEnv, log::request},
+};
+
+#[tokio::test]
+async fn test_product_parent_query() {
+    let env = TestEnv::new(function_name!());
+
+    let parent_dairy = request!(
+        env,
+        register_product_parent(ProductParentStub {
+            description: Some("Dairy replacment products".to_owned()),
+            name: "Dairy replacements".to_owned(),
+            parent: None,
+        })
+    );
+    request!(
+        env,
+        register_product_parent(ProductParentStub {
+            description: Some("Dairy replacment products".to_owned()),
+            name: "Wheat products".to_owned(),
+            parent: None,
+        })
+    );
+
+    request!(
+        env,
+        register_product_parent(ProductParentStub {
+            description: Some("Milk replacment products".to_owned()),
+            name: "Milk replacements".to_owned(),
+            parent: Some(parent_dairy),
+        })
+    );
+
+    assert_eq!(
+        request!(env, product_parents_toplevel())
+            .into_iter()
+            .map(|parent| parent.name)
+            .collect::<Vec<_>>(),
+        vec!["Dairy replacements".to_owned(), "Wheat products".to_owned(),]
+    );
+
+    assert_eq!(
+        request!(env, product_parents_under(parent_dairy))
+            .into_iter()
+            .map(|parent| parent.name)
+            .collect::<Vec<_>>(),
+        vec!["Milk replacements".to_owned()]
+    );
+}
+
+#[tokio::test]
+async fn test_product_parent_query_product() {
+    let env = TestEnv::new(function_name!());
+
+    let parent_dairy = request!(
+        env,
+        register_product_parent(ProductParentStub {
+            description: Some("Dairy replacment products".to_owned()),
+            name: "Dairy replacements".to_owned(),
+            parent: None,
+        })
+    );
+    let parent_dairy_milk = request!(
+        env,
+        register_product_parent(ProductParentStub {
+            description: Some("Dairy replacment products".to_owned()),
+            name: "milk products".to_owned(),
+            parent: Some(parent_dairy),
+        })
+    );
+
+    let unit_property = request!(
+        env,
+        register_unit_property(UnitPropertyStub {
+            description: None,
+            name: "Volume".to_owned()
+        })
+    );
+
+    request!(
+        env,
+        register_product(ProductStub {
+            description: None,
+            name: "Soy milk".to_owned(),
+            parent: Some(parent_dairy_milk),
+            unit_property,
+        })
+    );
+
+    request!(
+        env,
+        register_product(ProductStub {
+            description: None,
+            name: "Cheese".to_owned(),
+            parent: Some(parent_dairy),
+            unit_property,
+        })
+    );
+
+    assert_eq!(
+        request!(env, products_by_product_parent_id_indirect(parent_dairy_milk))
+            .into_iter()
+            .map(|product| product.name)
+            .collect::<Vec<_>>(),
+        vec!["Soy milk".to_owned()],
+    );
+
+    assert_eq!(
+        request!(env, products_by_product_parent_id_direct(parent_dairy_milk))
+            .into_iter()
+            .map(|product| product.name)
+            .collect::<Vec<_>>(),
+        vec!["Soy milk".to_owned()],
+    );
+
+    assert_eq!(
+        request!(env, products_by_product_parent_id_indirect(parent_dairy))
+            .into_iter()
+            .map(|product| product.name)
+            .collect::<Vec<_>>(),
+        vec!["Cheese".to_owned(), "Soy milk".to_owned(),],
+    );
+
+    assert_eq!(
+        request!(env, products_by_product_parent_id_direct(parent_dairy))
+            .into_iter()
+            .map(|product| product.name)
+            .collect::<Vec<_>>(),
+        vec!["Cheese".to_owned()],
+    );
+}