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); }
public SmsTrackingData(MessageFailedSending message) { Status = MessageTrackedStatus.Failed; SmsFailureData = message.SmsFailed; CorrelationId = message.CorrelationId; SmsData = message.SmsData; SmsMetaData = message.SmsMetaData; ConfirmationEmailAddress = message.ConfirmationEmailAddress; }
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(); }
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)); } }
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); } }