示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }