public void GetMedianVariance_returns_correct_variance_count(IEnumerable <string> dataValues, int elementCount) { //Given var settings = new SourceFolderSettings { LowerVariancePC = 20, UpperVariancePC = 20, FileFormat = new FileFormat { Delimiter = "," }, FileTypes = new Dictionary <string, string>() { { "TOU", "Energy" }, { "LP", "Data Value" } } }; decimal median = 1; string filePath = "C:\\TOU_123.csv"; moqFileReaderService.Setup(m => m.InitFileReader(It.IsAny <string>(), It.IsAny <string>())).Verifiable(); moqFileReaderService.Setup(m => m.FileName).Returns("TOU_123.csv"); moqFileReaderService.Setup(m => m.IterateFileOnColumn(It.IsAny <string>())).Returns(dataValues); moqCalcService.Setup(m => m.GetMedian(It.IsAny <IEnumerable <string> >())).Returns(median); moqCalcService.Setup(m => m.IsValueInMedianRange(It.IsAny <decimal>(), It.IsAny <decimal>(), It.IsAny <decimal>(), It.IsAny <decimal>())).Returns(true); var sut = new DataProcessor(moqCalcService.Object, moqFileReaderService.Object); //When var actual = sut.GetMedianVariance(filePath, settings); //Then Assert.IsType <MedianVarianceResult>(actual); Assert.Equal(elementCount, actual.VarianceData.Count); }
//[InlineData(new object[] { new string[] { "file1.csv", "file2.csv", "file3.csv" } })] public void StartProcess_processes_the_files_from_configured_file_location(IEnumerable <string> filesList) { //given moqFolderManager.Setup(m => m.GetAllFiles(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <Dictionary <string, string> >())).Returns(filesList); var medianVarianceResult = new MedianVarianceResult(It.IsAny <string>(), It.IsAny <List <VarianceData> >(), new Dictionary <string, string>()); moqDataProcessor.Setup(m => m.GetMedianVariance(It.IsAny <string>(), It.IsAny <SourceFolderSettings>())).Returns(medianVarianceResult); moqOutPutService.Setup(m => m.OutputResult(It.IsAny <MedianVarianceResult>())).Verifiable("called"); var sut = new MedianManager(moqFolderManager.Object, moqDataProcessor.Object, moqOutPutService.Object); var sourceFolderSettings = new SourceFolderSettings() { FileFormat = new FileFormat() { Delimiter = ",", Ext = "*.csv" }, FileTypes = new Dictionary <string, string>() { { "TOU", "Energy" }, { "LP", "Data Value" } }, Path = "D:\\sample Files", LowerVariancePC = 20, UpperVariancePC = 20 }; //when sut.StartProcess(sourceFolderSettings); //then moqFolderManager.Verify(v => v.GetAllFiles(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <Dictionary <string, string> >()), Times.Once); moqDataProcessor.Verify(v => v.GetMedianVariance(It.IsAny <string>(), It.IsAny <SourceFolderSettings>()), Times.Exactly(filesList.Count())); moqOutPutService.Verify(v => v.OutputResult(It.IsAny <MedianVarianceResult>()), Times.Exactly(filesList.Count())); }
public int StartProcess(SourceFolderSettings settings) { int numberofFilesProcessed = 0; //Get all valid files paths from the source folder var filePaths = _folderManager.GetAllFiles(settings.Path, settings.FileFormat.Ext, settings.FileTypes); try { foreach (string filePath in filePaths) { var response = _dataProcessor.GetMedianVariance(filePath, settings); if (response != null) { numberofFilesProcessed++; } //print now and move to next file. _outputService.OutputResult(response); } } catch (Exception) { // Yell Log Catch Throw } return(numberofFilesProcessed); }
public MedianVarianceResult GetMedianVariance(string filePath, SourceFolderSettings settings) { //Always good to validate the input parameter in public methods if (string.IsNullOrEmpty(filePath) || settings == null) { return(null); } var result = PopulateMedianVariance(filePath, settings); return(result); }
private MedianVarianceResult PopulateMedianVariance(string filePath, SourceFolderSettings settings) { //Init file reader so that headers/path/delimiter are pre-populated and saved for later usage _fileReaderService.InitFileReader(filePath, settings.FileFormat.Delimiter); var result = new MedianVarianceResult ( _fileReaderService.FileName, new List <VarianceData>(), settings.FileTypes ); //Let's calculate the median. Pass in the Data Column Name from Model result.Median = _calcService.GetMedian(_fileReaderService.IterateFileOnColumn(result.DataColumnName)); //Iterate each row now foreach (var data in _fileReaderService.IterateFileOnColumn(result.DataColumnName)) { //Move to next iteration as value is not a decimal if (!decimal.TryParse(data, out decimal dataValue)) { continue; } //Let's find out if our value is within variance range bool inRange = _calcService.IsValueInMedianRange(result.Median, dataValue, settings.LowerVariancePC, settings.UpperVariancePC); if (inRange) { //Populate the date from the line being read //No need to iterate over again as FileReaderService keeps the current line saved var date = _fileReaderService.GetColumnValueFromCurrentLine(result.DateTimeColumnName); result.VarianceData.Add(new VarianceData(date, dataValue)); } } return(result); }