public async Task ProductionConfirmedConsumer_ThrowsArgumentException()
        {
            //Arrange
            var reference = "test";
            var productionConfirmedEvent = new ProductionConfirmedEvent {
                Reference = reference
            };
            var context = Mock.Of <ConsumeContext <ProductionConfirmedEvent> >(x => x.Message == productionConfirmedEvent);

            var consumer = new ProductionConfirmedConsumer(productPartRepo.Object, logger.Object);

            //Assert
            await Assert.ThrowsAsync <ArgumentException>(() => consumer.Consume(context));

            logger.VerifyLogging(LogLevel.Error);
        }
        public async Task ProductionConfirmedConsumer_ThrowsNullDataException()
        {
            //Arrange
            var reference = "test";
            var quantity  = 1;
            var parts     = new List <Part>();
            var productionConfirmedEvent = new ProductionConfirmedEvent {
                Reference = reference, Quantity = quantity
            };
            var context = Mock.Of <ConsumeContext <ProductionConfirmedEvent> >(x => x.Message == productionConfirmedEvent);

            productPartRepo.Setup(x => x.GetProductParts(It.IsAny <string>())).Returns(Task.FromResult(parts));

            var consumer = new ProductionConfirmedConsumer(productPartRepo.Object, logger.Object);

            //Assert
            await Assert.ThrowsAsync <NullDataException>(() => consumer.Consume(context));

            logger.VerifyLogging(LogLevel.Error);
        }
        public async Task ProductionConfirmedConsumer_Success()
        {
            //Arrange
            var reference = "test";
            var quantity  = 1;
            var parts     = new List <Part> {
                new Part()
            };
            var productionConfirmedEvent = new ProductionConfirmedEvent {
                Reference = reference, Quantity = quantity
            };
            var context = Mock.Of <ConsumeContext <ProductionConfirmedEvent> >(x => x.Message == productionConfirmedEvent);

            productPartRepo.Setup(x => x.GetProductParts(It.IsAny <string>())).Returns(Task.FromResult(parts));

            var consumer = new ProductionConfirmedConsumer(productPartRepo.Object, logger.Object);

            //Act
            await consumer.Consume(context);

            //Assert
            productPartRepo.Verify(x => x.SaveAllAsync(), Times.Once);
            logger.VerifyLogging(LogLevel.Information);
        }