public async Task Given_DataFile_When_Reporting_Then_ProduceJsonReport()
        {
            // Arrange
            var datafile           = Path.Combine(AppContext.BaseDirectory, "Data", "chicago-bulls.csv");
            var expectedReportFile = Path.Combine(AppContext.BaseDirectory, "Data", "chicago-bulls.json");
            var originalReport     = await File.ReadAllTextAsync(expectedReportFile);

            var reportObject   = JsonConvert.DeserializeObject(originalReport);
            var expectedReport = JsonConvert.SerializeObject(reportObject, Formatting.Indented);

            var playerParser    = new PlayerParser();
            var dataProvider    = new CsvDataProvider(playerParser);
            var metricConverter = new ImperialToMetricConverter();
            var enrichers       = new List <IReportEnricher>
            {
                new AveragePlayerHeightEnricher(metricConverter),
                new AveragePointsForTeamEnricher(),
                new TeamEnricher(),
                new TopAchieversEnricher()
            };

            var statisticsReporter = new TeamStatisticsReporter(enrichers);

            var sut = new TeamStatisticsJsonReporter(dataProvider, statisticsReporter);

            // Act
            var result = await sut.GetReportAsJsonAsync(datafile);

            // Assert
            Assert.Equal(expectedReport, result);
        }
        static IConversionExpression ConvertFromString(string input)
        {
            var tokens = new ConversionTokenizer();

            tokens.Tokenize(input, null);
            var model     = new ConversionModelBuilder();
            var converter = new ImperialToMetricConverter();

            return(converter.Convert(model.BuildFrom(tokens.Tokens)));
        }
        public void Given_FeetAndInch_When_Converted_Then_ReturnEquivalentValueInCm(int feet, int inches, int expectedValue)
        {
            // Arrange
            var sut = new ImperialToMetricConverter();

            // Act
            var result = sut.ConvertToCm(feet, inches);

            // Assert
            Assert.Equal(expectedValue, result);
        }