Files

36 lines
1.2 KiB
Rust

use application::processing::{StartJobCommand, StartJobHandler};
use application::testing::InMemoryJobRepository;
use domain::entities::{Job, JobStatus, JobType};
use domain::errors::DomainError;
use domain::ports::JobRepository;
use domain::value_objects::StructuredData;
use std::sync::Arc;
#[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(_))));
}