use super::helpers::*;
#[test]
fn sequential_allocation() {
let history = vec![started_event(1)]; let mut engine = create_engine(history);
let handler = MultiScheduleNoAwaitHandler::new(vec![("A", "a"), ("B", "b"), ("C", "c")]);
let result = execute(&mut engine, handler);
assert_completed(&result, "done");
let scheduled_ids: Vec<u64> = engine
.history_delta()
.iter()
.filter(|e| matches!(&e.kind, duroxide::EventKind::ActivityScheduled { .. }))
.map(|e| e.event_id())
.collect();
assert_eq!(scheduled_ids, vec![2, 3, 4], "Scheduled event IDs should start at 2");
let ids = delta_event_ids(&engine);
assert_eq!(ids.first().copied(), Some(2), "First delta event ID should be 2");
assert!(
ids.windows(2).all(|w| w[1] == w[0] + 1),
"Event IDs should be sequential starting from 2, got {ids:?}"
);
}
#[test]
fn allocation_after_replay() {
let history = vec![
started_event(1), activity_scheduled(2, "First", "input"), activity_completed(3, 2, "result"), ];
let mut engine = create_engine(history);
let handler = TwoActivitiesHandler::new(("First", "input"), ("Second", "input2"));
let result = execute(&mut engine, handler);
assert_continue(&result);
let ids = delta_event_ids(&engine);
assert_eq!(ids, vec![4], "New event should get ID = max + 1");
}
#[test]
fn allocation_with_gaps() {
let history = vec![
started_event(1), activity_scheduled(5, "Task", "input"), ];
let mut engine = create_engine(history);
engine.prep_completions(vec![activity_completed_msg(5, "result")]);
let handler = TwoActivitiesHandler::new(("Task", "input"), ("Next", "next"));
let result = execute(&mut engine, handler);
assert_continue(&result);
let ids = delta_event_ids(&engine);
assert!(ids.contains(&6), "Completion should get ID 6");
assert!(ids.contains(&7), "New schedule should get ID 7");
}
#[test]
fn pending_actions_have_correct_event_id() {
let history = vec![started_event(1)]; let mut engine = create_engine(history);
let result = execute(&mut engine, SingleActivityHandler::new("Task", "input"));
assert_continue(&result);
assert_eq!(engine.pending_actions().len(), 1);
match &engine.pending_actions()[0] {
duroxide::Action::CallActivity {
scheduling_event_id, ..
} => {
assert_eq!(*scheduling_event_id, 2, "Action should reference event_id 2");
}
_ => panic!("Expected CallActivity action"),
}
}