""" Unit tests for masquerade Based on (and depends on) unit tests for courseware. Notes for running by hand: ./manage.py lms --settings test test lms/djangoapps/courseware """ import json from django.test.utils import override_settings from django.core.urlresolvers import reverse from django.contrib.auth.models import User from courseware.tests.helpers import LoginEnrollmentTestCase from courseware.tests.modulestore_config import TEST_DATA_MIXED_MODULESTORE from courseware.roles import CourseStaffRole from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase from xmodule.modulestore.django import modulestore, clear_existing_modulestores from lms.lib.xblock.runtime import quote_slashes @override_settings(MODULESTORE=TEST_DATA_MIXED_MODULESTORE) class TestStaffMasqueradeAsStudent(ModuleStoreTestCase, LoginEnrollmentTestCase): """ Check for staff being able to masquerade as student. """ def setUp(self): # Clear out the modulestores, causing them to reload clear_existing_modulestores() self.graded_course = modulestore().get_course("edX/graded/2012_Fall") # Create staff account self.instructor = 'view2@test.com' self.password = 'foo' self.create_account('u2', self.instructor, self.password) self.activate_user(self.instructor) def make_instructor(course): CourseStaffRole(course.location).add_users(User.objects.get(email=self.instructor)) make_instructor(self.graded_course) self.logout() self.login(self.instructor, self.password) self.enroll(self.graded_course) def get_cw_section(self): url = reverse('courseware_section', kwargs={'course_id': self.graded_course.id, 'chapter': 'GradedChapter', 'section': 'Homework1'}) resp = self.client.get(url) print "url ", url return resp def test_staff_debug_for_staff(self): resp = self.get_cw_section() sdebug = '
' self.assertTrue(sdebug in resp.content) def toggle_masquerade(self): """ Toggle masquerade state. """ masq_url = reverse('masquerade-switch', kwargs={'marg': 'toggle'}) print "masq_url ", masq_url resp = self.client.get(masq_url) return resp def test_no_staff_debug_for_student(self): togresp = self.toggle_masquerade() print "masq now ", togresp.content self.assertEqual(togresp.content, '{"status": "student"}', '') resp = self.get_cw_section() sdebug = '' self.assertFalse(sdebug in resp.content) def get_problem(self): pun = 'H1P1' problem_location = "i4x://edX/graded/problem/%s" % pun modx_url = reverse('xblock_handler', kwargs={'course_id': self.graded_course.id, 'usage_id': quote_slashes(problem_location), 'handler': 'xmodule_handler', 'suffix': 'problem_get'}) resp = self.client.get(modx_url) print "modx_url ", modx_url return resp def test_showanswer_for_staff(self): resp = self.get_problem() html = json.loads(resp.content)['html'] print html sabut = '' self.assertTrue(sabut in html) def test_no_showanswer_for_student(self): togresp = self.toggle_masquerade() print "masq now ", togresp.content self.assertEqual(togresp.content, '{"status": "student"}', '') resp = self.get_problem() html = json.loads(resp.content)['html'] sabut = '' self.assertFalse(sabut in html)