54 lines
1.5 KiB
Rust
54 lines
1.5 KiB
Rust
use domain::entities::{Job, JobStatus, JobType};
|
|
use domain::errors::DomainError;
|
|
use domain::value_objects::StructuredData;
|
|
|
|
#[test]
|
|
fn job_lifecycle_success() {
|
|
let mut job = Job::new(JobType::ExtractMetadata, 5, StructuredData::new());
|
|
assert_eq!(job.status, JobStatus::Queued);
|
|
|
|
job.start().unwrap();
|
|
assert_eq!(job.status, JobStatus::Processing);
|
|
assert!(job.started_at.is_some());
|
|
|
|
job.complete(StructuredData::new());
|
|
assert_eq!(job.status, JobStatus::Completed);
|
|
assert!(job.result_data.is_some());
|
|
assert!(job.completed_at.is_some());
|
|
}
|
|
|
|
#[test]
|
|
fn retry_on_failure() {
|
|
let mut job = Job::new(JobType::ScanDirectory, 1, StructuredData::new());
|
|
job.start().unwrap();
|
|
|
|
job.fail("timeout");
|
|
assert_eq!(job.status, JobStatus::Queued);
|
|
assert_eq!(job.retry_count, 1);
|
|
assert!(job.can_retry());
|
|
assert!(job.started_at.is_none());
|
|
}
|
|
|
|
#[test]
|
|
fn fails_after_max_retries() {
|
|
let mut job = Job::new(JobType::ScanDirectory, 1, StructuredData::new());
|
|
job.max_retries = 2;
|
|
|
|
job.start().unwrap();
|
|
job.fail("err1");
|
|
assert_eq!(job.status, JobStatus::Queued);
|
|
|
|
job.start().unwrap();
|
|
job.fail("err2");
|
|
assert_eq!(job.status, JobStatus::Failed);
|
|
assert!(!job.can_retry());
|
|
}
|
|
|
|
#[test]
|
|
fn cannot_start_from_processing() {
|
|
let mut job = Job::new(JobType::ScanDirectory, 1, StructuredData::new());
|
|
job.start().unwrap();
|
|
let result = job.start();
|
|
assert!(matches!(result, Err(DomainError::Conflict(_))));
|
|
}
|