Commit a6a00431 by Calen Pennington

Use block type, rather than class names for StudentPreference field storage in LMS

parent 520822c3
...@@ -142,7 +142,7 @@ class FieldDataCache(object): ...@@ -142,7 +142,7 @@ class FieldDataCache(object):
return self._chunked_query( return self._chunked_query(
StudentModule, StudentModule,
'module_state_key__in', 'module_state_key__in',
(descriptor.location.url() for descriptor in self.descriptors), (str(descriptor.scope_ids.usage_id) for descriptor in self.descriptors),
course_id=self.course_id, course_id=self.course_id,
student=self.user.pk, student=self.user.pk,
) )
...@@ -150,14 +150,14 @@ class FieldDataCache(object): ...@@ -150,14 +150,14 @@ class FieldDataCache(object):
return self._chunked_query( return self._chunked_query(
XModuleUserStateSummaryField, XModuleUserStateSummaryField,
'usage_id__in', 'usage_id__in',
(descriptor.location.url() for descriptor in self.descriptors), (str(descriptor.scope_ids.usage_id) for descriptor in self.descriptors),
field_name__in=set(field.name for field in fields), field_name__in=set(field.name for field in fields),
) )
elif scope == Scope.preferences: elif scope == Scope.preferences:
return self._chunked_query( return self._chunked_query(
XModuleStudentPrefsField, XModuleStudentPrefsField,
'module_type__in', 'module_type__in',
set(descriptor.module_class.__name__ for descriptor in self.descriptors), set(descriptor.scope_ids.block_type for descriptor in self.descriptors),
student=self.user.pk, student=self.user.pk,
field_name__in=set(field.name for field in fields), field_name__in=set(field.name for field in fields),
) )
......
...@@ -131,7 +131,7 @@ class UserStateSummaryFactory(DjangoModelFactory): ...@@ -131,7 +131,7 @@ class UserStateSummaryFactory(DjangoModelFactory):
field_name = 'existing_field' field_name = 'existing_field'
value = json.dumps('old_value') value = json.dumps('old_value')
usage_id = location('def_id').url() usage_id = location('usage_id').url()
class StudentPrefsFactory(DjangoModelFactory): class StudentPrefsFactory(DjangoModelFactory):
...@@ -140,7 +140,7 @@ class StudentPrefsFactory(DjangoModelFactory): ...@@ -140,7 +140,7 @@ class StudentPrefsFactory(DjangoModelFactory):
field_name = 'existing_field' field_name = 'existing_field'
value = json.dumps('old_value') value = json.dumps('old_value')
student = factory.SubFactory(UserFactory) student = factory.SubFactory(UserFactory)
module_type = 'MockProblemModule' module_type = 'mock_problem'
class StudentInfoFactory(DjangoModelFactory): class StudentInfoFactory(DjangoModelFactory):
......
...@@ -15,7 +15,7 @@ from courseware.tests.factories import StudentModuleFactory as cmfStudentModuleF ...@@ -15,7 +15,7 @@ from courseware.tests.factories import StudentModuleFactory as cmfStudentModuleF
from courseware.tests.factories import UserStateSummaryFactory from courseware.tests.factories import UserStateSummaryFactory
from courseware.tests.factories import StudentPrefsFactory, StudentInfoFactory from courseware.tests.factories import StudentPrefsFactory, StudentInfoFactory
from xblock.fields import Scope, BlockScope from xblock.fields import Scope, BlockScope, ScopeIds
from xmodule.modulestore import Location from xmodule.modulestore import Location
from django.test import TestCase from django.test import TestCase
from django.db import DatabaseError from django.db import DatabaseError
...@@ -31,7 +31,7 @@ def mock_field(scope, name): ...@@ -31,7 +31,7 @@ def mock_field(scope, name):
def mock_descriptor(fields=[]): def mock_descriptor(fields=[]):
descriptor = Mock() descriptor = Mock()
descriptor.location = location('def_id') descriptor.scope_ids = ScopeIds('user1', 'mock_problem', location('def_id'), location('usage_id'))
descriptor.module_class.fields.values.return_value = fields descriptor.module_class.fields.values.return_value = fields
descriptor.fields.values.return_value = fields descriptor.fields.values.return_value = fields
descriptor.module_class.__name__ = 'MockProblemModule' descriptor.module_class.__name__ = 'MockProblemModule'
...@@ -43,15 +43,15 @@ course_id = 'edX/test_course/test' ...@@ -43,15 +43,15 @@ course_id = 'edX/test_course/test'
# The user ids here are 1 because we make a student in the setUp functions, and # The user ids here are 1 because we make a student in the setUp functions, and
# they get an id of 1. There's an assertion in setUp to ensure that assumption # they get an id of 1. There's an assertion in setUp to ensure that assumption
# is still true. # is still true.
user_state_summary_key = partial(DjangoKeyValueStore.Key, Scope.user_state_summary, None, location('def_id')) user_state_summary_key = partial(DjangoKeyValueStore.Key, Scope.user_state_summary, None, location('usage_id'))
settings_key = partial(DjangoKeyValueStore.Key, Scope.settings, None, location('def_id')) settings_key = partial(DjangoKeyValueStore.Key, Scope.settings, None, location('usage_id'))
user_state_key = partial(DjangoKeyValueStore.Key, Scope.user_state, 1, location('def_id')) user_state_key = partial(DjangoKeyValueStore.Key, Scope.user_state, 1, location('usage_id'))
prefs_key = partial(DjangoKeyValueStore.Key, Scope.preferences, 1, 'MockProblemModule') prefs_key = partial(DjangoKeyValueStore.Key, Scope.preferences, 1, 'mock_problem')
user_info_key = partial(DjangoKeyValueStore.Key, Scope.user_info, 1, None) user_info_key = partial(DjangoKeyValueStore.Key, Scope.user_info, 1, None)
class StudentModuleFactory(cmfStudentModuleFactory): class StudentModuleFactory(cmfStudentModuleFactory):
module_state_key = location('def_id').url() module_state_key = location('usage_id').url()
course_id = course_id course_id = course_id
...@@ -177,7 +177,7 @@ class TestMissingStudentModule(TestCase): ...@@ -177,7 +177,7 @@ class TestMissingStudentModule(TestCase):
student_module = StudentModule.objects.all()[0] student_module = StudentModule.objects.all()[0]
self.assertEquals({'a_field': 'a_value'}, json.loads(student_module.state)) self.assertEquals({'a_field': 'a_value'}, json.loads(student_module.state))
self.assertEquals(self.user, student_module.student) self.assertEquals(self.user, student_module.student)
self.assertEquals(location('def_id').url(), student_module.module_state_key) self.assertEquals(location('usage_id').url(), student_module.module_state_key)
self.assertEquals(course_id, student_module.course_id) self.assertEquals(course_id, student_module.course_id)
def test_delete_field_from_missing_student_module(self): def test_delete_field_from_missing_student_module(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