// file: crates/ksp-config-lib/unit_tests/profile.rs // version: 2 #[test] fn fixture_default_profile_resolves_globals_profile_and_provenance() { let engine = fixture_engine(); let file_id = crate::ConfigFileId::new(crate::FILE_ID_STD_LOGGING); assert!(engine.is_ok(), "fixture Config engine should be constructible: {engine:?}"); assert!(file_id.is_ok(), "logging file_id should be valid: {file_id:?}"); if let (std::result::Result::Ok(engine), std::result::Result::Ok(file_id)) = (engine, file_id) { let document = engine.load_validated_document(&file_id); assert!(document.is_ok(), "committed Logging document should validate: {document:?}"); let resolved = engine.load_resolved_profile(&file_id, std::option::Option::None); assert!(resolved.is_ok(), "default profile should resolve: {resolved:?}"); if let (std::result::Result::Ok(document), std::result::Result::Ok(resolved)) = (document, resolved) { let default_profile = document.value().get("default_profile").and_then(serde_json::Value::as_str); assert_eq!(default_profile, std::option::Option::Some(resolved.profile_id())); assert_eq!(resolved.selection_source(), super::ConfigProfileSelectionSource::DefaultProfile); assert_eq!(resolved.origin("logs_directory"), std::option::Option::Some(super::ConfigValueOrigin::Global)); assert_eq!(resolved.origin("default_filter"), std::option::Option::Some(super::ConfigValueOrigin::Profile)); assert_eq!( resolved.profile().get("default_filter").and_then(serde_json::Value::as_str), resolved.effective().get("default_filter").and_then(serde_json::Value::as_str), ); assert!(!resolved.effective().contains_key("default_profile")); assert!(!resolved.effective().contains_key("profiles")); } } } #[test] fn explicit_profile_selection_is_distinct_from_default_selection() { let engine = fixture_engine(); let file_id = crate::ConfigFileId::new(crate::FILE_ID_STD_LOGGING); assert!(engine.is_ok(), "fixture Config engine should be constructible: {engine:?}"); assert!(file_id.is_ok(), "logging file_id should be valid: {file_id:?}"); if let (std::result::Result::Ok(engine), std::result::Result::Ok(file_id)) = (engine, file_id) { let document = engine.load_validated_document(&file_id); assert!(document.is_ok(), "committed Logging document should validate: {document:?}"); if let std::result::Result::Ok(document) = document { let profile_id = document.value().get("default_profile").and_then(serde_json::Value::as_str); assert!(profile_id.is_some(), "validated Logging document should expose default_profile"); if let std::option::Option::Some(profile_id) = profile_id { let resolved = engine.load_resolved_profile(&file_id, std::option::Option::Some(profile_id)); assert!(resolved.is_ok(), "explicit committed profile should resolve: {resolved:?}"); if let std::result::Result::Ok(resolved) = resolved { assert_eq!(resolved.profile_id(), profile_id); assert_eq!(resolved.selection_source(), super::ConfigProfileSelectionSource::Explicit); } } } } } #[test] fn unknown_explicit_profile_has_distinct_error_code() { let engine = fixture_engine(); let file_id = crate::ConfigFileId::new(crate::FILE_ID_STD_LOGGING); assert!(engine.is_ok(), "fixture Config engine should be constructible: {engine:?}"); assert!(file_id.is_ok(), "logging file_id should be valid: {file_id:?}"); if let (std::result::Result::Ok(engine), std::result::Result::Ok(file_id)) = (engine, file_id) { let result = engine.load_resolved_profile(&file_id, std::option::Option::Some("does-not-exist")); assert!(result.is_err(), "unknown explicit profile must be rejected: {result:?}"); if let std::result::Result::Err(error) = result { assert_eq!(error.code(), crate::ERROR_CODE_PROFILE_NOT_FOUND); } } } fn fixture_engine() -> ksp_core_lib::Result { let workspace = std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../.."); let fixture_root = std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("unit_tests/fixtures"); let bootstrap = crate::ConfigBootstrapOptions::from_paths(fixture_root, workspace.join("config/schemas")); let bootstrap = match bootstrap { std::result::Result::Ok(value) => value, std::result::Result::Err(error) => return std::result::Result::Err(error), }; let registry = crate::ConfigFileRegistry::defaults(); return match registry { std::result::Result::Ok(value) => std::result::Result::Ok(crate::ConfigDocumentEngine::new(bootstrap, value)), std::result::Result::Err(error) => std::result::Result::Err(error), }; }