Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 12 additions & 39 deletions crates/experimentation_platform/src/api/experiments/helpers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -187,35 +187,9 @@ fn validate_keys_from_source(
variant_override: &Overrides,
source: &Map<String, Value>,
) -> bool {
for (override_key, value) in variant_override.iter() {
if let Some(val) = source.get(override_key) {
if val != value {
return false;
}
} else {
return false;
}
}
true
}

fn validate_variants_delete_override_value(
delete_variant_overrides: &Vec<Overrides>,
resolved_config: &Map<String, Value>,
) -> bool {
for override_ in delete_variant_overrides {
if !validate_keys_from_source(override_, resolved_config) {
return false;
}
}
true
}

fn validate_variants_control_override_value(
control_variant_overrides: &Overrides,
current_context_overrides: &Map<String, Value>,
) -> bool {
validate_keys_from_source(control_variant_overrides, current_context_overrides)
variant_override.iter().all(|(override_key, value)| {
source.get(override_key).is_some_and(|val| val == value)
})
}

pub async fn validate_delete_experiment_variants(
Expand Down Expand Up @@ -270,27 +244,26 @@ pub async fn validate_delete_experiment_variants(
));
}

if !(validate_variants_delete_override_value(
&other_variants_overrides,
&partial_resolved_config,
)) {
if !(other_variants_overrides
.iter()
.all(|override_| validate_keys_from_source(override_, &partial_resolved_config)))
{
log::error!(
"validate_delete_experiment: Inconsistent value for variant's overrides delete keys"
);
return Err(bad_argument!(
"Inconsistent value for variant's overrides delete keys"
"Incorrect value for experimental variant - it should be the same as the current resolved config with this override removed"
));
}

if !(validate_variants_control_override_value(
&control_variant_override,
&current_context.override_,
)) {
// validate the variants control override values
if !(validate_keys_from_source(&control_variant_override, &current_context.override_))
{
log::error!(
"validate_delete_experiment: Inconsistent value for variant's overrides keys"
);
return Err(bad_argument!(
"Inconsistent value for variant's overrides keys"
"Incorrect value for control variant - it should be the same as the current override's key values"
));
}
Ok(())
Expand Down
19 changes: 19 additions & 0 deletions crates/frontend/src/app.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ use crate::pages::{
default_config::{CreateDefaultConfig, DefaultConfig, EditDefaultConfig},
default_config_list::DefaultConfigList,
experiment::ExperimentPage,
experiment_page::{CreateExperiment, EditExperiment},
home::Home,
organisations::Organisations,
override_page::{CreateOverride, EditOverride, OverridePage},
Expand Down Expand Up @@ -246,6 +247,15 @@ pub fn App(app_envs: Envs) -> impl IntoView {
path=join_route_parts([RouteSegment::Experiments])
view=ExperimentList
/>
<Route
ssr=SsrMode::Async
path=join_route_parts([
RouteSegment::Experiments,
RouteSegment::Action,
RouteSegment::Create,
])
view=CreateExperiment
/>
<Route
ssr=SsrMode::Async
path=join_route_parts([
Expand All @@ -254,6 +264,15 @@ pub fn App(app_envs: Envs) -> impl IntoView {
])
view=ExperimentPage
/>
<Route
ssr=SsrMode::Async
path=join_route_parts([
RoutePart::from(RouteSegment::Experiments),
RoutePart::from("id"),
RoutePart::from(RouteSegment::Edit),
])
view=EditExperiment
/>

<Route
ssr=SsrMode::Async
Expand Down
1 change: 1 addition & 0 deletions crates/frontend/src/components.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ pub mod experiment;
pub mod experiment_action_form;
pub mod experiment_conclude_form;
pub mod experiment_form;
pub mod experiment_form_page;
pub mod experiment_group_form;
pub mod experiment_ramp_form;
pub mod form;
Expand Down
Loading
Loading