private async Task <IEnumerable <IValidationError> > RunValidation(string messageString)
        {
            var serializationService = new XmlSerializationService();

            var validationContext = new ValidationContext
            {
                Input = serializationService.Deserialize <Message>(messageString)
            };

            var preValidationContext = new PreValidationContext()
            {
                Input = messageString
            };

            var container = BuildContainer();

            using (var scope = container.BeginLifetimeScope(c =>
            {
                c.RegisterInstance(validationContext).As <IValidationContext>();
                c.RegisterInstance(preValidationContext).As <IPreValidationContext>();
            }))
            {
                var preValidationPopulationService = scope.Resolve <IPopulationService>();

                await preValidationPopulationService.PopulateAsync(CancellationToken.None);

                var ruleSetOrchestrationService = scope.Resolve <IRuleSetOrchestrationService <ILearner, IValidationError> >();

                return(await ruleSetOrchestrationService.Execute(CancellationToken.None));
            }
        }
        public async Task ZipTest(string file, string expectedRule)
        {
            string         foundRule = string.Empty;
            Mock <ILogger> logger    = new Mock <ILogger>();

            IPreValidationContext preValidationContext = new PreValidationContext
            {
                Input = file,
                JobId = "1"
            };
            Mock <IStreamableKeyValuePersistenceService> streamableKeyValuePersistenceService = new Mock <IStreamableKeyValuePersistenceService>();

            streamableKeyValuePersistenceService
            .Setup(x => x.GetAsync(It.IsAny <string>(), It.IsAny <Stream>(), It.IsAny <CancellationToken>()))
            .Callback <string, Stream, CancellationToken>((str, s, c) => File.Open(file, FileMode.Open).CopyTo(s))
            .Returns(Task.CompletedTask);
            streamableKeyValuePersistenceService
            .Setup(x => x.SaveAsync(It.IsAny <string>(), It.IsAny <Stream>(), It.IsAny <CancellationToken>()))
            .Returns(Task.CompletedTask)
            .Verifiable();
            Mock <IValidationErrorHandler> validationErrorHandler = new Mock <IValidationErrorHandler>();

            validationErrorHandler.Setup(x => x.Handle(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <long?>(), It.IsAny <IEnumerable <IErrorMessageParameter> >()))
            .Callback <string, string, long?, IEnumerable <IErrorMessageParameter> >((ruleName, learnRef, aimSeqNum, parms) => foundRule = ruleName)
            .Verifiable();
            Mock <IDateTimeProvider> dateTimeProvider = new Mock <IDateTimeProvider>();

            dateTimeProvider.Setup(x => x.GetNowUtc()).Returns(DateTime.UtcNow);

            IMessageStreamProviderService messageStreamProviderService =
                new AzureStorageCompressedFileContentStringProviderService(
                    preValidationContext,
                    logger.Object,
                    streamableKeyValuePersistenceService.Object,
                    validationErrorHandler.Object,
                    dateTimeProvider.Object);
            Stream stream = await messageStreamProviderService.Provide(CancellationToken.None);

            Assert.Null(stream);
            validationErrorHandler.Verify();
            Assert.Equal(expectedRule, foundRule);
        }
        public async Task ValidTest()
        {
            const string   file   = @"Files\ILR_Valid.zip";
            Mock <ILogger> logger = new Mock <ILogger>();

            IPreValidationContext preValidationContext = new PreValidationContext
            {
                Input = file,
                JobId = "1"
            };
            Mock <IStreamableKeyValuePersistenceService> streamableKeyValuePersistenceService = new Mock <IStreamableKeyValuePersistenceService>();

            streamableKeyValuePersistenceService
            .Setup(x => x.GetAsync(It.IsAny <string>(), It.IsAny <Stream>(), It.IsAny <CancellationToken>()))
            .Callback <string, Stream, CancellationToken>((str, s, c) => File.Open(file, FileMode.Open).CopyTo(s))
            .Returns(Task.CompletedTask);
            streamableKeyValuePersistenceService
            .Setup(x => x.SaveAsync(It.IsAny <string>(), It.IsAny <Stream>(), It.IsAny <CancellationToken>()))
            .Returns(Task.CompletedTask)
            .Verifiable();
            Mock <IValidationErrorHandler> validationErrorHandler = new Mock <IValidationErrorHandler>();
            Mock <IDateTimeProvider>       dateTimeProvider       = new Mock <IDateTimeProvider>();

            dateTimeProvider.Setup(x => x.GetNowUtc()).Returns(DateTime.UtcNow);

            IMessageStreamProviderService messageStreamProviderService =
                new AzureStorageCompressedFileContentStringProviderService(
                    preValidationContext,
                    logger.Object,
                    streamableKeyValuePersistenceService.Object,
                    validationErrorHandler.Object,
                    dateTimeProvider.Object);
            Stream stream = await messageStreamProviderService.Provide(CancellationToken.None);

            Assert.NotNull(stream);
        }