use serde::Deserialize; mod commons; #[cfg(test)] mod test { use rstest::rstest; use test_context::test_context; use crate::commons::TestContext; use crate::ObjectValue; #[test_context(TestContext)] #[rstest] #[tokio::test] async fn should_return_enabled_default_when_fail_to_call_growthbook(ctx: &mut TestContext) -> Result<(), Box> { let result = ctx.growthbook.feature_result("flag-not-exists", None); assert!(!result.on); assert!(result.value.is_null()); assert!(result.experiment_result.is_none()); Ok(()) } #[test_context(TestContext)] #[rstest] #[tokio::test] async fn should_return_value(ctx: &mut TestContext) -> Result<(), Box> { let result = ctx.growthbook.feature_result("object-flag", None); assert!(result.on); assert!(result.value.is_object()); let object = result.value_as::()?; assert_eq!("potato", object.a); assert_eq!("tomato", object.b); Ok(()) } } #[derive(Deserialize)] struct ObjectValue { a: String, b: String, }