public void SaveCoordinator(CoordinatorCreated message)
        {
            bool trackingDataExists;

            using (var session = RavenDocStore.GetStore().OpenSession(Database))
            {
                var coordinatorTrackingData = session.Load <CoordinatorTrackingData>(message.CoordinatorId.ToString());
                trackingDataExists = coordinatorTrackingData != null;
            }

            if (trackingDataExists)
            {
                return;
            }
            using (var session = RavenDocStore.GetStore().BulkInsert(Database))
            {
                var coordinatorTrackingData = new CoordinatorTrackingData
                {
                    CoordinatorId            = message.CoordinatorId,
                    CreationDateUtc          = message.CreationDateUtc,
                    MetaData                 = message.MetaData,
                    ConfirmationEmailAddress = String.Join(", ", message.ConfirmationEmailAddresses),
                    UserOlsenTimeZone        = message.UserOlsenTimeZone,
                    CurrentStatus            = CoordinatorStatusTracking.Started,
                    MessageBody              = message.MessageBody,
                    MessageCount             = message.MessageCount,
                    Username                 = message.UserName
                };
                session.Store(coordinatorTrackingData, message.CoordinatorId.ToString());
            }
        }
示例#2
0
        public void Handle(CoordinatorCreated message)
        {
            Thread.Sleep(1000);
            var context = GlobalHost.ConnectionManager.GetHubContext <ScheduleStatus>();

            context.Clients.All.coordinatorStarted(new
            {
                message.CoordinatorId
            });
        }
示例#3
0
        public void CoordinatorCreatedNoEmailNoDefaultEmailForCoordinatorNoAction()
        {
            var ravenDocStore = MockRepository.GenerateMock <IRavenDocStore>();
            var session       = MockRepository.GenerateMock <IDocumentSession>();

            ravenDocStore.Expect(r => r.GetStore().OpenSession("Configuration"))
            .Return(session);
            session.Expect(s => s.Load <EmailDefaultNotification>("EmailDefaultConfig")).Return(new EmailDefaultNotification());


            var emailService = new EmailService {
                RavenDocStore = ravenDocStore
            };
            var coordinatorComplete = new CoordinatorCreated();

            emailService.Handle(new CoordinatorCreatedEmail(coordinatorComplete));
        }
示例#4
0
        public void CoordinatorCreatedWithEmailWithDefaultEmailForCoordinatorSendEmail()
        {
            var ravenDocStore  = MockRepository.GenerateMock <IRavenDocStore>();
            var session        = MockRepository.GenerateMock <IDocumentSession>();
            var mailActioner   = MockRepository.GenerateMock <IMailActioner>();
            var dateTimeMapper = MockRepository.GenerateMock <IDateTimeOlsenFromUtcMapping>();

            ravenDocStore.Expect(r => r.GetStore().OpenSession("Configuration"))
            .Return(session);
            var emailDefaultNotification = new EmailDefaultNotification {
                EmailAddresses = new List <string> {
                    "*****@*****.**", "*****@*****.**"
                }
            };

            session.Expect(s => s.Load <EmailDefaultNotification>("EmailDefaultConfig")).Return(emailDefaultNotification);
            var mailgunConfig = new MailgunConfiguration {
                ApiKey = "key", DomainName = "domain", DefaultFrom = "*****@*****.**"
            };

            session.Expect(s => s.Load <MailgunConfiguration>("MailgunConfig")).Return(mailgunConfig);
            var message = new MailMessage();

            mailActioner.Expect(m => m.Send(Arg <MailgunConfiguration> .Is.Equal(mailgunConfig), Arg <MailMessage> .Is.NotNull)).WhenCalled(a => message = (MailMessage)(a.Arguments[1]));
            dateTimeMapper.Expect(d => d.DateTimeUtcToLocalWithOlsenZone(Arg <DateTime> .Is.Anything, Arg <string> .Is.Anything)).Return(DateTime.Now).Repeat.Any();

            var emailService = new EmailService {
                RavenDocStore = ravenDocStore, MailActioner = mailActioner, DateTimeOlsenFromUtcMapping = dateTimeMapper
            };
            var coordinatorComplete = new CoordinatorCreated {
                ConfirmationEmailAddresses = new List <string> {
                    "*****@*****.**"
                }, ScheduledMessages = new List <MessageSchedule> {
                    new MessageSchedule {
                        ScheduledTimeUtc = DateTime.Now
                    }
                }, MetaData = new SmsMetaData()
            };

            emailService.Handle(new CoordinatorCreatedEmail(coordinatorComplete));

            Assert.That(message.From.ToString(), Is.EqualTo(mailgunConfig.DefaultFrom));
            Assert.That(message.To[0].Address, Is.EqualTo(coordinatorComplete.ConfirmationEmailAddresses[0]));
            Assert.That(message.To[1].Address, Is.EqualTo(emailDefaultNotification.EmailAddresses[0]));
            Assert.That(message.To[2].Address, Is.EqualTo(emailDefaultNotification.EmailAddresses[1]));
        }
        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);
        }
        public void Handle(TrickleSmsOverCalculatedIntervalsBetweenSetDates message)
        {
            Data.CoordinatorId             = message.CoordinatorId == Guid.Empty ? Data.Id : message.CoordinatorId;
            Data.OriginalScheduleStartTime = message.StartTimeUtc;
            Data.EmailAddresses            = message.ConfirmationEmails;
            Data.UserOlsenTimeZone         = message.UserOlsenTimeZone;
            Data.Topic = message.MetaData.Topic;
            var messageTiming            = TimingManager.CalculateTiming(message.StartTimeUtc, message.Duration, message.Messages.Count);
            var lastScheduledMessageTime = message.StartTimeUtc.Add(message.Duration);
            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(messageTiming[i], smsData, message.MetaData, Data.CoordinatorId, message.Username);
                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
            };

            RavenScheduleDocuments.SaveCoordinator(coordinatorCreated);
            RavenScheduleDocuments.SaveSchedules(messageList, Data.CoordinatorId);

            RequestUtcTimeout <CoordinatorTimeout>(lastScheduledMessageTime.AddMinutes(2));
            Bus.Publish(coordinatorCreated);
            Bus.SendLocal(new CoordinatorCreatedEmail(coordinatorCreated));
        }
示例#7
0
 public CoordinatorCreatedEmail(CoordinatorCreated coordinatorCreated)
 {
     CoordinatorCreated = coordinatorCreated;
 }
示例#8
0
 public CoordinatorCreatedEmail()
 {
     CoordinatorCreated = new CoordinatorCreated();
 }