diff --git a/lms/djangoapps/grades/new/subsection_grade.py b/lms/djangoapps/grades/new/subsection_grade.py index 407e9582ce..fcb40f731a 100644 --- a/lms/djangoapps/grades/new/subsection_grade.py +++ b/lms/djangoapps/grades/new/subsection_grade.py @@ -81,9 +81,11 @@ class ZeroSubsectionGrade(SubsectionGradeBase): ): block = self.course_data.structure[block_key] if getattr(block, 'has_score', False): - locations[block_key] = get_score( + problem_score = get_score( submissions_scores={}, csm_scores={}, persisted_block=None, block=block, ) + if problem_score is not None: + locations[block_key] = problem_score return locations diff --git a/lms/djangoapps/grades/tests/test_new.py b/lms/djangoapps/grades/tests/test_new.py index fb7feccbf0..ccf589f726 100644 --- a/lms/djangoapps/grades/tests/test_new.py +++ b/lms/djangoapps/grades/tests/test_new.py @@ -367,23 +367,40 @@ class TestSubsectionGradeFactory(ProblemSubmissionTestMixin, GradeTestBase): self.assertEqual(mock_read_saved_grade.called, feature_flag and course_setting) +@ddt.ddt class ZeroGradeTest(GradeTestBase): """ Tests ZeroCourseGrade (and, implicitly, ZeroSubsectionGrade) functionality. """ - def test_zero(self): + @ddt.data(True, False) + def test_zero(self, assume_zero_enabled): """ Creates a ZeroCourseGrade and ensures it's empty. """ - course_data = CourseData(self.request.user, structure=self.course_structure) - chapter_grades = ZeroCourseGrade(self.request.user, course_data).chapter_grades - for chapter in chapter_grades: - for section in chapter_grades[chapter]['sections']: - for score in section.problem_scores.itervalues(): - self.assertEqual(score.earned, 0) - self.assertEqual(score.first_attempted, None) - self.assertEqual(section.all_total.earned, 0) + with waffle().override(ASSUME_ZERO_GRADE_IF_ABSENT, active=assume_zero_enabled): + course_data = CourseData(self.request.user, structure=self.course_structure) + chapter_grades = ZeroCourseGrade(self.request.user, course_data).chapter_grades + for chapter in chapter_grades: + for section in chapter_grades[chapter]['sections']: + for score in section.problem_scores.itervalues(): + self.assertEqual(score.earned, 0) + self.assertEqual(score.first_attempted, None) + self.assertEqual(section.all_total.earned, 0) + + @ddt.data(True, False) + def test_zero_null_scores(self, assume_zero_enabled): + """ + Creates a zero course grade and ensures that null scores aren't included in the section problem scores. + """ + with waffle().override(ASSUME_ZERO_GRADE_IF_ABSENT, active=assume_zero_enabled): + with patch('lms.djangoapps.grades.new.subsection_grade.get_score', return_value=None): + course_data = CourseData(self.request.user, structure=self.course_structure) + chapter_grades = ZeroCourseGrade(self.request.user, course_data).chapter_grades + for chapter in chapter_grades: + self.assertNotEqual({}, chapter_grades[chapter]['sections']) + for section in chapter_grades[chapter]['sections']: + self.assertEqual({}, section.problem_scores) class SubsectionGradeTest(GradeTestBase):