use domain::entities::{AssetMetadata, MetadataSource}; use domain::services::metadata_resolver::{get_field_source, resolve_metadata}; use domain::value_objects::{MetadataValue, StructuredData, SystemId}; fn layer(source: MetadataSource, entries: &[(&str, &str)]) -> AssetMetadata { let mut data = StructuredData::new(); for (k, v) in entries { data.insert(*k, MetadataValue::String(v.to_string())); } AssetMetadata::new(SystemId::new(), source, data) } #[test] fn user_edited_overrides_exif() { let exif = layer(MetadataSource::ExifExtracted, &[("title", "DSC_0001")]); let user = layer(MetadataSource::UserEdited, &[("title", "Sunset")]); let result = resolve_metadata(&[exif, user]); assert_eq!(result.get_string("title"), Some("Sunset")); } #[test] fn ai_overrides_exif_but_not_user() { let exif = layer( MetadataSource::ExifExtracted, &[("desc", "raw"), ("camera", "Nikon")], ); let ai = layer(MetadataSource::AiGenerated, &[("desc", "ai-desc")]); let user = layer(MetadataSource::UserEdited, &[("desc", "user-desc")]); let result = resolve_metadata(&[exif, ai, user]); assert_eq!(result.get_string("desc"), Some("user-desc")); assert_eq!(result.get_string("camera"), Some("Nikon")); } #[test] fn get_field_source_returns_highest_priority() { let exif = layer(MetadataSource::ExifExtracted, &[("iso", "100")]); let ai = layer(MetadataSource::AiGenerated, &[("iso", "200")]); let layers = [exif, ai]; let (src, val) = get_field_source(&layers, "iso").unwrap(); assert_eq!(src, MetadataSource::AiGenerated); assert_eq!(val, &MetadataValue::String("200".to_string())); } #[test] fn empty_layers_returns_empty() { let result = resolve_metadata(&[]); assert!(result.is_empty()); }