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; }
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(); }