public IEnumerable<ResultMessageViewModel> ExecuteQualityAssuranceChain(QualityCheckingExecuteDataViewModel data)
        {
            var resultMessages = new List<ResultMessageViewModel>();

            if (data != null)
            {
                var qcChainConfiguration = MapTOChainConfiguration(data);

                var versioningHelper = new DataVersioningHelper(_wqDefaultValueProvider);
                var factory = new DataQualityCheckingToolFactory(versioningHelper, _relatedActionTypeRepository);
                var qualiltyChecker = new WaterQualityDataQualityChecker(qcChainConfiguration, factory, _wqDataRepository);

                var qcResults = qualiltyChecker.Check();

                var resultViewModels = Mapper.Map<IEnumerable<IQualityCheckingResult>, IEnumerable<ResultMessageViewModel>>(qcResults);

                resultMessages.AddRange(resultViewModels);
            }
            else
            {
                resultMessages.Add(new ResultMessageViewModel(ResultMessageViewModel.RESULT_LEVEL_FATAL, 
                                                              "QC request data is null. No QC process could be applied."));
            }

            return resultMessages;
            
        }
        public IEnumerable <ResultMessageViewModel> ExecuteQualityAssuranceChain(QualityCheckingExecuteDataViewModel data)
        {
            var resultMessages = new List <ResultMessageViewModel>();

            if (data != null)
            {
                var qcChainConfiguration = MapTOChainConfiguration(data);

                var versioningHelper = new DataVersioningHelper(_wqDefaultValueProvider);
                var factory          = new DataQualityCheckingToolFactory(versioningHelper, _relatedActionTypeRepository);
                var qualiltyChecker  = new WaterQualityDataQualityChecker(qcChainConfiguration, factory, _wqDataRepository);

                var qcResults = qualiltyChecker.Check();

                var resultViewModels = Mapper.Map <IEnumerable <IQualityCheckingResult>, IEnumerable <ResultMessageViewModel> >(qcResults);

                resultMessages.AddRange(resultViewModels);
            }
            else
            {
                resultMessages.Add(new ResultMessageViewModel(ResultMessageViewModel.RESULT_LEVEL_FATAL,
                                                              "QC request data is null. No QC process could be applied."));
            }

            return(resultMessages);
        }
        public static void Main(string[] args)
        {
            var dbContext = new ODM2Entities();

            var relationActionTypeRepository = new Repository<CV_RelationshipType>(dbContext);
            var wqDataRepository = new WQDataRepository(dbContext);

            var staticWQDefaultValueProvider = new StaticWQDefaultValueProvider();
            staticWQDefaultValueProvider.Init();

            Console.WriteLine("Start Quality Checking Process...");

            var qcChainConfiguration = ConfigureQualityCheckingChain(true, wqDataRepository, "Test", false, "Water");

            var versioningHelper = new DataVersioningHelper(staticWQDefaultValueProvider);
            var factory = new DataQualityCheckingToolFactory(versioningHelper, relationActionTypeRepository);
            var qualiltyChecker = new WaterQualityDataQualityChecker(qcChainConfiguration, factory, wqDataRepository);

            var qcResults = qualiltyChecker.Check();

            foreach(var result in qcResults)
            {
                Console.WriteLine(string.Format("{0}: {1}", result.Level, result.Message));
            
            }

            Console.WriteLine("Press any keys to continue...");
            Console.ReadLine();
        }
        public void GenerateDataQualityChekcingToolFailTest()
        {
            var configurationToTest = new DataQualityCheckingToolConfiguration();
            configurationToTest.DataQualityCheckingToolType = typeof(string);

            var mockVersionHelper = new Mock<IDataVersioningHelper>();
            var mockRepository = new Mock<IRepository<CV_RelationshipType>>();
            var factory = new DataQualityCheckingToolFactory(mockVersionHelper.Object, mockRepository.Object);

            Assert.Throws(typeof(ArgumentException), () => factory.GenerateDataQualityCheckingTool(configurationToTest));


        }
        public void GenerateSampleMatrixTypeCheckingToolTest()
        {
            var mockVersionHelper = new Mock<IDataVersioningHelper>();
            var mockRepository = new Mock<IRepository<CV_RelationshipType>>();

            
            var configurationToTest = new DataQualityCheckingToolConfiguration();
            configurationToTest.DataQualityCheckingToolType = typeof(SampleMatrixTypeCheckingTool);

            var factory = new DataQualityCheckingToolFactory(mockVersionHelper.Object, mockRepository.Object);

            var generatedTool = factory.GenerateDataQualityCheckingTool(configurationToTest);

            Assert.NotNull(generatedTool);
            Assert.AreEqual(typeof(SampleMatrixTypeCheckingTool), generatedTool.GetType());
        }