diff --git a/cms/djangoapps/contentstore/management/commands/edit_course_tabs.py b/cms/djangoapps/contentstore/management/commands/edit_course_tabs.py index 0381d638d8..529d2f881e 100644 --- a/cms/djangoapps/contentstore/management/commands/edit_course_tabs.py +++ b/cms/djangoapps/contentstore/management/commands/edit_course_tabs.py @@ -25,7 +25,7 @@ def print_course(course): print('num type name') for index, item in enumerate(course.tabs): print(index + 1, '"' + item.get('type') + '"', '"' + item.get('name', '') + '"') - # If a course is bad we will get an error descriptor here, dump it and die instead of + # If a course is bad we will get an error here, dump it and die instead of # just sending up the error that .id doesn't exist. except AttributeError: print(course) diff --git a/cms/djangoapps/contentstore/tests/test_contentstore.py b/cms/djangoapps/contentstore/tests/test_contentstore.py index be120824a4..f7046cc01a 100644 --- a/cms/djangoapps/contentstore/tests/test_contentstore.py +++ b/cms/djangoapps/contentstore/tests/test_contentstore.py @@ -1713,17 +1713,17 @@ class MetadataSaveTestCase(ContentStoreTestCase): """ video_data = VideoBlock.parse_video_xml(video_sample_xml) video_data.pop('source') - self.video_descriptor = BlockFactory.create( + self.video_block = BlockFactory.create( parent_location=course.location, category='video', **video_data ) def test_metadata_not_persistence(self): """ - Test that descriptors which set metadata fields in their + Test that blocks which set metadata fields in their constructor are correctly deleted. """ - self.assertIn('html5_sources', own_metadata(self.video_descriptor)) + self.assertIn('html5_sources', own_metadata(self.video_block)) attrs_to_strip = { 'show_captions', 'youtube_id_1_0', @@ -1736,13 +1736,13 @@ class MetadataSaveTestCase(ContentStoreTestCase): 'track' } - location = self.video_descriptor.location + location = self.video_block.location for field_name in attrs_to_strip: - delattr(self.video_descriptor, field_name) + delattr(self.video_block, field_name) - self.assertNotIn('html5_sources', own_metadata(self.video_descriptor)) - self.store.update_item(self.video_descriptor, self.user.id) + self.assertNotIn('html5_sources', own_metadata(self.video_block)) + self.store.update_item(self.video_block, self.user.id) block = self.store.get_item(location) self.assertNotIn('html5_sources', own_metadata(block)) @@ -2047,12 +2047,12 @@ class ContentLicenseTest(ContentStoreTestCase): def test_video_license_export(self): content_store = contentstore() root_dir = path(mkdtemp_clean()) - video_descriptor = BlockFactory.create( + video_block = BlockFactory.create( parent_location=self.course.location, category='video', license="all-rights-reserved" ) export_course_to_xml(self.store, content_store, self.course.id, root_dir, 'test_license') - fname = f"{video_descriptor.scope_ids.usage_id.block_id}.xml" + fname = f"{video_block.scope_ids.usage_id.block_id}.xml" video_file_path = root_dir / "test_license" / "video" / fname with video_file_path.open() as f: video_xml = etree.parse(f) diff --git a/cms/djangoapps/contentstore/tests/test_course_settings.py b/cms/djangoapps/contentstore/tests/test_course_settings.py index a135faf067..6a1977f375 100644 --- a/cms/djangoapps/contentstore/tests/test_course_settings.py +++ b/cms/djangoapps/contentstore/tests/test_course_settings.py @@ -885,33 +885,33 @@ class CourseGradingTest(CourseTestCase): @mock.patch('cms.djangoapps.contentstore.signals.signals.GRADING_POLICY_CHANGED.send') def test_update_section_grader_type(self, send_signal, tracker, uuid): uuid.return_value = 'mockUUID' - # Get the descriptor and the section_grader_type and assert they are the default values - descriptor = modulestore().get_item(self.course.location) + # Get the block and the section_grader_type and assert they are the default values + block = modulestore().get_item(self.course.location) section_grader_type = CourseGradingModel.get_section_grader_type(self.course.location) self.assertEqual('notgraded', section_grader_type['graderType']) - self.assertEqual(None, descriptor.format) - self.assertEqual(False, descriptor.graded) + self.assertEqual(None, block.format) + self.assertEqual(False, block.graded) # Change the default grader type to Homework, which should also mark the section as graded CourseGradingModel.update_section_grader_type(self.course, 'Homework', self.user) - descriptor = modulestore().get_item(self.course.location) + block = modulestore().get_item(self.course.location) section_grader_type = CourseGradingModel.get_section_grader_type(self.course.location) grading_policy_1 = self._grading_policy_hash_for_course() self.assertEqual('Homework', section_grader_type['graderType']) - self.assertEqual('Homework', descriptor.format) - self.assertEqual(True, descriptor.graded) + self.assertEqual('Homework', block.format) + self.assertEqual(True, block.graded) # Change the grader type back to notgraded, which should also unmark the section as graded CourseGradingModel.update_section_grader_type(self.course, 'notgraded', self.user) - descriptor = modulestore().get_item(self.course.location) + block = modulestore().get_item(self.course.location) section_grader_type = CourseGradingModel.get_section_grader_type(self.course.location) grading_policy_2 = self._grading_policy_hash_for_course() self.assertEqual('notgraded', section_grader_type['graderType']) - self.assertEqual(None, descriptor.format) - self.assertEqual(False, descriptor.graded) + self.assertEqual(None, block.format) + self.assertEqual(False, block.graded) # one for each call to update_section_grader_type() send_signal.assert_has_calls([ diff --git a/cms/djangoapps/contentstore/tests/test_i18n.py b/cms/djangoapps/contentstore/tests/test_i18n.py index e38094a2d3..db5746f893 100644 --- a/cms/djangoapps/contentstore/tests/test_i18n.py +++ b/cms/djangoapps/contentstore/tests/test_i18n.py @@ -69,19 +69,19 @@ class TestXBlockI18nService(ModuleStoreTestCase): self.request = mock.Mock() self.course = CourseFactory.create() self.field_data = mock.Mock() - self.descriptor = BlockFactory(category="pure", parent=self.course) + self.block = BlockFactory(category="pure", parent=self.course) _prepare_runtime_for_preview( self.request, - self.descriptor, + self.block, self.field_data, ) self.addCleanup(translation.deactivate) - def get_block_i18n_service(self, descriptor): + def get_block_i18n_service(self, block): """ return the block i18n service. """ - i18n_service = self.descriptor.runtime.service(descriptor, 'i18n') + i18n_service = self.block.runtime.service(block, 'i18n') self.assertIsNotNone(i18n_service) self.assertIsInstance(i18n_service, XBlockI18nService) return i18n_service @@ -113,7 +113,7 @@ class TestXBlockI18nService(ModuleStoreTestCase): self.module.ugettext = self.old_ugettext self.module.gettext = self.old_ugettext - i18n_service = self.get_block_i18n_service(self.descriptor) + i18n_service = self.get_block_i18n_service(self.block) # Activate french, so that if the fr files haven't been loaded, they will be loaded now. with translation.override("fr"): @@ -150,13 +150,13 @@ class TestXBlockI18nService(ModuleStoreTestCase): translation.activate("es") with mock.patch('gettext.translation', return_value=_translator(domain='text', localedir=localedir, languages=[get_language()])): - i18n_service = self.get_block_i18n_service(self.descriptor) + i18n_service = self.get_block_i18n_service(self.block) self.assertEqual(i18n_service.ugettext('Hello'), 'es-hello-world') translation.activate("ar") with mock.patch('gettext.translation', return_value=_translator(domain='text', localedir=localedir, languages=[get_language()])): - i18n_service = self.get_block_i18n_service(self.descriptor) + i18n_service = self.get_block_i18n_service(self.block) self.assertEqual(get_gettext(i18n_service)('Hello'), 'Hello') self.assertNotEqual(get_gettext(i18n_service)('Hello'), 'fr-hello-world') self.assertNotEqual(get_gettext(i18n_service)('Hello'), 'es-hello-world') @@ -164,14 +164,14 @@ class TestXBlockI18nService(ModuleStoreTestCase): translation.activate("fr") with mock.patch('gettext.translation', return_value=_translator(domain='text', localedir=localedir, languages=[get_language()])): - i18n_service = self.get_block_i18n_service(self.descriptor) + i18n_service = self.get_block_i18n_service(self.block) self.assertEqual(i18n_service.ugettext('Hello'), 'fr-hello-world') def test_i18n_service_callable(self): """ Test: i18n service should be callable in studio. """ - self.assertTrue(callable(self.descriptor.runtime._services.get('i18n'))) # pylint: disable=protected-access + self.assertTrue(callable(self.block.runtime._services.get('i18n'))) # pylint: disable=protected-access class InternationalizationTest(ModuleStoreTestCase): diff --git a/cms/djangoapps/contentstore/tests/test_libraries.py b/cms/djangoapps/contentstore/tests/test_libraries.py index 3e850e4794..019f67a594 100644 --- a/cms/djangoapps/contentstore/tests/test_libraries.py +++ b/cms/djangoapps/contentstore/tests/test_libraries.py @@ -114,7 +114,7 @@ class LibraryTestCase(ModuleStoreTestCase): self.assertEqual(response.status_code, status_code_expected) return modulestore().get_item(lib_content_block.location) - def _bind_block(self, descriptor, user=None): + def _bind_block(self, block, user=None): """ Helper to use the CMS's module system so we can access student-specific fields. """ @@ -123,7 +123,7 @@ class LibraryTestCase(ModuleStoreTestCase): if user not in self.session_data: self.session_data[user] = {} request = Mock(user=user, session=self.session_data[user]) - _load_preview_block(request, descriptor) + _load_preview_block(request, block) def _update_block(self, usage_key, metadata): """ @@ -174,13 +174,13 @@ class TestLibraries(LibraryTestCase): lc_block = self._refresh_children(lc_block) # Now, we want to make sure that .children has the total # of potential - # children, and that get_child_descriptors() returns the actual children + # children, and that get_child_blocks() returns the actual children # chosen for a given student. - # In order to be able to call get_child_descriptors(), we must first + # In order to be able to call get_child_blocks(), we must first # call bind_for_student: self._bind_block(lc_block) self.assertEqual(len(lc_block.children), num_to_create) - self.assertEqual(len(lc_block.get_child_descriptors()), num_expected) + self.assertEqual(len(lc_block.get_child_blocks()), num_expected) def test_consistent_children(self): """ @@ -204,7 +204,7 @@ class TestLibraries(LibraryTestCase): """ Fetch the child shown to the current user. """ - children = block.get_child_descriptors() + children = block.get_child_blocks() self.assertEqual(len(children), 1) return children[0] diff --git a/cms/djangoapps/contentstore/tests/test_utils.py b/cms/djangoapps/contentstore/tests/test_utils.py index 5b4f4338b2..4b6dc100db 100644 --- a/cms/djangoapps/contentstore/tests/test_utils.py +++ b/cms/djangoapps/contentstore/tests/test_utils.py @@ -620,7 +620,7 @@ class GetUserPartitionInfoTest(ModuleStoreTestCase): self.assertEqual(partitions[0]["scheme"], "random") def _set_partitions(self, partitions): - """Set the user partitions of the course descriptor. """ + """Set the user partitions of the course block. """ self.course.user_partitions = partitions self.course = self.store.update_item(self.course, ModuleStoreEnum.UserID.test) diff --git a/cms/djangoapps/contentstore/tests/utils.py b/cms/djangoapps/contentstore/tests/utils.py index b58ec17502..4c2b5b5adf 100644 --- a/cms/djangoapps/contentstore/tests/utils.py +++ b/cms/djangoapps/contentstore/tests/utils.py @@ -191,8 +191,8 @@ class CourseTestCase(ProceduralCourseTestMixin, ModuleStoreTestCase): """ Test getting the editing HTML for each vertical. """ # assert is here to make sure that the course being tested actually has verticals (units) to check. self.assertGreater(len(items), 0, "Course has no verticals (units) to check") - for descriptor in items: - resp = self.client.get_html(get_url('container_handler', descriptor.location)) + for block in items: + resp = self.client.get_html(get_url('container_handler', block.location)) self.assertEqual(resp.status_code, 200) def assertAssetsEqual(self, asset_son, course1_id, course2_id): diff --git a/cms/djangoapps/contentstore/utils.py b/cms/djangoapps/contentstore/utils.py index 22a07d3ccd..0c4141b5d2 100644 --- a/cms/djangoapps/contentstore/utils.py +++ b/cms/djangoapps/contentstore/utils.py @@ -372,7 +372,7 @@ def get_split_group_display_name(xblock, course): Arguments: xblock (XBlock): The courseware component. - course (XBlock): The course descriptor. + course (XBlock): The course block. Returns: group name (String): Group name of the matching group xblock. @@ -399,14 +399,14 @@ def get_user_partition_info(xblock, schemes=None, course=None): schemes (iterable of str): If provided, filter partitions to include only schemes with the provided names. - course (XBlock): The course descriptor. If provided, uses this to look up the user partitions + course (XBlock): The course block. If provided, uses this to look up the user partitions instead of loading the course. This is useful if we're calling this function multiple times for the same course want to minimize queries to the modulestore. Returns: list Example Usage: - >>> get_user_partition_info(block, schemes=["cohort", "verification"]) + >>> get_user_partition_info(xblock, schemes=["cohort", "verification"]) [ { "id": 12345, @@ -509,7 +509,7 @@ def get_visibility_partition_info(xblock, course=None): Arguments: xblock (XBlock): The component being edited. - course (XBlock): The course descriptor. If provided, uses this to look up the user partitions + course (XBlock): The course block. If provided, uses this to look up the user partitions instead of loading the course. This is useful if we're calling this function multiple times for the same course want to minimize queries to the modulestore. @@ -569,8 +569,8 @@ def get_xblock_aside_instance(usage_key): :param usage_key: Usage key of aside xblock """ try: - descriptor = modulestore().get_item(usage_key.usage_key) - for aside in descriptor.runtime.get_asides(descriptor): + xblock = modulestore().get_item(usage_key.usage_key) + for aside in xblock.runtime.get_asides(xblock): if aside.scope_ids.block_type == usage_key.aside_type: return aside except ItemNotFoundError: diff --git a/cms/djangoapps/contentstore/views/certificates.py b/cms/djangoapps/contentstore/views/certificates.py index 6535e0a857..3c43ab1065 100644 --- a/cms/djangoapps/contentstore/views/certificates.py +++ b/cms/djangoapps/contentstore/views/certificates.py @@ -128,7 +128,7 @@ class CertificateValidationError(CertificateException): class CertificateManager: """ The CertificateManager is responsible for storage, retrieval, and manipulation of Certificates - Certificates are not stored in the Django ORM, they are a field/setting on the course descriptor + Certificates are not stored in the Django ORM, they are a field/setting on the course block """ @staticmethod def parse(json_string): diff --git a/cms/djangoapps/contentstore/views/component.py b/cms/djangoapps/contentstore/views/component.py index 7f774ab161..d58f601abc 100644 --- a/cms/djangoapps/contentstore/views/component.py +++ b/cms/djangoapps/contentstore/views/component.py @@ -552,18 +552,18 @@ def component_handler(request, usage_key_string, handler, suffix=''): try: if is_xblock_aside(usage_key): - # Get the descriptor for the block being wrapped by the aside (not the aside itself) - descriptor = modulestore().get_item(usage_key.usage_key) - handler_descriptor = get_aside_from_xblock(descriptor, usage_key.aside_type) - asides = [handler_descriptor] + # Get the block being wrapped by the aside (not the aside itself) + block = modulestore().get_item(usage_key.usage_key) + handler_block = get_aside_from_xblock(block, usage_key.aside_type) + asides = [handler_block] else: - descriptor = modulestore().get_item(usage_key) - handler_descriptor = descriptor + block = modulestore().get_item(usage_key) + handler_block = block asides = [] - load_services_for_studio(handler_descriptor.runtime, request.user) - resp = handler_descriptor.handle(handler, req, suffix) + load_services_for_studio(handler_block.runtime, request.user) + resp = handler_block.handle(handler, req, suffix) except NoSuchHandlerError: - log.info("XBlock %s attempted to access missing handler %r", handler_descriptor, handler, exc_info=True) + log.info("XBlock %s attempted to access missing handler %r", handler_block, handler, exc_info=True) raise Http404 # lint-amnesty, pylint: disable=raise-missing-from # unintentional update to handle any side effects of handle call @@ -572,7 +572,7 @@ def component_handler(request, usage_key_string, handler, suffix=''): # TNL 101-62 studio write permission is also checked for editing content. if has_course_author_access(request.user, usage_key.course_key): - modulestore().update_item(descriptor, request.user.id, asides=asides) + modulestore().update_item(block, request.user.id, asides=asides) else: #fail quietly if user is not course author. log.warning( diff --git a/cms/djangoapps/contentstore/views/entrance_exam.py b/cms/djangoapps/contentstore/views/entrance_exam.py index 63917d17f6..ced3ed531b 100644 --- a/cms/djangoapps/contentstore/views/entrance_exam.py +++ b/cms/djangoapps/contentstore/views/entrance_exam.py @@ -176,9 +176,9 @@ def _get_entrance_exam(request, course_key): except InvalidKeyError: return HttpResponse(status=404) try: - exam_descriptor = modulestore().get_item(exam_key) + exam_block = modulestore().get_item(exam_key) return HttpResponse( # lint-amnesty, pylint: disable=http-response-with-content-type-json - dump_js_escaped_json({'locator': str(exam_descriptor.location)}), + dump_js_escaped_json({'locator': str(exam_block.location)}), status=200, content_type='application/json') except ItemNotFoundError: return HttpResponse(status=404) diff --git a/cms/djangoapps/contentstore/views/preview.py b/cms/djangoapps/contentstore/views/preview.py index 12b00d16e6..1b28e65a4c 100644 --- a/cms/djangoapps/contentstore/views/preview.py +++ b/cms/djangoapps/contentstore/views/preview.py @@ -11,6 +11,7 @@ from django.urls import reverse from django.utils.translation import gettext as _ from django.views.decorators.clickjacking import xframe_options_exempt from opaque_keys.edx.keys import UsageKey +from rest_framework.request import Request from web_fragments.fragment import Fragment from xblock.django.request import django_to_webob_request, webob_to_django_response from xblock.exceptions import NoSuchHandlerError @@ -24,7 +25,7 @@ from xmodule.services import SettingsService, TeamsConfigurationService from xmodule.studio_editable import has_author_view from xmodule.util.sandboxing import SandboxService from xmodule.util.xmodule_django import add_webpack_to_fragment -from xmodule.x_module import AUTHOR_VIEW, PREVIEW_VIEWS, STUDENT_VIEW +from xmodule.x_module import AUTHOR_VIEW, PREVIEW_VIEWS, STUDENT_VIEW, XModuleMixin from cms.djangoapps.xblock_config.models import StudioConfig from cms.djangoapps.contentstore.toggles import individualize_anonymous_user_id, ENABLE_COPY_PASTE_FEATURE from cms.lib.xblock.field_data import CmsFieldData @@ -65,8 +66,8 @@ def preview_handler(request, usage_key_string, handler, suffix=''): """ usage_key = UsageKey.from_string(usage_key_string) - descriptor = modulestore().get_item(usage_key) - instance = _load_preview_block(request, descriptor) + block = modulestore().get_item(usage_key) + instance = _load_preview_block(request, block) # Let the module handle the AJAX req = django_to_webob_request(request) @@ -154,6 +155,7 @@ def _prepare_runtime_for_preview(request, block, field_data): required for rendering block previews. request: The active django request + block: An XBlock field_data: Wrapped field data for previews """ @@ -256,29 +258,29 @@ class StudioPartitionService(PartitionService): return None -def _load_preview_block(request, descriptor): +def _load_preview_block(request: Request, block: XModuleMixin): """ - Return a preview XBlock instantiated from the supplied descriptor. Will use mutable fields + Return a preview XBlock instantiated from the supplied block. Will use mutable fields if XBlock supports an author_view. Otherwise, will use immutable fields and student_view. request: The active django request - descriptor: An XModuleDescriptor + block: An XModuleMixin """ student_data = KvsFieldData(SessionKeyValueStore(request)) - if has_author_view(descriptor): + if has_author_view(block): wrapper = partial(CmsFieldData, student_data=student_data) else: wrapper = partial(LmsFieldData, student_data=student_data) # wrap the _field_data upfront to pass to _prepare_runtime_for_preview - wrapped_field_data = wrapper(descriptor._field_data) # pylint: disable=protected-access - _prepare_runtime_for_preview(request, descriptor, wrapped_field_data) + wrapped_field_data = wrapper(block._field_data) # pylint: disable=protected-access + _prepare_runtime_for_preview(request, block, wrapped_field_data) - descriptor.bind_for_student( + block.bind_for_student( request.user.id, [wrapper] ) - return descriptor + return block def _is_xblock_reorderable(xblock, context): @@ -332,12 +334,12 @@ def _studio_wrap_xblock(xblock, view, frag, context, display_name_only=False): return frag -def get_preview_fragment(request, descriptor, context): +def get_preview_fragment(request, block, context): """ Returns the HTML returned by the XModule's student_view or author_view (if available), - specified by the descriptor and idx. + specified by the block and idx. """ - block = _load_preview_block(request, descriptor) + block = _load_preview_block(request, block) preview_view = AUTHOR_VIEW if has_author_view(block) else STUDENT_VIEW diff --git a/cms/djangoapps/contentstore/views/tests/test_block.py b/cms/djangoapps/contentstore/views/tests/test_block.py index 863da2e02f..d2345abe26 100644 --- a/cms/djangoapps/contentstore/views/tests/test_block.py +++ b/cms/djangoapps/contentstore/views/tests/test_block.py @@ -2159,10 +2159,10 @@ class TestComponentHandler(TestCase): self.modulestore = patcher.start() self.addCleanup(patcher.stop) - # component_handler calls modulestore.get_item to get the descriptor of the requested xBlock. + # component_handler calls modulestore.get_item to get the requested xBlock. # Here, we mock the return value of modulestore.get_item so it can be used to mock the handler - # of the xBlock descriptor. - self.descriptor = self.modulestore.return_value.get_item.return_value + # of the xBlock. + self.block = self.modulestore.return_value.get_item.return_value self.usage_key = BlockUsageLocator( CourseLocator('dummy_org', 'dummy_course', 'dummy_run'), 'dummy_category', 'dummy_name' @@ -2173,7 +2173,7 @@ class TestComponentHandler(TestCase): self.request.user = self.user def test_invalid_handler(self): - self.descriptor.handle.side_effect = NoSuchHandlerError + self.block.handle.side_effect = NoSuchHandlerError with self.assertRaises(Http404): component_handler(self.request, self.usage_key_string, 'invalid_handler') @@ -2185,7 +2185,7 @@ class TestComponentHandler(TestCase): self.assertEqual(request.method, method) return Response() - self.descriptor.handle = check_handler + self.block.handle = check_handler # Have to use the right method to create the request to get the HTTP method that we want req_factory_method = getattr(self.request_factory, method.lower()) @@ -2198,7 +2198,7 @@ class TestComponentHandler(TestCase): def create_response(handler, request, suffix): # lint-amnesty, pylint: disable=unused-argument return Response(status_code=status_code) - self.descriptor.handle = create_response + self.block.handle = create_response self.assertEqual(component_handler(self.request, self.usage_key_string, 'dummy_handler').status_code, status_code) @@ -2219,7 +2219,7 @@ class TestComponentHandler(TestCase): self.request.user = UserFactory() mock_handler = 'dummy_handler' - self.descriptor.handle = create_response + self.block.handle = create_response with patch( 'cms.djangoapps.contentstore.views.component.is_xblock_aside', @@ -2253,7 +2253,7 @@ class TestComponentHandler(TestCase): else self.usage_key_string ) - self.descriptor.handle = create_response + self.block.handle = create_response with patch( 'cms.djangoapps.contentstore.views.component.is_xblock_aside', diff --git a/cms/djangoapps/contentstore/views/tests/test_preview.py b/cms/djangoapps/contentstore/views/tests/test_preview.py index c8d1266853..7e407c966d 100644 --- a/cms/djangoapps/contentstore/views/tests/test_preview.py +++ b/cms/djangoapps/contentstore/views/tests/test_preview.py @@ -213,13 +213,13 @@ class StudioXBlockServiceBindingTest(ModuleStoreTestCase): """ Tests that the 'user' and 'i18n' services are provided by the Studio runtime. """ - descriptor = BlockFactory(category="pure", parent=self.course) + block = BlockFactory(category="pure", parent=self.course) _prepare_runtime_for_preview( self.request, - descriptor, + block, self.field_data, ) - service = descriptor.runtime.service(descriptor, expected_service) + service = block.runtime.service(block, expected_service) self.assertIsNotNone(service) @@ -242,32 +242,31 @@ class CmsModuleSystemShimTest(ModuleStoreTestCase): self.request = RequestFactory().get('/dummy-url') self.request.user = self.user self.request.session = {} - self.descriptor = BlockFactory(category="video", parent=course) self.field_data = mock.Mock() self.contentstore = contentstore() - self.descriptor = BlockFactory(category="problem", parent=course) + self.block = BlockFactory(category="problem", parent=course) _prepare_runtime_for_preview( self.request, - block=self.descriptor, + block=self.block, field_data=mock.Mock(), ) self.course = self.store.get_item(course.location) def test_get_user_role(self): - assert self.descriptor.runtime.get_user_role() == 'staff' + assert self.block.runtime.get_user_role() == 'staff' @XBlock.register_temp_plugin(PureXBlock, identifier='pure') def test_render_template(self): - descriptor = BlockFactory(category="pure", parent=self.course) - html = get_preview_fragment(self.request, descriptor, {'element_id': 142}).content + block = BlockFactory(category="pure", parent=self.course) + html = get_preview_fragment(self.request, block, {'element_id': 142}).content assert '