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());
        }
        private DataQualityCheckingChainConfiguration MapTOChainConfiguration(QualityCheckingExecuteDataViewModel data)
        {
            var chainConfiguration = new DataQualityCheckingChainConfiguration();

            chainConfiguration.NeedToCorrectData = data.NeedCorrection;
            chainConfiguration.DataFetchCriteria = new GetAllWaterQualitySampleDataCriteria(_wqDataRepository);

            var sampleMatrixCheckingRuleConfiguration = new DataQualityCheckingToolConfiguration();
            sampleMatrixCheckingRuleConfiguration.DataQualityCheckingToolType = typeof(SampleMatrixTypeCheckingTool);
            sampleMatrixCheckingRuleConfiguration.DataQualityCheckingRule = new StringCompareCheckingRule(data.SampleMatrixTypeCheckingToolExpectedValue,
                                                                                             data.SampleMatrixTypeCheckingToolCaseSensitive,
                                                                                             data.SampleMatrixTypeCheckingToolCorrectionValue
                                                                                            );

            chainConfiguration.ToolsConfiguration = new List<DataQualityCheckingToolConfiguration> { sampleMatrixCheckingRuleConfiguration };

            return chainConfiguration;
        }
        private static DataQualityCheckingChainConfiguration ConfigureQualityCheckingChain(bool needCorrection,
                                                                                            IWQDataRepository wqDataRepository, 
                                                                                            string expectedString, 
                                                                                            bool isCaseSensitive, 
                                                                                            string correctionValue)
        {
            var chainConfiguration = new DataQualityCheckingChainConfiguration();

            chainConfiguration.NeedToCorrectData = needCorrection;
            chainConfiguration.DataFetchCriteria = new GetAllWaterQualitySampleDataCriteria(wqDataRepository);

            var sampleMatrixCheckingRuleConfiguration = new DataQualityCheckingToolConfiguration();
            sampleMatrixCheckingRuleConfiguration.DataQualityCheckingToolType = typeof(SampleMatrixTypeCheckingTool);
            sampleMatrixCheckingRuleConfiguration.DataQualityCheckingRule = new StringCompareCheckingRule(expectedString,
                                                                                                          isCaseSensitive,
                                                                                                          correctionValue
                                                                                                         );

            chainConfiguration.ToolsConfiguration = new List<DataQualityCheckingToolConfiguration> { sampleMatrixCheckingRuleConfiguration };

            return chainConfiguration;
        }