use std::time::Duration;
use dex_sdk::{Client, Registry, SdkResult};
use crate::conditional_complete_workflow::ConditionalCompleteWorkflow;
use crate::support::{DexDevTestEnvironment, flow_id};
#[test]
#[ignore = "requires dexcli dev"]
fn test_signal_channel() {
let environment =
DexDevTestEnvironment::start(Registry::new().register(ConditionalCompleteWorkflow::new()));
let workflow = ConditionalCompleteWorkflow::new();
let flow_id = flow_id("conditional-signal");
environment
.client
.start_flow(&workflow, &flow_id, true)
.expect("start conditional signal Flow");
environment
.client
.publish_many(&flow_id, &workflow.signal, [(), (), ()])
.expect("publish signal messages");
assert_eq!(
3,
environment
.client
.wait_for_flow_with_timeout(&flow_id, Duration::from_secs(30))
.and_then(|result| result.single_output::<i32>())
.expect("drain signal channel")
);
}
#[test]
#[ignore = "requires dexcli dev"]
fn test_internal_channel() {
let environment =
DexDevTestEnvironment::start(Registry::new().register(ConditionalCompleteWorkflow::new()));
let workflow = ConditionalCompleteWorkflow::new();
let flow_id = flow_id("conditional-internal");
environment
.client
.start_flow(&workflow, &flow_id, false)
.expect("start conditional internal Flow");
environment
.client
.invoke_rpc(
&flow_id,
ConditionalCompleteWorkflow::PUBLISH_TO_INTERNAL,
3,
)
.expect("publish internal messages through RPC");
assert_eq!(
3,
environment
.client
.wait_for_flow_with_timeout(&flow_id, Duration::from_secs(30))
.and_then(|result| result.single_output::<i32>())
.expect("drain internal channel")
);
}
#[allow(dead_code)]
fn compile_conditional_complete(client: &Client) -> SdkResult<()> {
let workflow = ConditionalCompleteWorkflow::new();
client.start_flow(&workflow, "conditional-signal", true)?;
client.publish_many("conditional-signal", &workflow.signal, [(), (), ()])?;
let _: i32 = client
.wait_for_flow("conditional-signal")?
.single_output()?;
client.start_flow(&workflow, "conditional-internal", false)?;
client.invoke_rpc(
"conditional-internal",
ConditionalCompleteWorkflow::PUBLISH_TO_INTERNAL,
3,
)
}