Commit 8838c50f by Calen Pennington

Merge pull request #770 from MITx/feature/dave/progress_reverse_quickfix

Put tests to check ordering of scores returned on progress page.
parents bc947c5e 305dcfc4
...@@ -253,7 +253,7 @@ def progress_summary(student, request, course, student_module_cache): ...@@ -253,7 +253,7 @@ def progress_summary(student, request, course, student_module_cache):
Arguments: Arguments:
student: A User object for the student to grade student: A User object for the student to grade
course: An XModule containing the course to grade course: A Descriptor containing the course to grade
student_module_cache: A StudentModuleCache initialized with all student_module_cache: A StudentModuleCache initialized with all
instance_modules for the student instance_modules for the student
......
...@@ -644,7 +644,6 @@ class RealCoursesLoadTestCase(PageLoader): ...@@ -644,7 +644,6 @@ class RealCoursesLoadTestCase(PageLoader):
# ========= TODO: check ajax interaction here too? # ========= TODO: check ajax interaction here too?
@override_settings(MODULESTORE=TEST_DATA_XML_MODULESTORE) @override_settings(MODULESTORE=TEST_DATA_XML_MODULESTORE)
class TestCourseGrader(PageLoader): class TestCourseGrader(PageLoader):
"""Check that a course gets graded properly""" """Check that a course gets graded properly"""
...@@ -673,16 +672,32 @@ class TestCourseGrader(PageLoader): ...@@ -673,16 +672,32 @@ class TestCourseGrader(PageLoader):
self.factory = RequestFactory() self.factory = RequestFactory()
def check_grade_percent(self, percent): def get_grade_summary(self):
student_module_cache = StudentModuleCache.cache_for_descriptor_descendents(
self.graded_course.id, self.student_user, self.graded_course)
fake_request = self.factory.get(reverse('progress',
kwargs={'course_id': self.graded_course.id}))
return grades.grade(self.student_user, fake_request,
self.graded_course, student_module_cache)
def get_homework_scores(self):
return self.get_grade_summary()['totaled_scores']['Homework']
def get_progress_summary(self):
student_module_cache = StudentModuleCache.cache_for_descriptor_descendents( student_module_cache = StudentModuleCache.cache_for_descriptor_descendents(
self.graded_course.id, self.student_user, self.graded_course) self.graded_course.id, self.student_user, self.graded_course)
fake_request = self.factory.get(reverse('progress', fake_request = self.factory.get(reverse('progress',
kwargs={'course_id': self.graded_course.id})) kwargs={'course_id': self.graded_course.id}))
grade_summary = grades.grade(self.student_user, fake_request, progress_summary = grades.progress_summary(self.student_user, fake_request,
self.graded_course, student_module_cache) self.graded_course, student_module_cache)
return progress_summary
def check_grade_percent(self, percent):
grade_summary = self.get_grade_summary()
self.assertEqual(grade_summary['percent'], percent) self.assertEqual(grade_summary['percent'], percent)
def submit_question_answer(self, problem_url_name, responses): def submit_question_answer(self, problem_url_name, responses):
...@@ -693,8 +708,6 @@ class TestCourseGrader(PageLoader): ...@@ -693,8 +708,6 @@ class TestCourseGrader(PageLoader):
input_i4x-edX-graded-problem-H1P3_2_1 input_i4x-edX-graded-problem-H1P3_2_1
input_i4x-edX-graded-problem-H1P3_2_2 input_i4x-edX-graded-problem-H1P3_2_2
""" """
problem_location = "i4x://edX/graded/problem/{0}".format(problem_url_name) problem_location = "i4x://edX/graded/problem/{0}".format(problem_url_name)
modx_url = reverse('modx_dispatch', modx_url = reverse('modx_dispatch',
...@@ -713,8 +726,11 @@ class TestCourseGrader(PageLoader): ...@@ -713,8 +726,11 @@ class TestCourseGrader(PageLoader):
return resp return resp
def problem_location(self, problem_url_name):
return "i4x://edX/graded/problem/{0}".format(problem_url_name)
def reset_question_answer(self, problem_url_name): def reset_question_answer(self, problem_url_name):
problem_location = "i4x://edX/graded/problem/{0}".format(problem_url_name) problem_location = self.problem_location(problem_url_name)
modx_url = reverse('modx_dispatch', modx_url = reverse('modx_dispatch',
kwargs={ kwargs={
...@@ -726,31 +742,44 @@ class TestCourseGrader(PageLoader): ...@@ -726,31 +742,44 @@ class TestCourseGrader(PageLoader):
resp = self.client.post(modx_url) resp = self.client.post(modx_url)
return resp return resp
def test_get_graded(self): def test_get_graded(self):
#### Check that the grader shows we have 0% in the course #### Check that the grader shows we have 0% in the course
self.check_grade_percent(0) self.check_grade_percent(0)
#### Submit the answers to a few problems as ajax calls #### Submit the answers to a few problems as ajax calls
def earned_hw_scores():
"""Global scores, each Score is a Problem Set"""
return [s.earned for s in self.get_homework_scores()]
def score_for_hw(hw_url_name):
hw_section = [section for section
in self.get_progress_summary()[0]['sections']
if section.get('url_name') == hw_url_name][0]
return [s.earned for s in hw_section['scores']]
# Only get half of the first problem correct # Only get half of the first problem correct
self.submit_question_answer('H1P1', ['Correct', 'Incorrect']) self.submit_question_answer('H1P1', ['Correct', 'Incorrect'])
self.check_grade_percent(0.06) self.check_grade_percent(0.06)
self.assertEqual(earned_hw_scores(), [1.0, 0, 0]) # Order matters
self.assertEqual(score_for_hw('Homework1'), [1.0, 0.0])
# Get both parts of the first problem correct # Get both parts of the first problem correct
self.reset_question_answer('H1P1') self.reset_question_answer('H1P1')
self.submit_question_answer('H1P1', ['Correct', 'Correct']) self.submit_question_answer('H1P1', ['Correct', 'Correct'])
self.check_grade_percent(0.13) self.check_grade_percent(0.13)
self.assertEqual(earned_hw_scores(), [2.0, 0, 0])
self.assertEqual(score_for_hw('Homework1'), [2.0, 0.0])
# This problem is shown in an ABTest # This problem is shown in an ABTest
self.submit_question_answer('H1P2', ['Correct', 'Correct']) self.submit_question_answer('H1P2', ['Correct', 'Correct'])
self.check_grade_percent(0.25) self.check_grade_percent(0.25)
self.assertEqual(earned_hw_scores(), [4.0, 0.0, 0])
self.assertEqual(score_for_hw('Homework1'), [2.0, 2.0])
# This problem is hidden in an ABTest. Getting it correct doesn't change total grade # This problem is hidden in an ABTest. Getting it correct doesn't change total grade
self.submit_question_answer('H1P3', ['Correct', 'Correct']) self.submit_question_answer('H1P3', ['Correct', 'Correct'])
self.check_grade_percent(0.25) self.check_grade_percent(0.25)
self.assertEqual(score_for_hw('Homework1'), [2.0, 2.0])
# On the second homework, we only answer half of the questions. # On the second homework, we only answer half of the questions.
# Then it will be dropped when homework three becomes the higher percent # Then it will be dropped when homework three becomes the higher percent
...@@ -759,15 +788,16 @@ class TestCourseGrader(PageLoader): ...@@ -759,15 +788,16 @@ class TestCourseGrader(PageLoader):
# know it works. # know it works.
self.submit_question_answer('H2P1', ['Correct', 'Correct']) self.submit_question_answer('H2P1', ['Correct', 'Correct'])
self.check_grade_percent(0.42) self.check_grade_percent(0.42)
self.assertEqual(earned_hw_scores(), [4.0, 4.0, 0])
# Third homework # Third homework
self.submit_question_answer('H3P1', ['Correct', 'Correct']) self.submit_question_answer('H3P1', ['Correct', 'Correct'])
self.check_grade_percent(0.42) # Score didn't change self.check_grade_percent(0.42) # Score didn't change
self.assertEqual(earned_hw_scores(), [4.0, 4.0, 2.0])
self.submit_question_answer('H3P2', ['Correct', 'Correct']) self.submit_question_answer('H3P2', ['Correct', 'Correct'])
self.check_grade_percent(0.5) # Now homework2 dropped. Score changes self.check_grade_percent(0.5) # Now homework2 dropped. Score changes
self.assertEqual(earned_hw_scores(), [4.0, 4.0, 4.0])
# Now we answer the final question (worth half of the grade) # Now we answer the final question (worth half of the grade)
self.submit_question_answer('FinalQuestion', ['Correct', 'Correct']) self.submit_question_answer('FinalQuestion', ['Correct', 'Correct'])
......
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