acts-next 0.15.3

a fast, tiny, extensiable workflow engine
Documentation
use crate::{
    scheduler::{
        tests::{create_proc, create_proc_signal},
        NodeTree, TaskState,
    },
    utils, Workflow,
};

#[tokio::test]
async fn sch_proc_send() {
    let mut workflow = Workflow::default().with_step(|step| step.with_id("step1"));
    let id = utils::longid();
    let (proc, rt, ..) = create_proc_signal::<()>(&mut workflow, &id);
    rt.launch(&proc);
    rt.scher().next().await;

    assert!(rt.proc(&id).is_some())
}

#[tokio::test]
async fn sch_proc_state() {
    let mut workflow = Workflow::default();

    let id = utils::longid();
    let (proc, ..) = create_proc(&mut workflow, &id);

    proc.set_state(TaskState::Skipped);
    assert_eq!(proc.state(), TaskState::Skipped)
}

#[tokio::test]
async fn sch_proc_cost() {
    let mut workflow = Workflow::default();
    let id = utils::longid();
    let (proc, ..) = create_proc(&mut workflow, &id);

    proc.set_state(TaskState::Completed);
    proc.set_start_time(100);
    proc.set_end_time(120);

    assert_eq!(proc.cost(), 20)
}

#[tokio::test]
async fn sch_proc_time() {
    let mut workflow = Workflow::new().with_step(|step| step.with_name("step1"));
    let (proc, scher, .., tx, _) = create_proc_signal::<()>(&mut workflow, &utils::longid());
    scher.launch(&proc);
    tx.recv().await;

    assert!(proc.start_time() > 0);
    assert!(proc.end_time() > 0)
}

#[tokio::test]
async fn sch_proc_task() {
    let mut workflow = Workflow::new().with_step(|step| step.with_name("step1"));

    let pid = utils::longid();
    let tr = NodeTree::build(&mut workflow).unwrap();
    let (proc, ..) = create_proc(&mut workflow, &pid);

    let node = tr.root.as_ref().unwrap();
    let task = proc.create_task(node, None);
    assert!(proc.task(&task.id).is_some())
}