app: add sidecar sync commands (export, detect, import, resolve, full export/import)

This commit is contained in:
2026-05-31 05:29:03 +02:00
parent d1394ce7bb
commit 4b31a0f74b
43 changed files with 1685 additions and 6 deletions

View File

@@ -0,0 +1,35 @@
use std::sync::Arc;
use application::testing::InMemoryJobRepository;
use application::processing::{StartJobCommand, StartJobHandler};
use domain::entities::{Job, JobStatus, JobType};
use domain::errors::DomainError;
use domain::ports::JobRepository;
use domain::value_objects::StructuredData;
#[tokio::test]
async fn starts_queued_job() {
let job_repo = Arc::new(InMemoryJobRepository::new());
let job = Job::new(JobType::ExtractMetadata, 5, StructuredData::new());
let job_id = job.job_id;
job_repo.save(&job).await.unwrap();
let handler = StartJobHandler::new(job_repo.clone());
let result = handler.execute(StartJobCommand { job_id }).await.unwrap();
assert_eq!(result.status, JobStatus::Processing);
assert!(result.started_at.is_some());
}
#[tokio::test]
async fn rejects_non_queued_job() {
let job_repo = Arc::new(InMemoryJobRepository::new());
let mut job = Job::new(JobType::ExtractMetadata, 5, StructuredData::new());
job.start().unwrap(); // now Processing
let job_id = job.job_id;
job_repo.save(&job).await.unwrap();
let handler = StartJobHandler::new(job_repo.clone());
let result = handler.execute(StartJobCommand { job_id }).await;
assert!(matches!(result, Err(DomainError::Conflict(_))));
}