Files
k-photos/crates/application/tests/sidecar/commands/export_sidecar.rs

58 lines
2.1 KiB
Rust

use application::sidecar::{ExportSidecarCommand, ExportSidecarHandler};
use application::testing::{
InMemoryAssetMetadataRepository, InMemorySidecarRepository, InMemorySidecarWriter,
};
use domain::catalog::entities::{AssetMetadata, MetadataSource};
use domain::entities::SyncStatus;
use domain::ports::SidecarRepository;
use domain::value_objects::{MetadataValue, StructuredData, SystemId};
use std::sync::Arc;
#[tokio::test]
async fn exports_sidecar_marks_in_sync() {
let meta_repo = Arc::new(InMemoryAssetMetadataRepository::new());
let sidecar_repo = Arc::new(InMemorySidecarRepository::new());
let writer = Arc::new(InMemorySidecarWriter::new());
let asset_id = SystemId::new();
let mut data = StructuredData::new();
data.insert("title", MetadataValue::String("Beach".into()));
let metadata = AssetMetadata::new(asset_id, MetadataSource::UserEdited, data);
use domain::ports::AssetMetadataRepository;
meta_repo.save(&metadata).await.unwrap();
let handler = ExportSidecarHandler::new(meta_repo, sidecar_repo.clone(), writer.clone());
let record = handler
.execute(ExportSidecarCommand { asset_id })
.await
.unwrap();
assert_eq!(record.sync_status, SyncStatus::InSync);
assert!(record.last_known_file_hash.is_some());
let written = writer.get(&record.sidecar_storage_path).await;
assert!(written.is_some());
assert_eq!(written.unwrap().get_string("title"), Some("Beach"));
}
#[tokio::test]
async fn creates_new_record_if_none_exists() {
let meta_repo = Arc::new(InMemoryAssetMetadataRepository::new());
let sidecar_repo = Arc::new(InMemorySidecarRepository::new());
let writer = Arc::new(InMemorySidecarWriter::new());
let asset_id = SystemId::new();
let handler = ExportSidecarHandler::new(meta_repo, sidecar_repo.clone(), writer);
let record = handler
.execute(ExportSidecarCommand { asset_id })
.await
.unwrap();
assert_eq!(record.asset_id, asset_id);
assert_eq!(record.sync_status, SyncStatus::InSync);
let saved = sidecar_repo.find_by_asset(&asset_id).await.unwrap();
assert!(saved.is_some());
}