public void ScheduleSms()
        {
            var ravenDocStore = MockRepository.GenerateMock<IRavenDocStore>();
            var database = "database";
            ravenDocStore.Expect(r => r.Database()).Return(database);
            ravenDocStore.Expect(r => r.GetStore().OpenSession(database)).Return(DocumentStore.OpenSession());
            var trackingData = new ScheduleTrackingData
            {
                ScheduleId = Guid.NewGuid(),
                MessageStatus = MessageStatus.WaitingForScheduling,
            };
            StoreDocument(trackingData, trackingData.ScheduleId.ToString());

            var scheduleStatusHandlers = new ScheduleStatusHandlers { RavenDocStore = ravenDocStore };
            var scheduleTimeUtc = DateTime.UtcNow.AddMinutes(14);
            scheduleStatusHandlers.Handle(new ScheduleStatusChanged
                {
                    ScheduleId = trackingData.ScheduleId,
                    Status = MessageStatus.Scheduled,
                    ScheduleTimeUtc = scheduleTimeUtc
                });

            var updatedData = GetSchedule(trackingData.ScheduleId.ToString());
            Assert.That(updatedData.MessageStatus, Is.EqualTo(MessageStatus.Scheduled));
            Assert.That(updatedData.ScheduleTimeUtc, Is.EqualTo(scheduleTimeUtc));
        }
        public void PauseSchedule()
        {
            var ravenDocStore = MockRepository.GenerateMock<IRavenDocStore>();
            var database = "database";
            ravenDocStore.Expect(r => r.Database()).Return(database);
            ravenDocStore.Expect(r => r.GetStore().OpenSession(database)).Return(DocumentStore.OpenSession());
            var trackingData = new ScheduleTrackingData
            {
                ScheduleId = Guid.NewGuid(),
                MessageStatus = MessageStatus.Scheduled,
            };
            StoreDocument(trackingData, trackingData.ScheduleId.ToString());

            var scheduleStatusHandlers = new ScheduleStatusHandlers { RavenDocStore = ravenDocStore };
            scheduleStatusHandlers.Handle(new ScheduleStatusChanged
                {
                    ScheduleId = trackingData.ScheduleId,
                    Status = MessageStatus.Paused
                });

            var updatedData = GetSchedule(trackingData.ScheduleId.ToString());
            Assert.That(updatedData.MessageStatus, Is.EqualTo(MessageStatus.Paused));
        }
 public void Setup()
 {
     using (var session = base.DocumentStore.OpenSession())
     {
         var coordinatorTrackingData = new CoordinatorTrackingData
         {
             CoordinatorId = _coordinatorId,
             CurrentStatus = CoordinatorStatusTracking.Started
         };
         var message1 = new ScheduleTrackingData
                            {
                                SmsData = new SmsData("12313", "message"),
                                CoordinatorId = _coordinatorId,
                                MessageStatus = MessageStatus.Sent
                            };
         var message2 = new ScheduleTrackingData
                            {
                                SmsData = new SmsData("434039", "message"),
                                CoordinatorId = _coordinatorId,
                                MessageStatus = MessageStatus.Scheduled
                            };
         session.Store(coordinatorTrackingData, _coordinatorId.ToString());
         session.Store(message1, Guid.NewGuid().ToString());
         session.Store(message2, Guid.NewGuid().ToString());
         session.SaveChanges();
     }
 }
 public void Setup()
 {
     using (var session = base.DocumentStore.OpenSession())
     {
         var scheduleTrackingData = new ScheduleTrackingData
         {
             MessageStatus = MessageStatus.Scheduled,
             ScheduleId = scheduleMessageId
         };
         session.Store(scheduleTrackingData, scheduleMessageId.ToString());
         session.SaveChanges();
     }
 }
        public void SmsSent()
        {
            var ravenDocStore = MockRepository.GenerateMock<IRavenDocStore>();
            var database = "database";
            ravenDocStore.Expect(r => r.Database()).Return(database);
            ravenDocStore.Expect(r => r.GetStore().OpenSession(database)).Return(DocumentStore.OpenSession());
            var trackingData = new ScheduleTrackingData
            {
                ScheduleId = Guid.NewGuid(),
                MessageStatus = MessageStatus.WaitingForScheduling,
            };
            StoreDocument(trackingData, trackingData.ScheduleId.ToString());

            var scheduleStatusHandlers = new ScheduleStatusHandlers { RavenDocStore = ravenDocStore };
            var scheduleSucceeded = new ScheduleSucceeded
                {
                    ConfirmationData = new SmsConfirmationData("r", DateTime.UtcNow, 33m), ScheduleId = trackingData.ScheduleId
                };
            scheduleStatusHandlers.Handle(scheduleSucceeded);

            var updatedData = GetSchedule(trackingData.ScheduleId.ToString());
            Assert.That(updatedData.MessageStatus, Is.EqualTo(MessageStatus.Sent));
            Assert.That(updatedData.ConfirmationData.SentAtUtc, Is.EqualTo(scheduleSucceeded.ConfirmationData.SentAtUtc));
            Assert.That(updatedData.ConfirmationData.Receipt, Is.EqualTo(scheduleSucceeded.ConfirmationData.Receipt));
            Assert.That(updatedData.ConfirmationData.Price, Is.EqualTo(scheduleSucceeded.ConfirmationData.Price));
        }
        public void SmsFailed()
        {
            var ravenDocStore = MockRepository.GenerateMock<IRavenDocStore>();
            var database = "database";
            ravenDocStore.Expect(r => r.Database()).Return(database);
            ravenDocStore.Expect(r => r.GetStore().OpenSession(database)).Return(DocumentStore.OpenSession());
            var trackingData = new ScheduleTrackingData
            {
                ScheduleId = Guid.NewGuid(),
                MessageStatus = MessageStatus.WaitingForScheduling,
            };
            StoreDocument(trackingData, trackingData.ScheduleId.ToString());

            var scheduleStatusHandlers = new ScheduleStatusHandlers { RavenDocStore = ravenDocStore };
            var scheduleFailed = new ScheduleFailed
                {
                    ScheduleId = trackingData.ScheduleId,
                    Message = "fail",
                    MoreInfo = "link"
                };
            scheduleStatusHandlers.Handle(scheduleFailed);

            var updatedData = GetSchedule(trackingData.ScheduleId.ToString());
            Assert.That(updatedData.MessageStatus, Is.EqualTo(MessageStatus.Failed));
            Assert.That(updatedData.SmsFailureData.Message, Is.EqualTo(scheduleFailed.Message));
            Assert.That(updatedData.SmsFailureData.MoreInfo, Is.EqualTo(scheduleFailed.MoreInfo));
            Assert.That(updatedData.SmsFailureData.Status, Is.EqualTo(scheduleFailed.Status));
            Assert.That(updatedData.SmsFailureData.Code, Is.EqualTo(scheduleFailed.Code));
        }
        public void Setup()
        {
            var _store = new EmbeddableDocumentStore { RunInMemory = true };
            _store.Initialize();
            IndexCreation.CreateIndexes(typeof(ScheduleMessagesInCoordinatorIndex).Assembly, _store);
            Top1CoordinatorId = Guid.NewGuid();
            var mostRecentCoordinators = new List<CoordinatorTrackingData>
                {
                    new CoordinatorTrackingData(new List<MessageSendingStatus>())
                        {
                            CoordinatorId = Top1CoordinatorId,
                            MetaData = new SmsMetaData { Topic = "barry" },
                            CreationDateUtc = DateTime.Now.AddDays(-3),
                        },
                };
            var scheduleTrackingData = new ScheduleTrackingData {CoordinatorId = Top1CoordinatorId, MessageStatus = MessageStatus.Sent};

            SmsTrackingSession = _store.OpenSession();
            foreach (var coordinatorTrackingData in mostRecentCoordinators)
            {
                SmsTrackingSession.Store(coordinatorTrackingData, coordinatorTrackingData.CoordinatorId.ToString());
            }
            SmsTrackingSession.Store(scheduleTrackingData, Guid.NewGuid().ToString());
            SmsTrackingSession.SaveChanges();
        }
        public void SaveSchedules(List<object> messageList, Guid coordinatorId)
        {
            var scheduleSummary = GetScheduleSummary(coordinatorId);
            var scheduleCount = scheduleSummary.Sum(s => s.Count);

            if (scheduleCount > 0 && scheduleCount == messageList.Count)
            {
                return;
            }
            // else - delete the existing schedules????
            using (var session = RavenDocStore.GetStore().BulkInsert(Database))
            {
                // TODO: Check if count of documents with coordinator id match number of schedules (in case they've already been saved)
                foreach (var schedule in messageList)
                {
                    if (schedule.GetType() == typeof (ScheduleSmsForSendingLater))
                    {
                        var smsSchedule = schedule as ScheduleSmsForSendingLater;
                        var scheduleTracker = new ScheduleTrackingData
                        {
                            MessageStatus = MessageStatus.WaitingForScheduling,
                            ScheduleId = smsSchedule.ScheduleMessageId,
                            SmsData = smsSchedule.SmsData,
                            SmsMetaData = smsSchedule.SmsMetaData,
                            ScheduleTimeUtc = smsSchedule.SendMessageAtUtc,
                            CoordinatorId = coordinatorId,
                            Username = smsSchedule.Username,
                            ScheduleType = ScheduleType.Sms
                        };
                        session.Store(scheduleTracker, smsSchedule.ScheduleMessageId.ToString());
                    }
                    if (schedule.GetType() == typeof (ScheduleEmailForSendingLater))
                    {
                        var emailSchedule = schedule as ScheduleEmailForSendingLater;

                        var scheduleTracker = new ScheduleTrackingData
                        {
                            MessageStatus = MessageStatus.WaitingForScheduling,
                            ScheduleId = emailSchedule.ScheduleMessageId,
                            EmailData = emailSchedule.EmailData,
                            SmsMetaData = new SmsMetaData { Tags = emailSchedule.Tags, Topic = emailSchedule.Topic },
                            ScheduleTimeUtc = emailSchedule.SendMessageAtUtc,
                            CoordinatorId = coordinatorId,
                            Username = emailSchedule.Username,
                            ScheduleType = ScheduleType.Email
                        };
                        session.Store(scheduleTracker, emailSchedule.ScheduleMessageId.ToString());
                    }

                }
                //session.SaveChanges();
            }
        }
        public void SaveSchedules(List<ScheduleSmsForSendingLater> messageList, Guid coordinatorId)
        {
            var scheduleSummary = GetScheduleSummary(coordinatorId);
            var scheduleCount = scheduleSummary.Sum(s => s.Count);

            if (scheduleCount > 0 && scheduleCount == messageList.Count)
            {
                return;
            }
            // else - delete the existing schedules????
            using (var session = RavenDocStore.GetStore().BulkInsert(Database))
            {
                foreach (var scheduleSmsForSendingLater in messageList)
                {
                    var scheduleTracker = new ScheduleTrackingData
                    {
                        MessageStatus = MessageStatus.WaitingForScheduling,
                        ScheduleId = scheduleSmsForSendingLater.ScheduleMessageId,
                        SmsData = scheduleSmsForSendingLater.SmsData,
                        SmsMetaData = scheduleSmsForSendingLater.SmsMetaData,
                        ScheduleTimeUtc = scheduleSmsForSendingLater.SendMessageAtUtc,
                        CoordinatorId = coordinatorId,
                        ScheduleType = ScheduleType.Sms
                    };
                    session.Store(scheduleTracker, scheduleSmsForSendingLater.ScheduleMessageId.ToString());
                }
            }
        }
 public void SaveSchedules(List<ScheduleSmsForSendingLater> messageList, Guid coordinatorId)
 {
     using (var session = RavenDocStore.GetStore().OpenSession())
     {
         foreach (var scheduleSmsForSendingLater in messageList)
         {
             var scheduleTracker = new ScheduleTrackingData
             {
                 MessageStatus = MessageStatus.WaitingForScheduling,
                 ScheduleId = scheduleSmsForSendingLater.ScheduleMessageId,
                 SmsData = scheduleSmsForSendingLater.SmsData,
                 SmsMetaData = scheduleSmsForSendingLater.SmsMetaData,
                 ScheduleTimeUtc = scheduleSmsForSendingLater.SendMessageAtUtc,
                 CoordinatorId = coordinatorId
             };
             session.Store(scheduleTracker, scheduleSmsForSendingLater.ScheduleMessageId.ToString());
         }
         session.SaveChanges();
     }
 }