public void TrickleMessagesResumeMessageSending_Data()
        {
            var ravenScheduleDocuments = MockRepository.GenerateMock <IRavenScheduleDocuments>();

            var timingManager = MockRepository.GenerateMock <ICalculateSmsTiming>();
            var dateTime      = DateTime.Now;
            var sagaId        = Guid.NewGuid();
            var sagaData      = new CoordinateSmsSchedulingData {
                Originator = "o", OriginalScheduleStartTime = dateTime.AddMinutes(-5), CoordinatorId = sagaId
            };
            var pausedTrackedMessages = new List <ScheduleTrackingData>
            {
                new ScheduleTrackingData {
                    MessageStatus = MessageStatus.Paused, ScheduleId = Guid.NewGuid()
                },
                new ScheduleTrackingData {
                    MessageStatus = MessageStatus.Paused, ScheduleId = Guid.NewGuid()
                }
            };

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

            var resumeTricklesMessages = new ResumeTrickledMessages {
                ResumeTimeUtc = dateTime
            };

            Test.Initialize();
            Test.Saga <CoordinateSmsScheduler>()
            .WithExternalDependencies(s =>
            {
                s.TimingManager          = timingManager;
                s.Data                   = sagaData;
                s.RavenScheduleDocuments = ravenScheduleDocuments;
            })
            .ExpectSend <ResumeScheduledMessageWithOffset>(
                l =>
                l.ScheduleMessageId == pausedTrackedMessages[0].ScheduleId &&
                l.Offset == new TimeSpan(0, 0, 5, 0))
            .ExpectSend <ResumeScheduledMessageWithOffset>(
                l =>
                l.ScheduleMessageId == pausedTrackedMessages[1].ScheduleId &&
                l.Offset == new TimeSpan(0, 0, 5, 0))
            .When(s => s.Handle(resumeTricklesMessages));

            timingManager.VerifyAllExpectations();
        }
        public void Handle(ResumeTrickledMessages resumeMessages)
        {
            if (Data.LastUpdatingCommandRequestUtc != null && Data.LastUpdatingCommandRequestUtc > resumeMessages.MessageRequestTimeUtc)
            {
                return;
            }
            var offset = resumeMessages.ResumeTimeUtc.Ticks - Data.OriginalScheduleStartTime.Ticks;

            var trackingData          = RavenScheduleDocuments.GetActiveScheduleTrackingData(Data.CoordinatorId);
            var resumeMessageCommands = trackingData.Select(i => new ResumeScheduledMessageWithOffset(i.ScheduleId, new TimeSpan(offset))).ToList();

            foreach (var resumeScheduledMessageWithOffset in resumeMessageCommands)
            {
                Bus.Send(resumeScheduledMessageWithOffset);
            }
            Data.LastUpdatingCommandRequestUtc = resumeMessages.MessageRequestTimeUtc;
        }
예제 #3
0
        public void RescheduleWithResumeTime()
        {
            var bus                   = MockRepository.GenerateMock <IBus>();
            var dateTimeMapper        = MockRepository.GenerateMock <IDateTimeUtcFromOlsenMapping>();
            var context               = MockRepository.GenerateMock <ControllerContext>();
            var httpSessionStateBase  = MockRepository.GenerateStub <HttpSessionStateBase>();
            var coordinatorController = new CoordinatorController {
                Bus = bus, DateTimeOlsenMapping = dateTimeMapper, ControllerContext = context
            };

            var timeToResumeAt = DateTime.Now;
            var coordinatorId  = Guid.NewGuid();

            var collection = new FormCollection
            {
                { "CoordinatorId", coordinatorId.ToString() },
                { "timeToResume", DateTime.Now.AddMinutes(20).ToString() },
                { "finishTime", string.Empty },
                { "UserTimeZone", "MadeUpLand" }
            };
            ResumeTrickledMessages resumeMessage = null;

            bus
            .Expect(b => b.Send(Arg <ResumeTrickledMessages> .Is.Anything))
            .WhenCalled(b => resumeMessage = (ResumeTrickledMessages)b.Arguments[0]);

            dateTimeMapper
            .Expect(d => d.DateTimeWithOlsenZoneToUtc(DateTime.Parse(collection["timeToResume"]), collection["UserTimeZone"]))
            .Return(timeToResumeAt);

            context.Expect(c => c.HttpContext.Session).Return(httpSessionStateBase);

            var result = (RedirectToRouteResult)coordinatorController.Resume(collection);

            Assert.That(result.RouteValues["action"], Is.EqualTo("Details"));

            Assert.That(resumeMessage.CoordinatorId, Is.EqualTo(coordinatorId));
            Assert.That(resumeMessage.ResumeTimeUtc, Is.EqualTo(timeToResumeAt));

            bus.VerifyAllExpectations();
        }