use super::helpers::*;
#[test]
fn immediate_return_ok() {
let mut engine = create_engine(vec![started_event(1)]); let result = execute(&mut engine, ImmediateHandler::ok("success"));
assert_completed(&result, "success");
assert!(engine.pending_actions().is_empty(), "No pending actions expected");
assert!(engine.history_delta().is_empty(), "No history delta expected");
}
#[test]
fn immediate_return_err() {
let mut engine = create_engine(vec![started_event(1)]); let result = execute(&mut engine, ImmediateHandler::err("failure"));
assert_failed(&result);
assert!(engine.pending_actions().is_empty(), "No pending actions expected");
}
#[test]
fn schedule_activity_pending() {
let mut engine = create_engine(vec![started_event(1)]); let result = execute(&mut engine, SingleActivityHandler::new("Greet", "Alice"));
assert_continue(&result);
assert_eq!(engine.pending_actions().len(), 1, "One pending action expected");
assert!(has_activity_action(&engine, "Greet"), "Activity action expected");
assert_eq!(engine.history_delta().len(), 1, "One history delta expected");
assert!(
has_activity_scheduled_delta(&engine, "Greet"),
"ActivityScheduled event expected"
);
}
#[test]
fn schedule_timer_pending() {
let mut engine = create_engine(vec![started_event(1)]); let result = execute(&mut engine, SingleTimerHandler::new(std::time::Duration::from_secs(60)));
assert_continue(&result);
assert_eq!(engine.pending_actions().len(), 1, "One pending action expected");
assert!(has_timer_action(&engine), "Timer action expected");
assert_eq!(engine.history_delta().len(), 1, "One history delta expected");
assert!(has_timer_created_delta(&engine), "TimerCreated event expected");
}
#[test]
fn schedule_external_pending() {
let mut engine = create_engine(vec![started_event(1)]); let result = execute(&mut engine, WaitExternalHandler::new("Approval"));
assert_continue(&result);
assert_eq!(engine.pending_actions().len(), 1, "One pending action expected");
assert!(
has_external_action(&engine, "Approval"),
"External wait action expected"
);
assert_eq!(engine.history_delta().len(), 1, "One history delta expected");
assert!(
has_external_subscribed_delta(&engine, "Approval"),
"ExternalSubscribed event expected"
);
}
#[test]
fn schedule_sub_orch_pending() {
let mut engine = create_engine(vec![started_event(1)]); let result = execute(&mut engine, SubOrchHandler::new("ChildOrch", "child-input"));
assert_continue(&result);
assert_eq!(engine.pending_actions().len(), 1, "One pending action expected");
assert!(
has_sub_orch_action(&engine, "ChildOrch"),
"Sub-orchestration action expected"
);
}
#[test]
fn continue_as_new() {
let mut engine = create_engine(vec![started_event(1)]); let result = execute(&mut engine, ContinueAsNewHandler::new("new-input"));
assert_continue_as_new(&result, "new-input");
}
#[test]
fn sub_orch_then_continue_as_new() {
let mut engine = create_engine(vec![started_event(1)]); let result = execute(
&mut engine,
SubOrchThenContinueAsNewHandler::new("ChildOrch", "child-input", "new-input"),
);
assert_continue_as_new(&result, "new-input");
assert!(
has_sub_orch_action(&engine, "ChildOrch"),
"Sub-orchestration action expected"
);
assert!(
has_continue_as_new_action(&engine, "new-input"),
"ContinueAsNew action expected"
);
}
#[test]
fn multiple_schedules_no_await() {
let mut engine = create_engine(vec![started_event(1)]);
let handler = MultiScheduleNoAwaitHandler::new(vec![("A", "a"), ("B", "b"), ("C", "c")]);
let result = execute(&mut engine, handler);
assert_completed(&result, "done");
assert_eq!(engine.pending_actions().len(), 3, "Three pending actions expected");
let scheduled = engine
.history_delta()
.iter()
.filter(|e| matches!(&e.kind, duroxide::EventKind::ActivityScheduled { .. }))
.count();
assert_eq!(scheduled, 3, "Three ActivityScheduled events expected");
let cancel_requested = engine
.history_delta()
.iter()
.filter(|e| matches!(&e.kind, duroxide::EventKind::ActivityCancelRequested { .. }))
.count();
assert_eq!(cancel_requested, 3, "Three ActivityCancelRequested events expected");
}