diff --git a/lms/djangoapps/open_ended_grading/tests.py b/lms/djangoapps/open_ended_grading/tests.py index 0c4376a44b..bd2b3c6695 100644 --- a/lms/djangoapps/open_ended_grading/tests.py +++ b/lms/djangoapps/open_ended_grading/tests.py @@ -6,6 +6,7 @@ django-admin.py test --settings=lms.envs.test --pythonpath=. lms/djangoapps/open from django.test import TestCase from open_ended_grading import staff_grading_service +from open_ended_grading import peer_grading_service from django.core.urlresolvers import reverse from django.contrib.auth.models import Group @@ -19,7 +20,6 @@ import json from override_settings import override_settings -_mock_service = staff_grading_service.MockStaffGradingService() @override_settings(MODULESTORE=ct.TEST_DATA_XML_MODULESTORE) class TestStaffGradingService(ct.PageLoader): @@ -110,3 +110,84 @@ class TestStaffGradingService(ct.PageLoader): d = json.loads(r.content) self.assertTrue(d['success'], str(d)) self.assertIsNotNone(d['problem_list']) + + +@override_settings(MODULESTORE=ct.TEST_DATA_XML_MODULESTORE) +class TestPeerGradingService(ct.PageLoader): + ''' + Check that staff grading service proxy works. Basically just checking the + access control and error handling logic -- all the actual work is on the + backend. + ''' + def setUp(self): + xmodule.modulestore.django._MODULESTORES = {} + + self.student = 'view@test.com' + self.instructor = 'view2@test.com' + self.password = 'foo' + self.location = 'TestLocation' + self.create_account('u1', self.student, self.password) + self.create_account('u2', self.instructor, self.password) + self.activate_user(self.student) + self.activate_user(self.instructor) + + self.course_id = "edX/toy/2012_Fall" + self.toy = modulestore().get_course(self.course_id) + + self.mock_service = peer_grading_service.peer_grading_service() + + self.logout() + + def test_get_next_submission_success(self): + self.login(self.student, self.password) + + url = reverse('peer_grading_get_next_submission', kwargs={'course_id': self.course_id}) + data = {'location': self.location} + + r = self.check_for_post_code(200, url, data) + d = json.loads(r.content) + self.assertTrue(d['success']) + self.assertIsNotNone(d['submission_id']) + self.assertIsNotNone(d['prompt']) + self.assertIsNotNone(d['submission_key']) + self.assertIsNotNone(d['max_score']) + + def test_get_next_submission_missing_location(self): + self.login(self.student, self.password) + url = reverse('peer_grading_get_next_submission', kwargs={'course_id': self.course_id}) + data = {} + r = self.check_for_post_code(200, url, data) + d = json.loads(r.content) + self.assertFalse(d['success']) + self.assertEqual(d['error'], "Missing required keys: location") + + def test_save_grade_success(self): + self.login(self.student, self.password) + url = reverse('peer_grading_save_grade', kwargs={'course_id': self.course_id}) + data = {'location': self.location, + 'submission_id': '1', + 'submission_key': 'fake key', + 'score': '2', + 'feedback': 'This is feedback'} + r = self.check_for_post_code(200, url, data) + d = json.loads(r.content) + self.assertTrue(d['success']) + + def test_save_grade_missing_keys(self): + self.login(self.student, self.password) + url = reverse('peer_grading_save_grade', kwargs={'course_id': self.course_id}) + data = {} + r = self.check_for_post_code(200, url, data) + d = json.loads(r.content) + self.assertFalse(d['success']) + self.assertTrue(d['error'].find('Missing required keys:') > -1) + + def test_is_calibrated(self): + self.login(self.student, self.password) + url = reverse('peer_grading_is_student_calibrated', kwargs={'course_id': self.course_id}) + data = {'location': self.location} + r = self.check_for_post_code(200, url, data) + d = json.loads(r.content) + self.assertTrue(d['success']) + self.assertTrue('calibrated' in d) +