75
crates/domain/tests/job/job_test.rs
Normal file
75
crates/domain/tests/job/job_test.rs
Normal file
@@ -0,0 +1,75 @@
|
||||
use domain::entry::MoodEntryId;
|
||||
use domain::job::{Job, JobKind, JobStatus, JobSubject};
|
||||
|
||||
fn a_job() -> Job {
|
||||
Job::pending(
|
||||
JobKind::BackfillRecordingIdentity,
|
||||
JobSubject::Entry(MoodEntryId::generate()),
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn a_new_job_is_waiting_and_has_never_been_tried() {
|
||||
let job = a_job();
|
||||
|
||||
assert_eq!(job.status(), JobStatus::Pending);
|
||||
assert_eq!(job.attempts(), 0);
|
||||
assert!(job.last_error().is_none());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn a_job_with_attempts_left_is_worth_trying_again() {
|
||||
let mut job = a_job();
|
||||
|
||||
job.attempted();
|
||||
|
||||
assert_eq!(job.attempts(), 1);
|
||||
assert!(job.is_worth_another_attempt(3));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn a_job_that_has_used_every_attempt_is_not_tried_again() {
|
||||
let mut job = a_job();
|
||||
|
||||
for _ in 0..3 {
|
||||
job.attempted();
|
||||
}
|
||||
|
||||
assert_eq!(job.attempts(), 3);
|
||||
assert!(!job.is_worth_another_attempt(3));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn every_status_survives_a_round_trip_through_its_name() {
|
||||
for status in [JobStatus::Pending, JobStatus::Running, JobStatus::Exhausted] {
|
||||
assert_eq!(JobStatus::from_name(status.name()), Some(status));
|
||||
}
|
||||
|
||||
assert_eq!(JobStatus::from_name("halfway"), None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn every_kind_survives_a_round_trip_through_its_name() {
|
||||
for kind in JobKind::ALL {
|
||||
assert_eq!(JobKind::from_name(kind.name()), Some(kind));
|
||||
}
|
||||
|
||||
assert_eq!(JobKind::from_name("summon-rain"), None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn a_subject_names_the_thing_the_work_is_about() {
|
||||
let entry_id = MoodEntryId::generate();
|
||||
let subject = JobSubject::Entry(entry_id.clone());
|
||||
|
||||
assert_eq!(subject.key(), entry_id.value().to_string());
|
||||
assert_eq!(
|
||||
JobSubject::from_key(subject.key().as_str()),
|
||||
Some(JobSubject::Entry(entry_id))
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn a_subject_that_is_not_an_identity_names_nothing() {
|
||||
assert!(JobSubject::from_key("not-a-uuid").is_none());
|
||||
}
|
||||
Reference in New Issue
Block a user