Esempio n. 1
0
        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++;
            }
        }