public void InvokeAsync_SpecialExceptionIsThrown_ExceptionShouldBePropogated(Type exceptionType) { //prepare var originalSubscriptionMock = new Mock <ISubscription>(); var publisherMock = new Mock <IPublisher>(); string message = "justMessage"; originalSubscriptionMock.Setup(x => x.InvokeAsync(message)).Returns <string>( (msg) => { return(Task.FromException((Exception)Activator.CreateInstance(exceptionType))); }); //act DeadLetterSubscriptionWrapper actor = new DeadLetterSubscriptionWrapper(originalSubscriptionMock.Object, publisherMock.Object, null); Func <Task> f = async() => { await actor.InvokeAsync(message); }; //check f.ShouldThrow <Exception>(); originalSubscriptionMock.Verify(x => x.NotifyAboutDeadLetterAsync(It.IsAny <string>(), It.IsAny <Exception>()), Times.Never); publisherMock.Verify(x => x.PublishDirectEventAsync(It.IsAny <IntegrationEvent <DeadLetterEventDescriptor <JObject> > >(), It.IsAny <string>(), It.IsAny <bool>()), Times.Never); }
public async Task InvokeAsync_NonSpecialExceptionIsThrown_OriginalMessageShouldBeSentToTheDeadLetterQueue() { //prepare var originalSubscriptionMock = new Mock <ISubscription>(); var publisherMock = new Mock <IPublisher>(); string subscriberDeadLetterQueueName = "deadletter.subscriber"; var argumentException = new ArgumentException(); originalSubscriptionMock.Setup(x => x.InvokeAsync(_serializedMessage)).Returns <string>( (msg) => { return(Task.FromException(argumentException)); }); //act DeadLetterSubscriptionWrapper actor = new DeadLetterSubscriptionWrapper(originalSubscriptionMock.Object, publisherMock.Object, subscriberDeadLetterQueueName); await actor.InvokeAsync(_serializedMessage); //check originalSubscriptionMock.Verify(x => x.NotifyAboutDeadLetterAsync(It.IsAny <string>(), It.IsAny <Exception>()), Times.Never); IntegrationEvent <DeadLetterEventDescriptor <JObject> > integrationEvent = JsonConvert.DeserializeObject <IntegrationEvent <DeadLetterEventDescriptor <JObject> > >(_serializedMessage); publisherMock.Verify(x => x.PublishDirectEventAsync(It.Is <IntegrationEvent <DeadLetterEventDescriptor <JObject> > >(actualevent => actualevent.CorrelationId == integrationEvent.CorrelationId), subscriberDeadLetterQueueName, true), Times.Once); }
public void Subscribe_SubscriptionAreProvided_EventTypesAreChangedAndSubscriptionAreWrapped() { //prepare var subscriberMock = new Mock <ISubscriber>(); var modelNamingConventionControllerMock = new Mock <IModelNamingConventionController>(); var publisherMock = new Mock <IPublisher>(); var targetSubscriberDeadLetterQueueName = "deadletter.subscriber"; IDictionary <string, ISubscription> originalSubscriptions = new Dictionary <string, ISubscription>(); var activityCreatedSubscription = new Mock <ISubscription>(); var bookingCreatedSubscription = new Mock <ISubscription>(); var activityCreatedEventType = "activity.created"; var bookingCreatedEventType = "booking.created"; originalSubscriptions.Add(activityCreatedEventType, activityCreatedSubscription.Object); originalSubscriptions.Add(bookingCreatedEventType, bookingCreatedSubscription.Object); IDictionary <string, ISubscription> actualSubscriptions = null; subscriberMock.Setup(x => x.Subscribe(It.IsAny <IDictionary <string, ISubscription> >())) .Callback <IDictionary <string, ISubscription> >( (subscriptions) => { actualSubscriptions = subscriptions; }); modelNamingConventionControllerMock.Setup(x => x.GetDeadLetterQueueMessageEventType(It.IsAny <string>())) .Returns <string> ( (eventType) => { return(string.Concat("deadletter.", eventType)); }); //act DefaultDeadLetterSubscriber defaultDeadLetterSubscriber = new DefaultDeadLetterSubscriber(subscriberMock.Object, modelNamingConventionControllerMock.Object, publisherMock.Object, targetSubscriberDeadLetterQueueName); defaultDeadLetterSubscriber.Subscribe(originalSubscriptions); //check foreach (var originalSubscription in originalSubscriptions) { DeadLetterSubscriptionWrapper wrapper = (DeadLetterSubscriptionWrapper)actualSubscriptions[string.Concat("deadletter.", originalSubscription.Key)]; wrapper.Should().NotBeNull(); } }
public async Task NotifyAboutDeadLetterAsync_DecoratorMethod_OriginalSubscriptionNotifyIsCalled() { //prepare var originalSubscriptionMock = new Mock <ISubscription>(); var publisherMock = new Mock <IPublisher>(); Exception argException = new ArgumentException(); string message = "justMessage"; //Act DeadLetterSubscriptionWrapper actor = new DeadLetterSubscriptionWrapper(originalSubscriptionMock.Object, publisherMock.Object, null); await actor.NotifyAboutDeadLetterAsync(message, argException); //check originalSubscriptionMock.Verify(x => x.NotifyAboutDeadLetterAsync(message, argException), Times.Once); publisherMock.Verify(x => x.PublishDirectEventAsync(It.IsAny <IntegrationEvent <DeadLetterEventDescriptor <JObject> > >(), It.IsAny <string>(), It.IsAny <bool>()), Times.Never); }