public async Task FileConversionOrchestrator_FailingRunReturnsFalseAndLogsFatal()
        {
            // Arrange
            var messengerMock               = new Mock <IMessengerService>();
            var fileServiceMock             = new Mock <IFileService>();
            var xsdValidationMock           = new Mock <IXsdValidationService>();
            var xmlProviderMock             = new Mock <IXmlSchemaProvider>();
            var validationErrorMock         = new Mock <IValidationErrorHandler>();
            var xmlSerializationServiceMock = new Mock <IXmlSerializationService>();
            var iMapMock   = new Mock <IMap <Loose.Previous.Message, Loose.Message> >();
            var loggerMock = new Mock <ILogger>();

            var fileConversionOrchestrator = new FileConversionOrchestrator(
                messengerMock.Object,
                fileServiceMock.Object,
                null,
                xsdValidationMock.Object,
                xmlProviderMock.Object,
                validationErrorMock.Object,
                xmlSerializationServiceMock.Object,
                iMapMock.Object,
                null,
                null,
                null,
                loggerMock.Object);

            // Act
            var result = await fileConversionOrchestrator.MapFileAsync(sourcefileName, null, targetfolderName, new CancellationToken());

            // Assert
            result.Should().BeFalse();
            loggerMock.VerifyInfo($"Mapping {sourcefileName} into {targetfolderName}", Times.Once()).Should().BeTrue();
            loggerMock.VerifyFatal($"Failed mapping {sourcefileName} into {targetfolderName}", Times.Once()).Should().BeTrue();
        }
        public async Task FileConversionOrchestrator_WorkingRunReturnsTrueandLogs()
        {
            // Arrange
            var messengerMock   = new Mock <IMessengerService>();
            var fileServiceMock = new Mock <IFileService>();
            var targetStream    = new MemoryStream();

            fileServiceMock.Setup(c => c.OpenReadStreamAsync(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <CancellationToken>())).ReturnsAsync(targetStream);
            fileServiceMock.Setup(c => c.OpenWriteStreamAsync(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <CancellationToken>())).ReturnsAsync(targetStream);
            var fileNameServiceMock = new Mock <IFileNameService>();
            var xsdValidationMock   = new Mock <IXsdValidationService>();

            xsdValidationMock.Setup(c => c.Validate(It.IsAny <Stream>(), It.IsAny <XmlSchemaSet>(), It.IsAny <ValidationEventHandler>())).Verifiable();
            var xmlProviderMock = new Mock <IXmlSchemaProvider>();

            xmlProviderMock.Setup(p => p.Provide()).Returns(new XmlSchema());
            var validationErrorMock         = new Mock <IValidationErrorHandler>();
            var xmlSerializationServiceMock = new Mock <IXmlSerializationService>();
            var iMapMock         = new Mock <IMap <Loose.Previous.Message, Loose.Message> >();
            var loggerMock       = new Mock <ILogger>();
            var yearUplifterMock = new Mock <IProcess <Loose.Message> >();

            yearUplifterMock.Setup(s => s.Process(It.IsAny <Loose.Message>())).Returns <Loose.Message>(x => x);
            var anonymiserMock = new Mock <IAnonymise <Loose.Message> >();

            anonymiserMock.Setup(s => s.Process(It.IsAny <Loose.Message>())).Returns <Loose.Message>(x => x);
            var anonymiseLogMock = new Mock <IAnonymiseLog>();

            anonymiseLogMock.SetupGet(s => s.Log).Returns(new List <IAnonymiseLogEntry>());

            var fileConversionOrchestrator = new FileConversionOrchestrator(
                messengerMock.Object,
                fileServiceMock.Object,
                fileNameServiceMock.Object,
                xsdValidationMock.Object,
                xmlProviderMock.Object,
                validationErrorMock.Object,
                xmlSerializationServiceMock.Object,
                iMapMock.Object,
                yearUplifterMock.Object,
                anonymiserMock.Object,
                anonymiseLogMock.Object,
                loggerMock.Object);

            // Act
            var result = await fileConversionOrchestrator.MapFileAsync(sourcefileName, null, targetfolderName, new CancellationToken());

            // Assert
            result.Should().BeTrue();
            loggerMock.VerifyInfo($"Mapping {sourcefileName} into {targetfolderName}", Times.Once()).Should().BeTrue();
            loggerMock.VerifyVerbose(It.IsAny <string>(), Times.Exactly(9)).Should().BeTrue();

            messengerMock.Verify(v => v.Send(It.IsAny <TaskProgressMessage>()), Times.Exactly(7));

            targetStream.Dispose();
        }