aboutsummaryrefslogtreecommitdiffstats
path: root/crates/rocie-server/tests/product_parents
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2025-11-28 16:30:02 +0100
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2025-11-28 16:30:02 +0100
commita62ab5c6dacaddb67931d7ac160bc7faaa707737 (patch)
treea35fa3540fbb89f575ab1ea72f9b23ace399e01c /crates/rocie-server/tests/product_parents
parentchore(crates/rocie-client): Re-generate (diff)
downloadserver-a62ab5c6dacaddb67931d7ac160bc7faaa707737.zip
feat(crates/rocie-server): Get closer to feature parity between rocie and grocy
Diffstat (limited to 'crates/rocie-server/tests/product_parents')
-rw-r--r--crates/rocie-server/tests/product_parents/mod.rs2
-rw-r--r--crates/rocie-server/tests/product_parents/query.rs144
-rw-r--r--crates/rocie-server/tests/product_parents/register.rs84
3 files changed, 230 insertions, 0 deletions
diff --git a/crates/rocie-server/tests/product_parents/mod.rs b/crates/rocie-server/tests/product_parents/mod.rs
new file mode 100644
index 0000000..46ec0ca
--- /dev/null
+++ b/crates/rocie-server/tests/product_parents/mod.rs
@@ -0,0 +1,2 @@
+mod register;
+mod query;
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()],
+ );
+}
diff --git a/crates/rocie-server/tests/product_parents/register.rs b/crates/rocie-server/tests/product_parents/register.rs
new file mode 100644
index 0000000..c84ffea
--- /dev/null
+++ b/crates/rocie-server/tests/product_parents/register.rs
@@ -0,0 +1,84 @@
+use rocie_client::{
+ apis::{
+ api_get_product_api::product_by_id, 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_register_roundtrip() {
+ 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("Milk replacment products".to_owned()),
+ name: "Milk replacements".to_owned(),
+ parent: Some(parent_dairy),
+ })
+ );
+
+ let unit_property = request!(
+ env,
+ register_unit_property(UnitPropertyStub {
+ description: Some("The total volume of a product".to_owned()),
+ name: "Volume".to_owned()
+ })
+ );
+
+ let product_soy_milk = request!(
+ env,
+ register_product(ProductStub {
+ description: Some("A soy based alternative to milk".to_owned()),
+ name: "Soy drink".to_owned(),
+ parent: Some(parent_dairy_milk),
+ unit_property,
+ })
+ );
+ let product_oat_milk = request!(
+ env,
+ register_product(ProductStub {
+ description: Some("A oat based alternative to milk".to_owned()),
+ name: "Oat drink".to_owned(),
+ parent: Some(parent_dairy_milk),
+ unit_property,
+ })
+ );
+
+ let product_vegan_cheese = request!(
+ env,
+ register_product(ProductStub {
+ description: None,
+ name: "Vegan cheese".to_owned(),
+ parent: Some(parent_dairy),
+ unit_property,
+ })
+ );
+
+ for product in [product_soy_milk, product_oat_milk] {
+ let product = request!(env, product_by_id(product));
+
+ assert_eq!(product.parent, Some(parent_dairy_milk));
+ }
+
+ {
+ let product = request!(env, product_by_id(product_vegan_cheese));
+
+ assert_eq!(product.parent, Some(parent_dairy));
+ }
+}