public void SendAllAtOnce_Data() { var messageList = new List <SmsData> { new SmsData("9384938", "3943lasdkf;j"), new SmsData("99999", "dj;alsdfkj") }; var sendTimeUtc = DateTime.Now; var sendAllMessagesAtOnce = new SendAllMessagesAtOnce { Messages = messageList, SendTimeUtc = sendTimeUtc, UserOlsenTimeZone = "timeZone", CoordinatorId = Guid.NewGuid(), MetaData = new SmsMetaData() }; var ravenScheduleDocuments = MockRepository.GenerateStrictMock <IRavenScheduleDocuments>(); var sendingMessages = new List <ScheduleSmsForSendingLater>(); ravenScheduleDocuments.Expect(r => r.SaveSchedules(Arg <List <ScheduleSmsForSendingLater> > .Is.NotNull, Arg <Guid> .Is.Equal(sendAllMessagesAtOnce.CoordinatorId))) .WhenCalled(r => sendingMessages = (List <ScheduleSmsForSendingLater>)r.Arguments[0]); ravenScheduleDocuments.Expect(r => r.SaveCoordinator(Arg <CoordinatorCreated> .Is.Anything)); var timingManager = MockRepository.GenerateMock <ICalculateSmsTiming>(); var sagaData = new CoordinateSmsSchedulingData { Originator = "originator", Id = Guid.NewGuid() }; Test.Initialize(); Test.Saga <CoordinateSmsScheduler>() .WithExternalDependencies(s => { s.TimingManager = timingManager; s.Data = sagaData; s.RavenScheduleDocuments = ravenScheduleDocuments; }) .ExpectSend <ScheduleSmsForSendingLater>(l => l.SendMessageAtUtc == sendTimeUtc && l.SmsData.Message == sendAllMessagesAtOnce.Messages[0].Message && l.SmsData.Mobile == sendAllMessagesAtOnce.Messages[0].Mobile && l.SmsMetaData == sendAllMessagesAtOnce.MetaData) .ExpectSend <ScheduleSmsForSendingLater>(l => l.SendMessageAtUtc == sendTimeUtc && l.SmsData.Message == sendAllMessagesAtOnce.Messages[1].Message && l.SmsData.Mobile == sendAllMessagesAtOnce.Messages[1].Mobile && l.SmsMetaData == sendAllMessagesAtOnce.MetaData) .ExpectPublish <CoordinatorCreated>(c => c.CoordinatorId == sendAllMessagesAtOnce.CoordinatorId && c.ScheduledMessages.Count == 2 && c.ScheduledMessages[0].Number == sendAllMessagesAtOnce.Messages[0].Mobile && c.ScheduledMessages[0].ScheduleMessageId == sendingMessages[0].ScheduleMessageId && c.ScheduledMessages[0].ScheduleMessageId != Guid.Empty && c.ScheduledMessages[0].ScheduledTimeUtc == sendTimeUtc && c.ScheduledMessages[1].Number == sendAllMessagesAtOnce.Messages[1].Mobile && c.ScheduledMessages[1].ScheduleMessageId == sendingMessages[1].ScheduleMessageId && c.ScheduledMessages[1].ScheduleMessageId != Guid.Empty && c.ScheduledMessages[1].ScheduledTimeUtc == sendTimeUtc && c.UserOlsenTimeZone == sendAllMessagesAtOnce.UserOlsenTimeZone) .ExpectTimeoutToBeSetAt <CoordinatorTimeout>((state, timeout) => timeout == sendAllMessagesAtOnce.SendTimeUtc.AddMinutes(2)) .When(s => s.Handle(sendAllMessagesAtOnce)); Assert.That(sendingMessages.Count, Is.EqualTo(2)); timingManager.VerifyAllExpectations(); }
public void CreateSendAllAtOnceReturnsDetails() { var model = new CoordinatedSharedMessageModel { Numbers = "04040404040", Message = "Message", StartTime = DateTime.Now.AddHours(2), SendAllAtOnce = true, Tags = "tag1, tag2", Topic = "New Feature!", UserTimeZone = "Australia/Sydney" }; var bus = MockRepository.GenerateMock <IBus>(); var mapper = MockRepository.GenerateMock <ICoordinatorModelToMessageMapping>(); var ravenDocStore = MockRepository.GenerateMock <IRavenDocStore>(); var docStore = MockRepository.GenerateMock <IDocumentStore>(); var docSession = MockRepository.GenerateMock <IDocumentSession>(); var currentUser = MockRepository.GenerateStub <ICurrentUser>(); ravenDocStore.Expect(r => r.GetStore()).Return(docStore); docStore.Expect(d => d.OpenSession("Configuration")).Return(docSession); docSession.Expect(d => d.Load <CountryCodeReplacement>("CountryCodeConfig")).Return(new CountryCodeReplacement()); mapper .Expect(m => m.MapToSendAllAtOnce(Arg <CoordinatedSharedMessageModel> .Is.Anything, Arg <CountryCodeReplacement> .Is.Anything, Arg <List <string> > .Is.Anything, Arg <string> .Is.Anything)) .Return(new SendAllMessagesAtOnce()); var trickleMessage = new SendAllMessagesAtOnce(); bus.Expect(b => b.Send(Arg <SendAllMessagesAtOnce> .Is.NotNull)) .WhenCalled(i => trickleMessage = (SendAllMessagesAtOnce)(i.Arguments[0])); var controller = new CoordinatorController { ControllerContext = new ControllerContext(), Bus = bus, Mapper = mapper, RavenDocStore = ravenDocStore, CurrentUser = currentUser }; var actionResult = (RedirectToRouteResult)controller.Create(model); Assert.That(actionResult.RouteValues["action"], Is.EqualTo("Details")); Assert.That(trickleMessage.CoordinatorId, Is.Not.EqualTo(Guid.Empty)); bus.VerifyAllExpectations(); mapper.VerifyAllExpectations(); }
public void Handle(SendAllMessagesAtOnce message) { // TODO: make a timeout for this then just send the messsages directly to the sms actioner Data.CoordinatorId = message.CoordinatorId == Guid.Empty ? Data.Id : message.CoordinatorId; Data.OriginalScheduleStartTime = message.SendTimeUtc; Data.EmailAddresses = message.ConfirmationEmails; Data.UserOlsenTimeZone = message.UserOlsenTimeZone; Data.Topic = message.MetaData.Topic; var messageList = new List <ScheduleSmsForSendingLater>(); for (int i = 0; i < message.Messages.Count; i++) { var smsData = new SmsData(message.Messages[i].Mobile, message.Messages[i].Message); var smsForSendingLater = new ScheduleSmsForSendingLater(message.SendTimeUtc, smsData, message.MetaData, Data.CoordinatorId, message.Username) { CorrelationId = Data.CoordinatorId }; messageList.Add(smsForSendingLater); } messageList.ForEach(m => Bus.Send(m)); //Bus.Send(messageList.ToArray()); var coordinatorCreated = new CoordinatorCreated { CoordinatorId = Data.CoordinatorId, ScheduledMessages = messageList.Select(m => new MessageSchedule { Number = m.SmsData.Mobile, ScheduledTimeUtc = m.SendMessageAtUtc, ScheduleMessageId = m.ScheduleMessageId }).ToList(), CreationDateUtc = DateTime.UtcNow, MetaData = message.MetaData, ConfirmationEmailAddresses = message.ConfirmationEmails, UserOlsenTimeZone = message.UserOlsenTimeZone, MessageBody = message.Messages.First().Message, MessageCount = message.Messages.Count }; RequestUtcTimeout <CoordinatorTimeout>(message.SendTimeUtc.AddMinutes(2)); Bus.Publish(coordinatorCreated); Bus.SendLocal(new CoordinatorCreatedEmail(coordinatorCreated)); RavenScheduleDocuments.SaveCoordinator(coordinatorCreated); RavenScheduleDocuments.SaveSchedules(messageList, Data.CoordinatorId); }