yao 0.1.4

a fast, tiny, extensiable workflow engine
Documentation
use crate::{
    sch::{event::EventData, Proc, Scheduler},
    TaskState, Workflow,
};
use std::sync::Arc;

#[tokio::test]
async fn task_state() {
    let mut workflow = create_workflow();
    let (task, _) = create_proc(&mut workflow, "job1");
    assert!(task.state() == TaskState::None);
}

#[tokio::test]
async fn task_start() {
    let mut workflow = create_workflow();
    let (proc, scher) = create_proc(&mut workflow, "job1");

    proc.start();
    scher.on_proc(|proc: &Proc, _data: &EventData| {
        assert_eq!(proc.state(), TaskState::Running);
    });
}

fn create_proc(workflow: &mut Workflow, id: &str) -> (Proc, Arc<Scheduler>) {
    let scher = Scheduler::new();

    workflow.set_biz_id(id);
    let task = scher.create_raw_proc(workflow);

    (task.clone(), Arc::new(scher))
}

fn create_workflow() -> Workflow {
    let text = include_str!("./simple.yml");
    let workflow = Workflow::from_str(text).unwrap();
    workflow
}