public void ScheduleSmsForSendingLaterButFails()
        {
            var scheduleSmsForSendingLater = new ScheduleSmsForSendingLater {
                SendMessageAtUtc = DateTime.Now.AddDays(1), ScheduleMessageId = Guid.NewGuid()
            };
            var sagaId        = Guid.NewGuid();
            var messageFailed = new MessageFailedSending {
                SmsData = new SmsData("1", "2"), SmsFailed = new SmsFailed(string.Empty, string.Empty, string.Empty, string.Empty, string.Empty)
            };

            var scheduledSmsData = new ScheduledSmsData
            {
                Id                = sagaId,
                Originator        = "place",
                OriginalMessageId = Guid.NewGuid().ToString(),
                OriginalMessage   = new ScheduleSmsForSendingLater {
                    SmsData = new SmsData("1", "msg"), SmsMetaData = new SmsMetaData()
                }
            };

            Test.Initialize();
            Test.Saga <ScheduleSms>()
            .WithExternalDependencies(a => { a.Data = scheduledSmsData; })
            .ExpectTimeoutToBeSetAt <ScheduleSmsTimeout>((state, timeout) => timeout == scheduleSmsForSendingLater.SendMessageAtUtc)
            .When(s => s.Handle(scheduleSmsForSendingLater))
            .ExpectSend <SendOneMessageNow>()
            .WhenSagaTimesOut()
            .ExpectPublish <ScheduledSmsFailed>()
            .ExpectSendLocal <ScheduleFailed>()
            .When(s => s.Handle(messageFailed))
            .AssertSagaCompletionIs(true);
        }
Exemple #2
0
 public SmsTrackingData(MessageFailedSending message)
 {
     Status                   = MessageTrackedStatus.Failed;
     SmsFailureData           = message.SmsFailed;
     CorrelationId            = message.CorrelationId;
     SmsData                  = message.SmsData;
     SmsMetaData              = message.SmsMetaData;
     ConfirmationEmailAddress = message.ConfirmationEmailAddress;
 }
Exemple #3
0
 public void Handle(MessageFailedSending message)
 {
     using (var session = RavenStore.GetStore().OpenSession(RavenStore.DatabaseName()))
     {
         session.Advanced.UseOptimisticConcurrency = true;
         var messageSent = session.Load <SmsTrackingData>(message.CorrelationId.ToString());
         if (messageSent != null)
         {
             return;
         }
         session.Store(new SmsTrackingData(message), message.CorrelationId.ToString());
         session.SaveChanges();
     }
 }
        public void HandleMessageNotSentNoConfirmationEmail()
        {
            var messageSent = new MessageFailedSending
                {
                    CorrelationId = Guid.NewGuid(),
                    SmsFailed = new SmsFailed("232", "code", "bad", "no more", "fail"),
                };

            var ravenDocStore = MockRepository.GenerateMock<IRavenDocStore>();
            ravenDocStore.Expect(r => r.GetStore()).Return(DocumentStore);
            var smsSentAuditor = new SmsSentTracker { RavenStore = ravenDocStore };
            smsSentAuditor.Handle(messageSent);

            using (var session = DocumentStore.OpenSession())
            {
                var savedMessage = session.Load<SmsTrackingData>(messageSent.CorrelationId.ToString());
                Assert.That(savedMessage, Is.Not.Null);
            }
        }
        public void Handle(MessageFailedSending failedMessage)
        {
            Bus.Publish(new ScheduledSmsFailed
            {
                CoordinatorId  = Data.RequestingCoordinatorId,
                ScheduledSmsId = Data.ScheduleMessageId,
                Number         = failedMessage.SmsData.Mobile,
                SmsFailedData  = failedMessage.SmsFailed
            });

            Bus.SendLocal(new ScheduleFailed
            {
                ScheduleId = Data.ScheduleMessageId,
                Code       = failedMessage.SmsFailed.Code,
                Message    = failedMessage.SmsFailed.Message,
                MoreInfo   = failedMessage.SmsFailed.MoreInfo,
                Status     = failedMessage.SmsFailed.Status
            });
            MarkAsComplete();
        }
Exemple #6
0
 private void ProcessConfirmationData(SmsStatus confirmationData)
 {
     if (confirmationData is SmsFailed)
     {
         var failedMessage        = confirmationData as SmsFailed;
         var messageFailedSending = new MessageFailedSending
         {
             SmsFailed                = failedMessage,
             CorrelationId            = Data.OriginalMessage.CorrelationId,
             SmsData                  = Data.OriginalMessage.SmsData,
             SmsMetaData              = Data.OriginalMessage.SmsMetaData,
             ConfirmationEmailAddress = Data.OriginalMessage.ConfirmationEmailAddress
         };
         ReplyToOriginator(messageFailedSending);
         Bus.SendLocal(messageFailedSending);
         MarkAsComplete();
     }
     else if (confirmationData is SmsSent)
     {
         var sentMessage = confirmationData as SmsSent;
         Bus.Publish <MessageSent>(m =>
         {
             m.ConfirmationData         = sentMessage.SmsConfirmationData;
             m.CorrelationId            = Data.OriginalMessage.CorrelationId;
             m.SmsData                  = Data.OriginalMessage.SmsData;
             m.SmsMetaData              = Data.OriginalMessage.SmsMetaData;
             m.ConfirmationEmailAddress = Data.OriginalMessage.ConfirmationEmailAddress;
         });
         var messageSuccessfullyDelivered = new MessageSuccessfullyDelivered
         {
             ConfirmationData = sentMessage.SmsConfirmationData, CorrelationId = Data.OriginalMessage.CorrelationId, SmsData = Data.OriginalMessage.SmsData, SmsMetaData = Data.OriginalMessage.SmsMetaData, ConfirmationEmailAddress = Data.OriginalMessage.ConfirmationEmailAddress
         };
         Bus.SendLocal(messageSuccessfullyDelivered);
         ReplyToOriginator(messageSuccessfullyDelivered);
         MarkAsComplete();
     }
     else
     {
         RequestUtcTimeout <SmsPendingTimeout>(new TimeSpan(0, 0, 0, 10));
     }
 }
Exemple #7
0
        public void HandleMessageNotSentNoConfirmationEmail()
        {
            var messageSent = new MessageFailedSending
            {
                CorrelationId = Guid.NewGuid(),
                SmsFailed     = new SmsFailed("232", "code", "bad", "no more", "fail"),
            };

            var ravenDocStore = MockRepository.GenerateMock <IRavenDocStore>();

            ravenDocStore.Expect(r => r.GetStore()).Return(DocumentStore);
            var smsSentAuditor = new SmsSentTracker {
                RavenStore = ravenDocStore
            };

            smsSentAuditor.Handle(messageSent);

            using (var session = DocumentStore.OpenSession())
            {
                var savedMessage = session.Load <SmsTrackingData>(messageSent.CorrelationId.ToString());
                Assert.That(savedMessage, Is.Not.Null);
            }
        }