public void AverageShouldBeNullIfAllGradesAreZeroTest()
        {
            var classScoreReport = new ClassScoreReport();

            classScoreReport.IncludedStudents.Add(new Student()
            {
                Grade = 0
            });
            Assert.IsTrue(classScoreReport.RoundedClassAverage == null);
        }
        public void RoundedClassAverageDoesNOTThrowWhenClassAverageIsNull()
        {
            var classScoreReport = new ClassScoreReport();

            classScoreReport.IncludedStudents.Add(new Student()
            {
                Grade = null
            });
            Assert.IsTrue(classScoreReport.RoundedClassAverage == null);
        }
        public void ShouldRoundClassAverageTest()
        {
            var classScoreReport = new ClassScoreReport();

            classScoreReport.IncludedStudents.Add(new Student()
            {
                Grade = 88.3342m
            });
            //3.	Student scores with a decimal should be truncated to the nearest whole number before calculating class average
            //4.	All class averages should be rounded to one decimal place (because of 3. - this is meaningless)
            Assert.IsTrue(classScoreReport.RoundedClassAverage == 88.0m);
        }
        public async Task <ClassScoreReport> GetClassScoreReportAsync(string dataFile)
        {
            var classScoreReport = new ClassScoreReport();
            var studentGrades    = await _csvDataFileService.GetStudentGradesFromCsvFileAsync(dataFile);

            _logger.LogInformation("GetScoreReport - Read {Count} Grades From File {dataFile}", studentGrades.Count, dataFile);
            //2.	Student scores of 0 should be ignored during the calculation. - also assuming nulls should be excluded
            classScoreReport.IncludedStudents = studentGrades.
                                                Where(student => student.Grade.HasValue && student.Grade.Value > 0).ToList();
            classScoreReport.TotalStudents    = studentGrades.Count;
            classScoreReport.ClassName        = Path.GetFileNameWithoutExtension(dataFile);
            classScoreReport.ExcludedStudents = studentGrades
                                                .Where(student => !student.Grade.HasValue || student.Grade.Value == 0).ToList();
            return(classScoreReport);
        }
        public void RoundedClassAverageIgnoresNullGradesTest()
        {
            var classScoreReport = new ClassScoreReport();

            classScoreReport.IncludedStudents.Add(new Student()
            {
                Grade = 88.3342m
            });
            classScoreReport.IncludedStudents.Add(new Student()
            {
                Grade = null
            });
            //3.	Student scores with a decimal should be truncated to the nearest whole number before calculating class average
            //4.	All class averages should be rounded to one decimal place
            Assert.IsTrue(classScoreReport.RoundedClassAverage == 88.0m);
        }
        public void AverageShouldBeNullIfNoStudentsTest()
        {
            var classScoreReport = new ClassScoreReport();

            Assert.IsTrue(classScoreReport.RoundedClassAverage == null);
        }