internal WorkflowItemWaitAction(WorkflowItemEvent itemEvent, SignalWaitType waitType, params string[] signalNames)
 {
     _scheduleId            = itemEvent.ScheduleId;
     _waitingEventTimeStamp = itemEvent.Timestamp;
     _data = new WaitForSignalData
     {
         ScheduleId                 = itemEvent.ScheduleId,
         TriggerEventId             = itemEvent.EventId,
         WaitType                   = waitType,
         SignalNames                = signalNames,
         NextAction                 = SignalNextAction.Continue,
         TriggerEventCompletionDate = itemEvent.Timestamp
     };
 }
        public static void AssertWaitForSignal(this WorkflowDecision decision, ScheduleId scheduleId, long triggerEventId,
                                               SignalWaitType waitType, SignalNextAction nextAction, DateTime triggerDateTime, TimeSpan timeout, params string[] signalNames)
        {
            Assert.That(decision, Is.EqualTo(new WaitForSignalsDecision(new WaitForSignalData {
                ScheduleId = scheduleId, TriggerEventId = triggerEventId
            })));
            var swfDecision = decision.SwfDecision();
            var data        = swfDecision.RecordMarkerDecisionAttributes.Details.AsDynamic();

            Assert.That(data.SignalNames.ToObject <string[]>(), Is.EqualTo(signalNames));
            Assert.That((SignalWaitType)data.WaitType, Is.EqualTo(waitType));
            Assert.That((SignalNextAction)data.NextAction, Is.EqualTo(nextAction));
            Assert.That(((DateTime?)data.TriggerEventCompletionDate).Value, Is.EqualTo(triggerDateTime));
            Assert.That(((TimeSpan?)data.Timeout).Value, Is.EqualTo(timeout));
        }