50 lines
2.1 KiB
Rust
50 lines
2.1 KiB
Rust
use std::sync::Arc;
|
|
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};
|
|
|
|
#[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());
|
|
}
|