Commit 7d8bf751 by Matt Drayer Committed by Jonathan Piacenti

mattdrayer/api-2632-fix: Fixed bugs related to proforma grade calculation/retrieval

parent 41c485b5
......@@ -18,7 +18,6 @@ from django.core.exceptions import ObjectDoesNotExist
from django.test import Client
from django.test.utils import override_settings
from capa.tests.response_xml_factory import StringResponseXMLFactory
from courseware import module_render
from courseware.tests.factories import StudentModuleFactory
......
......@@ -949,16 +949,16 @@ class UsersCoursesGradesDetail(SecureAPIView):
progress_summary = grades.progress_summary(student, request, course_descriptor) # pylint: disable=W0612
grade_summary = grades.grade(student, request, course_descriptor)
grading_policy = course_descriptor.grading_policy
current_grade = 0
proforma_grade = 0
queryset = StudentGradebook.objects.filter(
user=student,
course_id__exact=course_key,
)
current_grade = 0
proforma_grade = 0
if len(queryset):
current_grade = queryset[0].grade
proforma_grade = grades.calculate_proforma_grade(grade_summary, grading_policy)
proforma_grade = queryset[0].proforma_grade
response_data = {
'courseware_summary': progress_summary,
......
......@@ -72,12 +72,12 @@ class Command(BaseCommand):
proforma_grade = grades.calculate_proforma_grade(grade_data, course.grading_policy)
try:
gradebook_entry = StudentGradebook.objects.get(user=user, course_id=course.id)
if gradebook_entry.grade != grade:
if gradebook_entry.grade != grade or gradebook_entry.proforma_grade != proforma_grade:
gradebook_entry.grade = grade
proforma_grade = proforma_grade
gradebook_entry.proforma_grade = proforma_grade
gradebook_entry.save()
except StudentGradebook.DoesNotExist:
StudentGradebook.objects.create(user=user, course_id=course.id, grade=grade, proforma_grade=proforma_grade)
log_msg = 'Gradebook entry created -- Course: {}, User: {} (grade: {})'.format(course.id, user.id, grade)
log_msg = 'Gradebook entry created -- Course: {}, User: {} (grade: {}, proforma_grade: {})'.format(course.id, user.id, grade, proforma_grade)
print log_msg
log.info(log_msg)
......@@ -153,6 +153,7 @@ class GenerateGradebookEntriesTests(ModuleStoreTestCase):
self.assertEqual(len(current_entries), 1)
user0_entry = StudentGradebook.objects.get(user=self.users[0])
self.assertEqual(user0_entry.grade, 0.24)
self.assertEqual(user0_entry.proforma_grade, 0.28575)
# Enable the signalling mechanism
settings._wrapped.default_settings.FEATURES['SIGNAL_ON_SCORE_CHANGED'] = True
......@@ -170,6 +171,13 @@ class GenerateGradebookEntriesTests(ModuleStoreTestCase):
self.assertEqual(len(current_entries), 2)
user0_entry = StudentGradebook.objects.get(user=self.users[0])
self.assertEqual(user0_entry.grade, 0.50)
self.assertEqual(user0_entry.proforma_grade, 0.54975)
# Alter the user's grade and proforma grade to ensure we trigger the update logic
user0_entry = StudentGradebook.objects.get(user=self.users[0])
user0_entry.grade = 0.25
user0_entry.proforma_grade = 0.55
user0_entry.save()
# Run the command across all users, but just for the specified course
generate_gradebook_entries.Command().handle(course_ids=course_ids)
......@@ -178,10 +186,13 @@ class GenerateGradebookEntriesTests(ModuleStoreTestCase):
current_entries = StudentGradebook.objects.all()
self.assertEqual(len(current_entries), 3)
current_entries = StudentGradebookHistory.objects.all()
self.assertEqual(len(current_entries), 4)
self.assertEqual(len(current_entries), 6)
user0_entry = StudentGradebook.objects.get(user=self.users[0])
self.assertEqual(user0_entry.grade, 0.50)
self.assertEqual(user0_entry.proforma_grade, 0.54975)
user1_entry = StudentGradebook.objects.get(user=self.users[1])
self.assertEqual(user1_entry.grade, 0.48)
self.assertEqual(user1_entry.proforma_grade, 0.5715)
user2_entry = StudentGradebook.objects.get(user=self.users[2])
self.assertEqual(user2_entry.grade, 0.72)
self.assertEqual(user2_entry.proforma_grade, 0.85725)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment