Commit 637df3ed by David Ormsbee

Merge pull request #11733 from edx/ormsbee/revert_pr_11523

Revert "Merge pull request #11523 from edx/perf/speed-up-slow-user-role-ops
parents a7a1affb 19d9920b
......@@ -233,7 +233,7 @@ class TestCourseIndex(CourseTestCase):
# delete nofications that are dismissed
CourseRerunState.objects.get(id=rerun_state.id)
self.assertTrue(has_course_author_access(user2, rerun_course_key))
self.assertFalse(has_course_author_access(user2, rerun_course_key))
def assert_correct_json_response(self, json_response):
"""
......
......@@ -54,10 +54,6 @@ class RoleCache(object):
for access_role in self._roles
)
def add_role(self, role):
"""Adds a role to the cache."""
self._roles.add(role)
class AccessRole(object):
"""
......@@ -66,7 +62,7 @@ class AccessRole(object):
__metaclass__ = ABCMeta
@abstractmethod
def has_user(self, user, refresh=True):
def has_user(self, user):
"""
Return whether the supplied django user has access to this role.
"""
......@@ -134,7 +130,7 @@ class RoleBase(AccessRole):
self.course_key = course_key
self._role_name = role_name
def has_user(self, user, refresh=False):
def has_user(self, user):
"""
Return whether the supplied django user has access to this role.
"""
......@@ -142,7 +138,7 @@ class RoleBase(AccessRole):
return False
# pylint: disable=protected-access
if not hasattr(user, '_roles') or refresh:
if not hasattr(user, '_roles'):
# Cache a list of tuples identifying the particular roles that a user has
# Stored as tuples, rather than django models, to make it cheaper to construct objects for comparison
user._roles = RoleCache(user)
......@@ -161,8 +157,7 @@ class RoleBase(AccessRole):
entry = CourseAccessRole(user=user, role=self._role_name, course_id=self.course_key, org=self.org)
entry.save()
if hasattr(user, '_roles'):
# pylint: disable=protected-access
user._roles.add_role(entry)
del user._roles
def remove_users(self, *users):
"""
......
......@@ -36,6 +36,7 @@ from student.tests.factories import (
from xmodule.x_module import XModuleMixin
from xmodule.modulestore import ModuleStoreEnum
from xmodule.modulestore.django import modulestore
from xmodule.modulestore.tests.django_utils import (
ModuleStoreTestCase,
SharedModuleStoreTestCase,
......@@ -219,7 +220,7 @@ class TestCoachDashboard(CcxTestCase, LoginEnrollmentTestCase):
# assert ccx creator has role=ccx_coach
role = CourseCcxCoachRole(course_key)
self.assertTrue(role.has_user(self.coach, refresh=True))
self.assertTrue(role.has_user(self.coach))
@ddt.data("CCX demo 1", "CCX demo 2", "CCX demo 3")
def test_create_multiple_ccx(self, ccx_name):
......@@ -712,28 +713,25 @@ def patched_get_children(self, usage_key_filter=None):
@override_settings(FIELD_OVERRIDE_PROVIDERS=(
'ccx.overrides.CustomCoursesForEdxOverrideProvider',))
@patch('xmodule.x_module.XModuleMixin.get_children', patched_get_children, spec=True)
class TestCCXGrades(ModuleStoreTestCase, LoginEnrollmentTestCase):
class TestCCXGrades(SharedModuleStoreTestCase, LoginEnrollmentTestCase):
"""
Tests for Custom Courses views.
"""
MODULESTORE = TEST_DATA_SPLIT_MODULESTORE
def setUp(self):
"""
Set up tests
"""
super(TestCCXGrades, self).setUp()
self._course = CourseFactory.create(enable_ccx=True)
@classmethod
def setUpClass(cls):
super(TestCCXGrades, cls).setUpClass()
cls._course = course = CourseFactory.create(enable_ccx=True)
# Create a course outline
self.start = datetime.datetime(
cls.mooc_start = start = datetime.datetime(
2010, 5, 12, 2, 42, tzinfo=pytz.UTC
)
chapter = ItemFactory.create(
start=self.start, parent=self._course, category='sequential'
start=start, parent=course, category='sequential'
)
self.sections = [
cls.sections = sections = [
ItemFactory.create(
parent=chapter,
category="sequential",
......@@ -741,7 +739,7 @@ class TestCCXGrades(ModuleStoreTestCase, LoginEnrollmentTestCase):
for _ in xrange(4)
]
# making problems available at class level for possible future use in tests
self.problems = [
cls.problems = [
[
ItemFactory.create(
parent=section,
......@@ -749,9 +747,15 @@ class TestCCXGrades(ModuleStoreTestCase, LoginEnrollmentTestCase):
data=StringResponseXMLFactory().build_xml(answer='foo'),
metadata={'rerandomize': 'always'}
) for _ in xrange(4)
] for section in self.sections
] for section in sections
]
def setUp(self):
"""
Set up tests
"""
super(TestCCXGrades, self).setUp()
# Create instructor account
self.coach = coach = AdminFactory.create()
self.client.login(username=coach.username, password="test")
......@@ -824,18 +828,13 @@ class TestCCXGrades(ModuleStoreTestCase, LoginEnrollmentTestCase):
rows = response.content.strip().split('\r')
headers = rows[0]
records = dict()
for i in range(1, len(rows)):
data = dict(zip(headers.strip().split(','), rows[i].strip().split(',')))
records[data['username']] = data
student_data = records[self.student.username] # pylint: disable=no-member
self.assertNotIn('HW 04', student_data)
self.assertEqual(student_data['HW 01'], '0.75')
self.assertEqual(student_data['HW 02'], '0.5')
self.assertEqual(student_data['HW 03'], '0.25')
self.assertEqual(student_data['HW Avg'], '0.5')
# picking first student records
data = dict(zip(headers.strip().split(','), rows[1].strip().split(',')))
self.assertNotIn('HW 04', data)
self.assertEqual(data['HW 01'], '0.75')
self.assertEqual(data['HW 02'], '0.5')
self.assertEqual(data['HW 03'], '0.25')
self.assertEqual(data['HW Avg'], '0.5')
@patch('courseware.views.render_to_response', intercept_renderer)
def test_student_progress(self):
......
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