acts-next 0.15.5

a fast, tiny, extensiable workflow engine
Documentation
mod acts;
mod catch;
mod setup;
mod timeout;

use crate::{Act, Step, Workflow};
use serde_json::json;

#[test]
fn model_step_yml_simple() {
    let text = r#"
    name: workflow
    id: m1
    steps:
        - id: act1
    "#;
    let m = Workflow::from_yml(text).unwrap();
    assert_eq!(m.steps.len(), 1);
    assert_eq!(m.steps.first().unwrap().id, "act1");
}

#[test]
fn model_step_yml_inputs() {
    let text = r#"
    name: workflow
    id: m1
    steps:
        - id: act1
          inputs:
            p1: 5
    "#;
    let m = Workflow::from_yml(text).unwrap();
    assert_eq!(m.steps.len(), 1);
    assert_eq!(m.steps.first().unwrap().id, "act1");

    let step = m.steps.first().unwrap();
    assert_eq!(step.inputs.len(), 1);
    assert_eq!(step.inputs.get_value("p1"), Some(&json!(5)));
}

#[test]
fn model_step_yml_outputs() {
    let text = r#"
    name: workflow
    id: m1
    steps:
        - id: act1
          outputs:
            p1:
    "#;
    let m = Workflow::from_yml(text).unwrap();
    assert_eq!(m.steps.len(), 1);
    assert_eq!(m.steps.first().unwrap().id, "act1");

    let step = m.steps.first().unwrap();
    assert_eq!(step.outputs.len(), 1);
    assert_eq!(step.outputs.get_value("p1"), Some(&json!(null)));
}

#[test]
fn model_step_id() {
    let step = Step::new().with_id("step1");
    assert_eq!(step.id, "step1");
}

#[test]
fn model_step_name() {
    let step = Step::new().with_name("my name");
    assert_eq!(step.name, "my name");
}

#[test]
fn model_step_inputs() {
    let step = Step::new().with_input("p1", json!(5));
    assert_eq!(step.inputs.len(), 1);
    assert_eq!(step.inputs.get_value("p1"), Some(&json!(5)));
}

#[test]
fn model_step_outputs() {
    let step = Step::new().with_output("p1", json!(5));
    assert_eq!(step.outputs.len(), 1);
    assert!(step.outputs.get_value("p1").is_some());
}

#[test]
fn model_step_tag() {
    let step = Step::new().with_tag("tag1");
    assert_eq!(step.tag, "tag1");
}

#[test]
fn model_step_run() {
    let step = Step::new().with_run(r#"print("run")"#);
    assert!(step.run.is_some());
}

#[test]
fn model_step_next() {
    let mut step = Step::new();
    assert!(step.next.is_none());

    step = step.with_next("step1");
    assert_eq!(step.next.unwrap(), "step1");
}

#[test]
fn model_step_branches() {
    let mut step = Step::new();
    assert_eq!(step.branches.len(), 0);

    step = step
        .with_branch(|b| b.with_id("b1"))
        .with_branch(|b| b.with_id("b2"));
    assert_eq!(step.branches.len(), 2);
}

#[test]
fn model_step_acts() {
    let mut step = Step::new();
    assert_eq!(step.acts.len(), 0);

    step = step
        .with_act(Act::irq(|act| act.with_key("act1")))
        .with_act(Act::irq(|act| act.with_key("act2")));
    assert_eq!(step.acts.len(), 2);
}

#[test]
fn model_step_uses() {
    let step = Step::new().with_uses("p1");
    assert_eq!(step.uses.unwrap(), "p1");
}