Commit 94a82c6b by Stephen Sanchez

Merge pull request #191 from edx/sanchez/overgrade-only-after-deadline

Update turbo mode to only be open after submission deadline
parents c3c120d2 453d203e
......@@ -118,12 +118,16 @@ class PeerAssessmentMixin(object):
"estimated_time": "20 minutes" # TODO: Need to configure this.
}
submissions_open, __ = self.is_open(step="submission")
over_grading = not submissions_open
workflow = self.get_workflow_info()
if workflow is None:
return self.render_assessment(path, context_dict)
continue_grading = (
data.params.get('continue_grading', False)
and workflow["status_details"]["peer"]["complete"]
and over_grading
)
student_item = self.get_student_item_dict()
......@@ -156,7 +160,7 @@ class PeerAssessmentMixin(object):
if date == "due" and not problem_open:
path = 'openassessmentblock/peer/oa_peer_closed.html'
elif workflow.get("status") == "peer":
peer_sub = self.get_peer_submission(student_item, assessment)
peer_sub = self.get_peer_submission(student_item, assessment, over_grading)
if peer_sub:
path = 'openassessmentblock/peer/oa_peer_assessment.html'
context_dict["peer_submission"] = peer_sub
......@@ -180,8 +184,6 @@ class PeerAssessmentMixin(object):
assessment,
over_grading=False
):
submissions_open, __ = self.is_open(step="submission")
over_grading = over_grading or not submissions_open
peer_submission = False
try:
peer_submission = peer_api.get_submission_to_assess(
......
......@@ -142,3 +142,83 @@ class TestPeerAssessment(XBlockHandlerTestCase):
del assessment[missing]
resp = self.request(xblock, 'peer_assess', json.dumps(assessment), response_format='json')
self.assertEqual(resp['success'], False)
@scenario('data/over_grade_scenario.xml', user_id='Bob')
def test_turbo_grading(self, xblock):
student_item = xblock.get_student_item_dict()
sally_student_item = copy.deepcopy(student_item)
sally_student_item['student_id'] = "Sally"
sally_submission = xblock.create_submission(sally_student_item, u"Sally's answer")
# Hal comes and submits a response.
hal_student_item = copy.deepcopy(student_item)
hal_student_item['student_id'] = "Hal"
hal_submission = xblock.create_submission(hal_student_item, u"Hal's answer")
# Now Hal will assess Sally.
assessment = copy.deepcopy(self.ASSESSMENT)
sally_sub = peer_api.get_submission_to_assess(hal_student_item, 1)
assessment['submission_uuid'] = sally_sub['uuid']
peer_api.create_assessment(
sally_sub['uuid'],
hal_student_item['student_id'],
assessment,
{'criteria': xblock.rubric_criteria}
)
# Now Sally will assess Hal.
assessment = copy.deepcopy(self.ASSESSMENT)
hal_sub = peer_api.get_submission_to_assess(sally_student_item, 1)
assessment['submission_uuid'] = hal_sub['uuid']
peer_api.create_assessment(
hal_sub['uuid'],
sally_student_item['student_id'],
assessment,
{'criteria': xblock.rubric_criteria}
)
# If Over Grading is on, this should now return Sally's response to Bob.
submission = xblock.create_submission(student_item, u"Bob's answer")
workflow_info = xblock.get_workflow_info()
self.assertEqual(workflow_info["status"], u'peer')
# Validate Submission Rendering.
request = namedtuple('Request', 'params')
request.params = {'continue_grading': True}
peer_response = xblock.render_peer_assessment(request)
self.assertIsNotNone(peer_response)
self.assertNotIn(submission["answer"]["text"].encode('utf-8'), peer_response.body)
#Validate Peer Rendering.
self.assertIn("Sally".encode('utf-8'), peer_response.body)
peer_api.create_assessment(
sally_sub['uuid'],
student_item['student_id'],
assessment,
{'criteria': xblock.rubric_criteria}
)
# Validate Submission Rendering.
request = namedtuple('Request', 'params')
request.params = {'continue_grading': True}
peer_response = xblock.render_peer_assessment(request)
self.assertIsNotNone(peer_response)
self.assertNotIn(submission["answer"]["text"].encode('utf-8'), peer_response.body)
#Validate Peer Rendering.
self.assertIn("Hal".encode('utf-8'), peer_response.body)
peer_api.create_assessment(
hal_sub['uuid'],
student_item['student_id'],
assessment,
{'criteria': xblock.rubric_criteria}
)
# A Final over grading will not return anything.
request = namedtuple('Request', 'params')
request.params = {'continue_grading': True}
peer_response = xblock.render_peer_assessment(request)
self.assertIsNotNone(peer_response)
self.assertNotIn(submission["answer"]["text"].encode('utf-8'), peer_response.body)
self.assertIn("Congratulations".encode('utf-8'), peer_response.body)
\ No newline at end of file
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