public async Task Should_Serialize_Json_Correctly() { ILogger <CsvJsonPrinterService> logger = Substitute.For <ILogger <CsvJsonPrinterService> >(); ICsvPrinterService jsonCsvPrinter = new CsvJsonPrinterService(logger); IAsyncEnumerable <ParsedCsvRow> parsedRows = GetParsedRow(); using (Stream outputStream = await jsonCsvPrinter.PrintCsvAsync(parsedRows)) { StreamReader reader = new StreamReader(outputStream); JsonSerializer jsonSerializer = new JsonSerializer(); ParsedCsvRow deserializedJsonRecords = (ParsedCsvRow)jsonSerializer.Deserialize(reader, typeof(ParsedCsvRow)); await foreach (var row in parsedRows) { Assert.Equal(row.LineNumber, row.LineNumber); Assert.Equal(row.Type, row.Type); Assert.Equal(row.ConcatAB, row.ConcatAB); Assert.Equal(row.SumCD, row.SumCD); Assert.Equal(row.ErrorMessage, row.ErrorMessage); } } }
public async IAsyncEnumerable <ParsedCsvRow> FilterCsvOnSumAsync(IReader csvReader) { int rowNumber = 1; while (await csvReader.ReadAsync()) { CsvRow record = csvReader.GetRecord <CsvRow>(); if (!int.TryParse(record.ColumnC, out int columnC) || !int.TryParse(record.ColumnD, out int columnD)) { ParsedCsvRow parsedCsvRow = new ParsedCsvRow { LineNumber = rowNumber, Type = Enum.GetName(typeof(ParsingResult), ParsingResult.error), ErrorMessage = "Error in parsing Columns C & D" }; yield return(parsedCsvRow); } else if (columnC + columnD > 100) { ParsedCsvRow parsedCsvRow = new ParsedCsvRow { LineNumber = rowNumber, Type = Enum.GetName(typeof(ParsingResult), ParsingResult.ok), ConcatAB = record.ColumnA + record.ColumnB, SumCD = columnC + columnD }; yield return(parsedCsvRow); } rowNumber++; } }