use std::collections::HashSet;
use crate::core::config::e2e::CallOverride;
use crate::e2e::config::{CallConfig, E2eConfig};
pub(super) fn effective_enum_fields(
e2e_config: &E2eConfig,
call_config: &CallConfig,
call_overrides: Option<&CallOverride>,
) -> HashSet<String> {
let mut fields: HashSet<String> = e2e_config.effective_fields_enum(call_config).clone();
if let Some(overrides) = call_overrides {
fields.extend(overrides.enum_fields.keys().cloned());
fields.extend(overrides.assert_enum_fields.keys().cloned());
}
fields
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn merges_call_level_and_override_enum_fields() {
let e2e_config = E2eConfig {
fields_enum: ["shared".to_string()].into_iter().collect(),
..E2eConfig::default()
};
let call_config = CallConfig::default();
let overrides = CallOverride {
enum_fields: [("kind".to_string(), "Kind".to_string())].into_iter().collect(),
assert_enum_fields: [("status".to_string(), "Status".to_string())].into_iter().collect(),
..CallOverride::default()
};
let merged = effective_enum_fields(&e2e_config, &call_config, Some(&overrides));
assert_eq!(
merged,
["shared".to_string(), "kind".to_string(), "status".to_string()]
.into_iter()
.collect()
);
}
#[test]
fn no_overrides_keeps_only_the_call_level_set() {
let e2e_config = E2eConfig {
fields_enum: ["shared".to_string()].into_iter().collect(),
..E2eConfig::default()
};
let call_config = CallConfig::default();
let merged = effective_enum_fields(&e2e_config, &call_config, None);
assert_eq!(merged, ["shared".to_string()].into_iter().collect());
}
}