public void Handle(PauseTrickledMessagesIndefinitely message)
        {
            if (Data.LastUpdatingCommandRequestUtc != null && Data.LastUpdatingCommandRequestUtc > message.MessageRequestTimeUtc)
            {
                return;
            }

            var trackingData = RavenScheduleDocuments.GetActiveScheduleTrackingData(Data.CoordinatorId);

            var messagesToPause = trackingData.Select(t => new PauseScheduledMessageIndefinitely(t.ScheduleId)).ToList();

            foreach (var pauseScheduledMessageIndefinitely in messagesToPause)
            {
                Bus.Send(pauseScheduledMessageIndefinitely);
            }
            Data.LastUpdatingCommandRequestUtc = message.MessageRequestTimeUtc;
        }
        public void TrickleMessagesPauseMessagesIndefinitely_Data()
        {
            var ravenScheduleDocuments = MockRepository.GenerateMock <IRavenScheduleDocuments>();

            var pauseMessageSending = new PauseTrickledMessagesIndefinitely();

            var timingManager = MockRepository.GenerateMock <ICalculateSmsTiming>();

            var sagaId   = Guid.NewGuid();
            var sagaData = new CoordinateSmsSchedulingData {
                Id = Guid.NewGuid(), Originator = "o", OriginalMessageId = "i", CoordinatorId = sagaId
            };
            var pausedTrackedMessages = new List <ScheduleTrackingData>
            {
                new ScheduleTrackingData {
                    MessageStatus = MessageStatus.Scheduled, ScheduleId = Guid.NewGuid()
                },
                new ScheduleTrackingData {
                    MessageStatus = MessageStatus.Scheduled, ScheduleId = Guid.NewGuid()
                }
            };

            ravenScheduleDocuments.Expect(r => r.GetActiveScheduleTrackingData(sagaId)).Return(pausedTrackedMessages);

            Test.Initialize();
            Test.Saga <CoordinateSmsScheduler>()
            .WithExternalDependencies(s =>
            {
                s.TimingManager          = timingManager;
                s.Data                   = sagaData;
                s.RavenScheduleDocuments = ravenScheduleDocuments;
            })
            .ExpectSend <PauseScheduledMessageIndefinitely>(l => l.ScheduleMessageId == pausedTrackedMessages[0].ScheduleId)
            .ExpectSend <PauseScheduledMessageIndefinitely>(l => l.ScheduleMessageId == pausedTrackedMessages[1].ScheduleId)
            .When(s => s.Handle(pauseMessageSending));

            timingManager.VerifyAllExpectations();
        }