use std::time::{Duration, Instant};
use dex_sdk::{Client, Registry, SdkResult, StepExecutionId, WaitForStepCompletionOptions};
use crate::support::{DexDevTestEnvironment, flow_id};
use crate::timer_workflow::TimerWorkflow;
#[test]
#[ignore = "requires dexcli dev"]
fn test_basic_timer_workflow() {
let environment = DexDevTestEnvironment::start(Registry::new().register(TimerWorkflow::new()));
let workflow = TimerWorkflow::new();
let flow_id = flow_id("basic-timer");
let started_at = Instant::now();
environment
.client
.start_flow(&workflow, &flow_id, 5)
.expect("start timer Flow");
environment
.client
.wait_for_step_completion(
&flow_id,
StepExecutionId::of(&workflow.start),
WaitForStepCompletionOptions::new()
.request_id(format!("{flow_id}-wait-timer"))
.maximum_wait_time(Duration::from_secs(10)),
)
.expect("wait for Timer Step");
environment
.client
.wait_for_flow_with_timeout(&flow_id, Duration::from_secs(30))
.expect("complete timer Flow");
let elapsed = started_at.elapsed();
assert!(
(Duration::from_secs(4)..=Duration::from_secs(7)).contains(&elapsed),
"actual duration: {elapsed:?}"
);
}
#[allow(dead_code)]
fn compile_timer_and_step_wait(client: &Client) -> SdkResult<()> {
let workflow = TimerWorkflow::new();
client.start_flow(&workflow, "timer", 1)?;
client.wait_for_step_completion(
"timer",
StepExecutionId::of(&workflow.start),
WaitForStepCompletionOptions::new()
.request_id("wait-timer-step")
.maximum_wait_time(Duration::from_secs(10)),
)?;
let _ = client.wait_for_flow("timer")?;
Ok(())
}