dpm-engine 0.1.0

Command/query execution engine for DPM
Documentation
use super::*;

#[test]
fn blocking_and_rejection_keep_the_start_and_drop_the_rejected_submission() {
    let (mut plan, a, _) = pair(DependencyKind::FinishStart, 0.0, DependencyPolicy::Hard);
    let reviewer = ActorId::human("reviewer");
    ok(&mut plan, &worker(), Command::Claim { work: a }, 3);
    ok(&mut plan, &worker(), start(a), 5);
    let block = Command::Block {
        work: a,
        reason: "vendor".into(),
    };
    ok(&mut plan, &worker(), block, 6);
    let report = Command::ReportProgress {
        work: a,
        percent: 40,
        note: None,
    };
    ok(&mut plan, &worker(), report, 6);
    ok(&mut plan, &worker(), Command::Unblock { work: a }, 7);
    let resumed = &plan.work_items[&a];
    assert_eq!(
        resumed.execution.status,
        WorkStatus::InProgress,
        "started work resumes started"
    );
    assert_eq!(resumed.execution.events.started_at, Some(t(5)));
    ok(&mut plan, &worker(), submit(a), 8);
    let reject = Command::Reject {
        work: a,
        reason: "missing test".into(),
    };
    ok(&mut plan, &reviewer, reject, 9);
    assert_eq!(plan.work_items[&a].execution.events.submitted_at, None);
    ok(&mut plan, &worker(), submit(a), 10);
    assert_eq!(
        plan.work_items[&a].execution.events.submitted_at,
        Some(t(10))
    );
}