config/src/test_support.rs
80 lines
//! Test-only helpers exposed for cross-crate integration tests.//!//! Production code should not depend on this module.use crate::CloudConfigBundle;use crate::CloudConfigBundleLoader;use crate::CloudConfigFragment;use crate::CloudRequirementsFragment;#[derive(Debug, Clone, Default)]pub struct CloudConfigBundleFixture { bundle: CloudConfigBundle,}impl CloudConfigBundleFixture { pub fn enterprise_requirement(contents: impl Into<String>) -> Self { Self::default().add_enterprise_requirement(contents) } pub fn enterprise_config(contents: impl Into<String>) -> Self { Self::default().add_enterprise_config(contents) } pub fn loader_with_enterprise_requirement( contents: impl Into<String>, ) -> CloudConfigBundleLoader { Self::enterprise_requirement(contents).into_loader() } pub fn loader_with_enterprise_config(contents: impl Into<String>) -> CloudConfigBundleLoader { Self::enterprise_config(contents).into_loader() } pub fn add_enterprise_requirement(mut self, contents: impl Into<String>) -> Self { let index = self.bundle.requirements_toml.enterprise_managed.len() + 1; self.bundle .requirements_toml .enterprise_managed .push(CloudRequirementsFragment { id: format!("req_{index}"), name: if index == 1 { "Base requirements".to_string() } else { format!("Requirements {index}") }, contents: contents.into(), }); self } pub fn add_enterprise_config(mut self, contents: impl Into<String>) -> Self { let index = self.bundle.config_toml.enterprise_managed.len() + 1; self.bundle .config_toml .enterprise_managed .push(CloudConfigFragment { id: format!("cfg_{index}"), name: if index == 1 { "Base config".to_string() } else { format!("Config {index}") }, contents: contents.into(), }); self } pub fn into_bundle(self) -> CloudConfigBundle { self.bundle } pub fn into_loader(self) -> CloudConfigBundleLoader { let bundle = self.into_bundle(); CloudConfigBundleLoader::new(async move { Ok(Some(bundle)) }) }}#[cfg(test)]#[path = "test_support_tests.rs"]mod tests;