public void ScheduleSmsForSendingLater()
        {
            var scheduleSmsForSendingLater = new ScheduleSmsForSendingLater {
                SendMessageAtUtc = DateTime.Now.AddDays(1), ScheduleMessageId = Guid.NewGuid()
            };
            var sagaId      = Guid.NewGuid();
            var messageSent = new MessageSuccessfullyDelivered {
                ConfirmationData = new SmsConfirmationData("a", DateTime.Now, 3), SmsData = new SmsData("1", "2")
            };

            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)
            .ExpectSendLocal <ScheduleCreated>()
            .When(s => s.Handle(scheduleSmsForSendingLater))
            .ExpectSend <SendOneMessageNow>()
            .WhenSagaTimesOut()
            .ExpectPublish <ScheduledSmsSent>()
            .ExpectSendLocal <ScheduleSucceeded>(s => { return(s.ConfirmationData == messageSent.ConfirmationData && s.ScheduleId == scheduleSmsForSendingLater.ScheduleMessageId); })
            .When(s => s.Handle(messageSent))
            .AssertSagaCompletionIs(true);
        }
 public SmsTrackingData(MessageSuccessfullyDelivered message)
 {
     Status = MessageTrackedStatus.Sent;
     ConfirmationData = message.ConfirmationData;
     CorrelationId = message.CorrelationId;
     SmsData = message.SmsData;
     SmsMetaData = message.SmsMetaData;
     ConfirmationEmailAddress = message.ConfirmationEmailAddress;
 }
示例#3
0
 public SmsTrackingData(MessageSuccessfullyDelivered message)
 {
     Status                   = MessageTrackedStatus.Sent;
     ConfirmationData         = message.ConfirmationData;
     CorrelationId            = message.CorrelationId;
     SmsData                  = message.SmsData;
     SmsMetaData              = message.SmsMetaData;
     ConfirmationEmailAddress = message.ConfirmationEmailAddress;
 }
        public void HandleMessageSentNoConfirmationEmail()
        {
            var messageSent = new MessageSuccessfullyDelivered { CorrelationId = Guid.NewGuid(), ConfirmationData = new SmsConfirmationData("receipt", DateTime.Now.AddMinutes(-10), 0.33m) };

            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);
            }
        }
示例#5
0
        public void Handle(MessageSuccessfullyDelivered message)
        {
            var originalMessage = Data.OriginalMessageData;

            Bus.Publish(new ScheduledSmsSent
            {
                CoordinatorId    = originalMessage.RequestingCoordinatorId,
                ScheduledSmsId   = Data.ScheduleMessageId,
                ConfirmationData = message.ConfirmationData,
                Number           = message.SmsData.Mobile,
                Username         = originalMessage.Username
            });
            Bus.SendLocal(new ScheduleSucceeded
            {
                ScheduleId       = Data.ScheduleMessageId,
                ConfirmationData = message.ConfirmationData
            });

            MarkAsComplete();
        }
示例#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));
     }
 }
示例#7
0
        public void HandleMessageSentNoConfirmationEmail()
        {
            var messageSent = new MessageSuccessfullyDelivered {
                CorrelationId = Guid.NewGuid(), ConfirmationData = new SmsConfirmationData("receipt", DateTime.Now.AddMinutes(-10), 0.33m)
            };

            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 ScheduleSmsForSendingLater()
        {
            var scheduleSmsForSendingLater = new ScheduleSmsForSendingLater { SendMessageAtUtc = DateTime.Now.AddDays(1), ScheduleMessageId = Guid.NewGuid() };
            var sagaId = Guid.NewGuid();
            var messageSent = new MessageSuccessfullyDelivered { ConfirmationData = new SmsConfirmationData("a", DateTime.Now, 3), SmsData = new SmsData("1", "2") };

            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)
                    .ExpectSendLocal<ScheduleCreated>()
                .When(s => s.Handle(scheduleSmsForSendingLater))
                    .ExpectSend<SendOneMessageNow>()
                .WhenSagaTimesOut()
                    .ExpectPublish<ScheduledSmsSent>()
                    .ExpectSendLocal<ScheduleSucceeded>(s => { return s.ConfirmationData == messageSent.ConfirmationData && s.ScheduleId == scheduleSmsForSendingLater.ScheduleMessageId;})
                .When(s => s.Handle(messageSent))
                    .AssertSagaCompletionIs(true);
        }