public async Task Handle_WithoutData_ReturnsFalse()
        {
            // Arrange
            var request = new DequeueCommand("fake_value", "E3A22C4F-BA71-4BC0-9571-85F7F906D20D");

            var warehouseDomainServiceMock = new Mock <IMarketOperatorDataDomainService>();

            warehouseDomainServiceMock.Setup(x => x.CanAcknowledgeAsync(
                                                 It.Is <LegacyActorId>(r => string.Equals(r.Value, request.MarketOperator, StringComparison.OrdinalIgnoreCase)),
                                                 It.Is <Uuid>(id => string.Equals(id.ToString(), request.BundleId, StringComparison.OrdinalIgnoreCase))))
            .ReturnsAsync((false, null));
            var dequeueNotificationSenderMock = new Mock <IDequeueNotificationSender>();
            var target = new DequeueHandler(
                warehouseDomainServiceMock.Object,
                dequeueNotificationSenderMock.Object,
                new Mock <ILogger>().Object,
                new Mock <ICorrelationContext>().Object);

            // Act
            var response = await target.Handle(request, CancellationToken.None).ConfigureAwait(false);

            // Assert
            Assert.NotNull(response);
            Assert.False(response.IsDequeued);
        }
        public async Task Handle_NullArgument_ThrowsException()
        {
            // Arrange
            var warehouseDomainServiceMock    = new Mock <IMarketOperatorDataDomainService>();
            var dequeueNotificationSenderMock = new Mock <IDequeueNotificationSender>();
            var target = new DequeueHandler(
                warehouseDomainServiceMock.Object,
                dequeueNotificationSenderMock.Object,
                new Mock <ILogger>().Object,
                new Mock <ICorrelationContext>().Object);

            // Act + Assert
            await Assert
            .ThrowsAsync <ArgumentNullException>(() => target.Handle(null !, CancellationToken.None))
            .ConfigureAwait(false);
        }
        public async Task Handle_WithData_ReturnsTrue()
        {
            // Arrange
            var request           = new DequeueCommand("fake_value", "9FB4753A-0E2C-4F42-BA10-D38128DDA877");
            var bundleContentMock = new Mock <IBundleContent>();
            var bundle            = new Bundle(
                new Uuid(Guid.NewGuid()),
                new LegacyActorId(new GlobalLocationNumber("fake_value")),
                DomainOrigin.TimeSeries,
                new ContentType("fake_value"),
                Array.Empty <Uuid>(),
                bundleContentMock.Object,
                Enumerable.Empty <string>());

            var warehouseDomainServiceMock = new Mock <IMarketOperatorDataDomainService>();

            warehouseDomainServiceMock.Setup(x => x.CanAcknowledgeAsync(
                                                 It.Is <LegacyActorId>(r => string.Equals(r.Value, request.MarketOperator, StringComparison.OrdinalIgnoreCase)),
                                                 It.Is <Uuid>(id => string.Equals(id.ToString(), request.BundleId, StringComparison.OrdinalIgnoreCase))))
            .ReturnsAsync((true, bundle));

            var dequeueNotificationSenderMock = new Mock <IDequeueNotificationSender>();

            dequeueNotificationSenderMock.Setup(x => x.SendAsync(
                                                    bundle.ProcessId.ToString(),
                                                    It.IsAny <DequeueNotificationDto>(),
                                                    It.IsAny <MessageHub.Model.Model.DomainOrigin>())).Returns(Task.CompletedTask);

            var target = new DequeueHandler(
                warehouseDomainServiceMock.Object,
                dequeueNotificationSenderMock.Object,
                new Mock <ILogger>().Object,
                new Mock <ICorrelationContext>().Object);

            // Act
            var response = await target.Handle(request, CancellationToken.None).ConfigureAwait(false);

            // Assert
            Assert.NotNull(response);
            Assert.True(response.IsDequeued);
            dequeueNotificationSenderMock.Verify(
                x => x.SendAsync(
                    bundle.ProcessId.ToString(),
                    It.IsAny <DequeueNotificationDto>(),
                    It.IsAny <MessageHub.Model.Model.DomainOrigin>()),
                Times.Once);
        }