36 lines
1.2 KiB
Rust
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(_))));
|
|
}
|