changes
All checks were successful
CI / ci (push) Successful in 19m38s

This commit is contained in:
2026-08-26 20:55:30 +02:00
parent a557c183e9
commit 23d052278a
523 changed files with 24448 additions and 2005 deletions

View 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());
}