Skip to content

Commit

Permalink
Merge pull request #1167 from rainlanguage/2025-01-16-optional-scenar…
Browse files Browse the repository at this point in the history
…io-bindings

Make scenario bindings optional in yaml parse method
  • Loading branch information
findolor authored Jan 17, 2025
2 parents 6c55f0d + 7f88814 commit 08a05c5
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 31 deletions.
43 changes: 13 additions & 30 deletions crates/settings/src/scenario.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,33 +64,27 @@ impl Scenario {
scenario_yaml: &StrictYaml,
context: Option<&Context>,
) -> Result<(), YamlError> {
let current_bindings = require_hash(
scenario_yaml,
Some("bindings"),
Some(format!("bindings map missing in scenario: {scenario_key}")),
)?
.iter()
.map(|(binding_key, binding_value)| {
let binding_key = binding_key.as_str().unwrap_or_default();
let binding_value = require_string(
let mut current_bindings = HashMap::new();

if let Some(bindings) = optional_hash(scenario_yaml, "bindings") {
for (binding_key, binding_value) in bindings {
let binding_key = binding_key.as_str().unwrap_or_default();
let binding_value = require_string(
binding_value,
None,
Some(format!(
"binding value must be a string for key: {binding_key} in scenario: {scenario_key}",
)),
)?;

let interpolated_value = match context {
Some(context) => context.interpolate(&binding_value)?,
None => binding_value.to_string(),
};
let interpolated_value = match context {
Some(context) => context.interpolate(&binding_value)?,
None => binding_value.to_string(),
};

Ok((
binding_key.to_string(),
interpolated_value,
))
})
.collect::<Result<HashMap<_, _>, YamlError>>()?;
current_bindings.insert(binding_key.to_string(), interpolated_value);
}
}

let mut bindings = parent_scenario
.bindings
Expand Down Expand Up @@ -657,17 +651,6 @@ test: test

let yaml = r#"
scenarios:
scenario1:
test: test
"#;
let error = Scenario::parse_all_from_yaml(vec![get_document(yaml)], None).unwrap_err();
assert_eq!(
error,
YamlError::ParseError("bindings map missing in scenario: scenario1".to_string())
);

let yaml = r#"
scenarios:
scenario1:
bindings:
key1:
Expand Down
4 changes: 3 additions & 1 deletion crates/settings/src/yaml/dotrain.rs
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,8 @@ mod tests {
scenario2:
bindings:
key2: value2
scenarios:
runs: 10
deployments:
deployment1:
order: order1
Expand Down Expand Up @@ -301,7 +303,7 @@ mod tests {
);

let scenario_keys = dotrain_yaml.get_scenario_keys().unwrap();
assert_eq!(scenario_keys.len(), 2);
assert_eq!(scenario_keys.len(), 3);
let scenario1 = dotrain_yaml.get_scenario("scenario1").unwrap();
assert_eq!(scenario1.bindings.len(), 1);
assert_eq!(scenario1.bindings.get("key1").unwrap(), "value1");
Expand Down

0 comments on commit 08a05c5

Please sign in to comment.