public CsvAssetReaderReturnModel ReadCSVFile(ProcessCsvFileRequestModel requestModel) { var modelToReturn = new CsvAssetReaderReturnModel(); var assetList = new List <AssetModel>(); var batches = new List <BatchEntity>(); string[] lines = System.IO.File.ReadAllLines(requestModel.Path); lines = lines.Skip(1).ToArray(); foreach (var line in lines) { var asset = GetAssetFromLine(line); if (asset == null) { throw new CsvFileException("Could not read the file"); } assetList.Add(asset); } modelToReturn.Assets = assetList; var listOfBatches = lines.ToList().Split(requestModel.BatchSize); foreach (var batch in listOfBatches) { batches.Add(new BatchEntity { Content = string.Join(Environment.NewLine, batch) }); } modelToReturn.Batches = batches; return(modelToReturn); }
public async Task When_ProcessCsvFileIsCalledWithProperCsvFile_Expect_InsertAssetsAndInsertBatchIsCalled() { var csvAssetReaderReturnValue = new CsvAssetReaderReturnModel() { Assets = new List <AssetModel>() { new AssetModel { Id = 1, TimeStamp = DateTime.Now } }, Batches = new List <BatchEntity>() { new BatchEntity { Content = "123" } } }; var convertedAssetEntity = new AssetEntity { AssetId = 1 }; csvAssetReader.Setup(s => s.ReadCSVFile(It.IsAny <ProcessCsvFileRequestModel>())).Returns(csvAssetReaderReturnValue); assetConverter.Setup(s => s.ConvertToAssetEntity(It.IsAny <AssetModel>())).Returns(convertedAssetEntity); var controller = new AssetController(assetControllerLogger, assetRepository.Object, csvAssetReader.Object, assetConverter.Object, assetSearchPredicateConverter.Object, batchRepository.Object); await controller.ProcessCsvFile(new ProcessCsvFileRequestModel { BatchSize = 10, Path = "Test" }); assetRepository.Verify(s => s.InsertAssets(It.IsAny <IEnumerable <AssetEntity> >()), Times.Once); batchRepository.Verify(s => s.InsertBatch(It.IsAny <BatchEntity>()), Times.Once); }