use std::collections::HashMap;
use serde_json::json;
use crate::feature_flags::{
FeatureFlag, FeatureFlagCondition, FeatureFlagFilters, MultivariateFilter, MultivariateVariant,
};
use crate::local_evaluation::LocalEvaluationResponse;
fn flag(
key: &str,
rollout_percentage: f64,
multivariate: Option<MultivariateFilter>,
payloads: &[(&str, serde_json::Value)],
) -> FeatureFlag {
FeatureFlag {
key: key.into(),
active: true,
has_experiment: None,
filters: FeatureFlagFilters {
groups: vec![FeatureFlagCondition {
properties: vec![],
rollout_percentage: Some(rollout_percentage),
variant: None,
aggregation_group_type_index: None,
}],
multivariate,
payloads: payloads
.iter()
.map(|(key, payload)| ((*key).to_string(), payload.clone()))
.collect(),
aggregation_group_type_index: None,
early_exit: false,
},
}
}
pub(super) fn payload_definitions() -> LocalEvaluationResponse {
let variants = MultivariateFilter {
variants: vec![
MultivariateVariant {
key: "test".into(),
rollout_percentage: 100.0,
},
MultivariateVariant {
key: "control".into(),
rollout_percentage: 0.0,
},
],
};
LocalEvaluationResponse {
flags: vec![
flag(
"json-string-payload",
100.0,
None,
&[("true", json!("{\"color\": \"blue\"}"))],
),
flag(
"parsed-payload",
100.0,
None,
&[("true", json!({"color": "blue"}))],
),
flag(
"quoted-string-payload",
100.0,
None,
&[("true", json!("\"just text\""))],
),
flag(
"undecodable-payload",
100.0,
None,
&[("true", json!("not json"))],
),
flag(
"variant-payload",
100.0,
Some(variants),
&[
("test", json!("{\"tier\": 2}")),
("control", json!("{\"tier\": 1}")),
],
),
flag("no-payload", 100.0, None, &[]),
flag(
"disabled-with-payload",
0.0,
None,
&[("true", json!("{\"unreachable\": true}"))],
),
],
group_type_mapping: HashMap::new(),
cohorts: HashMap::new(),
minimal_flag_called_events: false,
}
}