Merge pull request #19639 from edx/schen/possible_grade_override

Make sure we return the right possible_grade value on grade APIs
This commit is contained in:
Simon Chen
2019-01-23 10:44:14 -05:00
committed by GitHub
2 changed files with 21 additions and 7 deletions

View File

@@ -191,13 +191,15 @@ class NonZeroSubsectionGrade(SubsectionGradeBase):
used instead.
"""
score_type = 'graded' if is_graded else 'all'
grade_object = grade_model
earned_value = getattr(grade_model, 'earned_{}'.format(score_type))
possible_value = getattr(grade_model, 'possible_{}'.format(score_type))
if hasattr(grade_model, 'override'):
score_type = 'graded_override' if is_graded else 'all_override'
grade_object = grade_model.override
earned_value = getattr(grade_model.override, 'earned_{}'.format(score_type)) or earned_value
possible_value = getattr(grade_model.override, 'possible_{}'.format(score_type)) or possible_value
return AggregatedScore(
tw_earned=getattr(grade_object, 'earned_{}'.format(score_type)),
tw_possible=getattr(grade_object, 'possible_{}'.format(score_type)),
tw_earned=earned_value,
tw_possible=possible_value,
graded=is_graded,
first_attempted=grade_model.first_attempted,
)

View File

@@ -114,7 +114,14 @@ class TestSubsectionGradeFactory(ProblemSubmissionTestMixin, GradeTestBase):
self.subsection_grade_factory.create(self.sequence)
self.assertEqual(mock_read_saved_grade.called, feature_flag and course_setting)
def test_update_with_override(self):
@ddt.data(
(0, None),
(None, 3),
(None, None),
(0, 3),
)
@ddt.unpack
def test_update_with_override(self, graded_earned_override, graded_possible_override):
"""
Tests that when a PersistentSubsectionGradeOverride exists, the update()
method returns a CreateSubsectionGrade with scores that account
@@ -134,8 +141,9 @@ class TestSubsectionGradeFactory(ProblemSubmissionTestMixin, GradeTestBase):
PersistentSubsectionGradeOverride.update_or_create_override(
UserFactory(),
persistent_grade,
earned_graded_override=0,
earned_graded_override=graded_earned_override,
earned_all_override=0,
possible_graded_override=graded_possible_override,
feature=PersistentSubsectionGradeOverrideHistory.GRADEBOOK,
)
@@ -143,4 +151,8 @@ class TestSubsectionGradeFactory(ProblemSubmissionTestMixin, GradeTestBase):
# the subsection grade returned should be 0/3 due to the override.
with mock_get_score(2, 3):
grade = self.subsection_grade_factory.update(self.sequence)
self.assert_grade(grade, 0, 3)
self.assert_grade(
grade,
graded_earned_override or persistent_grade.earned_graded,
graded_possible_override or persistent_grade.possible_graded
)