Files
k-photos/crates/application/tests/processing/commands/configure_pipeline.rs

63 lines
2.1 KiB
Rust

use application::processing::{
ConfigurePipelineCommand, ConfigurePipelineHandler, PipelineStepConfig,
};
use application::testing::{InMemoryPipelineRepository, InMemoryPluginRepository};
use domain::entities::{Plugin, PluginType};
use domain::errors::DomainError;
use domain::ports::PluginRepository;
use domain::value_objects::{StructuredData, SystemId};
use std::sync::Arc;
#[tokio::test]
async fn creates_pipeline() {
let pipeline_repo = Arc::new(InMemoryPipelineRepository::new());
let plugin_repo = Arc::new(InMemoryPluginRepository::new());
let p1 = Plugin::new("EXIF", PluginType::MediaProcessor);
let p2 = Plugin::new("Thumb", PluginType::MediaProcessor);
let p1_id = p1.plugin_id;
let p2_id = p2.plugin_id;
plugin_repo.save(&p1).await.unwrap();
plugin_repo.save(&p2).await.unwrap();
let handler = ConfigurePipelineHandler::new(pipeline_repo.clone(), plugin_repo.clone());
let pipeline = handler
.execute(ConfigurePipelineCommand {
trigger_event: "asset.ingested".into(),
steps: vec![
PipelineStepConfig {
plugin_id: p1_id,
config: StructuredData::new(),
},
PipelineStepConfig {
plugin_id: p2_id,
config: StructuredData::new(),
},
],
})
.await
.unwrap();
assert_eq!(pipeline.trigger_event, "asset.ingested");
assert_eq!(pipeline.steps.len(), 2);
}
#[tokio::test]
async fn rejects_nonexistent_plugin() {
let pipeline_repo = Arc::new(InMemoryPipelineRepository::new());
let plugin_repo = Arc::new(InMemoryPluginRepository::new());
let handler = ConfigurePipelineHandler::new(pipeline_repo.clone(), plugin_repo.clone());
let result = handler
.execute(ConfigurePipelineCommand {
trigger_event: "asset.ingested".into(),
steps: vec![PipelineStepConfig {
plugin_id: SystemId::new(),
config: StructuredData::new(),
}],
})
.await;
assert!(matches!(result, Err(DomainError::NotFound(_))));
}