Files
k-photos/crates/domain/tests/services/metadata_resolver.rs

46 lines
1.7 KiB
Rust

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());
}