Пример #1
0
        private static Dictionary <int, CompetitionRunResult> ImportRunResultsFrom(string path)
        {
            DateTime currentTimeUtc = SystemContext.UtcNow();
            var      imported       = new Dictionary <int, CompetitionRunResult>();

            using var textReader = new StreamReader(path);

            var settings = new DelimitedValuesReaderSettings
            {
                Culture = Settings.Default.ImportExportCulture
            };

            using var valuesReader = new DelimitedValuesReader(textReader, settings);

            AssertRequiredColumnsExist(valuesReader);
            bool hasOptionalColumns = ContainsOptionalColumnNames(valuesReader);

            foreach (IDelimitedValuesReaderRow row in valuesReader)
            {
                try
                {
                    CompetitionRunResult runResult = GetRunResultFrom(row, hasOptionalColumns, currentTimeUtc);
                    imported[runResult.Competitor.Number] = runResult;
                }
                catch (Exception ex)
                {
                    throw new Exception($"Failed to read import file at row {valuesReader.LineNumber}: {ex.Message}", ex);
                }
            }

            return(imported);
        }
Пример #2
0
        private static void AssertRequiredColumnsExist(DelimitedValuesReader reader)
        {
            List <string> missingColumnNames = RequiredColumnNames.Where(requiredColumnName => !reader.ColumnNames.Contains(requiredColumnName)).ToList();

            if (missingColumnNames.Count > 0)
            {
                throw new Exception($"Missing column names: {string.Join(", ", missingColumnNames)}.");
            }
        }
        public void When_source_contains_only_line_breaks_it_should_fail()
        {
            // Arrange
            var source = new StringReader("\n\n");

            // Act
            Action action = () => _ = new DelimitedValuesReader(source);

            // Assert
            action.Should().ThrowExactly <DelimitedValuesParseException>().WithMessage("Source contains no columns.");
        }
        public void When_source_contains_single_line_break_it_should_fail()
        {
            // Arrange
            var source = new StringReader("\n");

            // Act
            Action action = () => _ = new DelimitedValuesReader(source);

            // Assert
            action.Should().ThrowExactly <DelimitedValuesParseException>().WithMessage("Missing column names on first line.");
        }
        public void When_only_header_has_been_read_it_should_be_positioned_at_first_line()
        {
            // Arrange
            Func <DelimitedValuesReader> construction = () => new DelimitedValuesReaderBuilder().Build();

            // Act
            using DelimitedValuesReader reader = construction();

            // Assert
            reader.LineNumber.Should().Be(1);
        }
        private static Dictionary<int, CompetitionRunResult> ImportRunResultsFrom([NotNull] string path)
        {
            DateTime currentTimeUtc = SystemContext.UtcNow();
            var imported = new Dictionary<int, CompetitionRunResult>();

            using (var textReader = new StreamReader(path))
            {
                var settings = new DelimitedValuesReaderSettings { Culture = Settings.Default.ImportExportCulture };
                using (var valuesReader = new DelimitedValuesReader(textReader, settings))
                {
                    AssertRequiredColumnsExist(valuesReader);
                    bool hasOptionalColumns = ContainsOptionalColumnNames(valuesReader);

                    foreach (IDelimitedValuesReaderRow row in valuesReader)
                    {
                        try
                        {
                            CompetitionRunResult runResult = GetRunResultFrom(row, hasOptionalColumns, currentTimeUtc);
                            imported[runResult.Competitor.Number] = runResult;
                        }
                        catch (Exception ex)
                        {
                            throw new Exception(
                                $"Failed to read import file at row {valuesReader.LineNumber}: {ex.Message}", ex);
                        }
                    }
                }
            }

            return imported;
        }
Пример #7
0
 private static bool ContainsOptionalColumnNames(DelimitedValuesReader reader)
 {
     return(OptionalColumnNames.All(optionalColumnName => reader.ColumnNames.Contains(optionalColumnName)));
 }