public async Task RunAsync_GoodMessage_IsCompleted() { // Arrange var goodDto = CreateDto(); var goodMessage = CreateMessages(goodDto); var mediator = new Mock <IMediator>(); mediator .Setup(m => m.Send(It.Is(ExpectedUuid(goodDto)), default)) .ReturnsAsync(Unit.Value); var messageReceiver = new Mock <IDataAvailableMessageReceiver>(); messageReceiver .Setup(x => x.ReceiveAsync()) .ReturnsAsync(new[] { goodMessage }); var target = new MockedDataAvailableTimerTrigger( mediator.Object, messageReceiver.Object, new DataAvailableNotificationParser()); // Act await target.RunAsync(new MockedFunctionContext()).ConfigureAwait(false); // Assert messageReceiver.Verify( x => x.CompleteAsync( It.Is <IEnumerable <ServiceBusReceivedMessage> >(m => m.Single() == goodMessage)), Times.Once); }
public async Task RunAsync_BadMessage_IsDeadlettered() { // Arrange var badDto = CreateDto(); var badMessage = CreateMessages(badDto); var mediator = new Mock <IMediator>(); mediator .Setup(m => m.Send(It.Is(ExpectedUuid(badDto)), default)) .ThrowsAsync(new InvalidOperationException()); var messageReceiver = new Mock <IDataAvailableMessageReceiver>(); messageReceiver .Setup(x => x.ReceiveAsync()) .ReturnsAsync(new[] { badMessage }); var target = new MockedDataAvailableTimerTrigger( mediator.Object, messageReceiver.Object, new DataAvailableNotificationParser()); // Act await target.RunAsync(new MockedFunctionContext()).ConfigureAwait(false); // Assert messageReceiver.Verify( x => x.DeadLetterAsync( It.Is <IEnumerable <ServiceBusReceivedMessage> >(m => m.Single() == badMessage)), Times.Once); }
public async Task RunAsync_MessageNotParsable_IsDeadlettered() { // Arrange var mediator = new Mock <IMediator>(); var messageReceiver = new Mock <IDataAvailableMessageReceiver>(); var emptyMessage = new Mock <ServiceBusReceivedMessage>().Object; messageReceiver .Setup(x => x.ReceiveAsync()) .ReturnsAsync(new[] { emptyMessage }); var target = new MockedDataAvailableTimerTrigger( mediator.Object, messageReceiver.Object, new DataAvailableNotificationParser()); // Act await target.RunAsync(new MockedFunctionContext()).ConfigureAwait(false); // Assert messageReceiver.Verify( x => x.DeadLetterAsync( It.Is <IEnumerable <ServiceBusReceivedMessage> >(m => m.Single() == emptyMessage)), Times.Once); }
public async Task RunAsync_GoodMessage_UpdatesSequenceNumber() { // Arrange var goodDto = CreateDto(); var goodMessageA = CreateMessages(goodDto); var goodMessageB = CreateMessages(goodDto); var mediator = new Mock <IMediator>(); mediator .Setup(m => m.Send(It.Is(ExpectedUuid(goodDto)), default)) .ReturnsAsync(Unit.Value); var messageReceiver = new Mock <IDataAvailableMessageReceiver>(); messageReceiver .Setup(x => x.ReceiveAsync()) .ReturnsAsync(new[] { goodMessageA, goodMessageB }); var target = new MockedDataAvailableTimerTrigger( mediator.Object, messageReceiver.Object, new DataAvailableNotificationParser()); target.GetSequenceNumberCallback = m => { if (m.Body == goodMessageA.Body) { return(1); } if (m.Body == goodMessageB.Body) { return(2); } return(-1); }; // Act await target.RunAsync(new MockedFunctionContext()).ConfigureAwait(false); // Assert mediator.Verify( x => x.Send( It.Is <UpdateMaximumSequenceNumberCommand>(c => c.SequenceNumber == 2), default), Times.Once); }