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; }
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 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(); }
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 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); }