fix: move service initialization from LMS runtime init to module render

This commit is contained in:
Agrendalath
2022-07-08 15:13:05 +02:00
parent dd97c74fde
commit 1afb32c775
7 changed files with 243 additions and 270 deletions

View File

@@ -50,19 +50,6 @@ class TestModuleSystem(ModuleSystem): # pylint: disable=abstract-method
"""
ModuleSystem for testing
"""
def __init__(self, **kwargs):
course_id = kwargs['course_id']
id_manager = CourseLocationManager(course_id)
kwargs.setdefault('id_reader', id_manager)
kwargs.setdefault('id_generator', id_manager)
services = kwargs.get('services', {})
services.setdefault('cache', CacheService(DoNothingCache()))
services.setdefault('field-data', DictFieldData({}))
services.setdefault('sandbox', SandboxService(contentstore, course_id))
kwargs['services'] = services
super().__init__(**kwargs)
def handler_url(self, block, handler, suffix='', query='', thirdparty=False): # lint-amnesty, pylint: disable=arguments-differ
return '{usage_id}/{handler}{suffix}?{query}'.format(
usage_id=str(block.scope_ids.usage_id),
@@ -132,6 +119,8 @@ def get_test_system(
descriptor_system = get_test_descriptor_system()
id_manager = CourseLocationManager(course_id)
def get_module(descriptor):
"""Mocks module_system get_module function"""
@@ -162,10 +151,14 @@ def get_test_system(
waittime=10,
construct_callback=Mock(name='get_test_system.xqueue.construct_callback', side_effect="/"),
),
'replace_urls': replace_url_service
'replace_urls': replace_url_service,
'cache': CacheService(DoNothingCache()),
'field-data': DictFieldData({}),
'sandbox': SandboxService(contentstore, course_id),
},
course_id=course_id,
descriptor_runtime=descriptor_system,
id_reader=id_manager,
id_generator=id_manager,
)

View File

@@ -12,6 +12,7 @@ import pytest
from django.conf import settings
from django.test import TestCase, override_settings
from lxml import etree
from opaque_keys.edx.keys import CourseKey
from opaque_keys.edx.locator import BlockUsageLocator
from pytz import UTC
from webob.request import Request
@@ -61,14 +62,15 @@ class LTIBlockTest(TestCase):
</imsx_POXBody>
</imsx_POXEnvelopeRequest>
""")
self.system = get_test_system()
self.course_id = CourseKey.from_string('org/course/run')
self.system = get_test_system(self.course_id)
self.system.publish = Mock()
self.system._services['rebind_user'] = Mock() # pylint: disable=protected-access
self.xmodule = LTIBlock(
self.system,
DictFieldData({}),
ScopeIds(None, None, None, BlockUsageLocator(self.system.course_id, 'lti', 'name'))
ScopeIds(None, None, None, BlockUsageLocator(self.course_id, 'lti', 'name'))
)
current_user = self.system.service(self.xmodule, 'user').get_current_user()
self.user_id = current_user.opt_attrs.get(ATTR_KEY_ANONYMOUS_USER_ID)
@@ -319,7 +321,7 @@ class LTIBlockTest(TestCase):
def test_lis_result_sourcedid(self):
expected_sourced_id = ':'.join(parse.quote(i) for i in (
str(self.system.course_id),
str(self.course_id),
self.xmodule.get_resource_link_id(),
self.user_id
))
@@ -539,4 +541,4 @@ class LTIBlockTest(TestCase):
"""
Tests that LTI parameter context_id is equal to course_id.
"""
assert str(self.system.course_id) == self.xmodule.context_id
assert str(self.course_id) == self.xmodule.context_id

View File

@@ -5,6 +5,7 @@ import unittest
from unittest.mock import Mock
from opaque_keys.edx.keys import CourseKey
from xblock.field_data import DictFieldData
from xblock.fields import ScopeIds
from xmodule.poll_module import PollBlock
@@ -24,8 +25,9 @@ class PollBlockTest(unittest.TestCase):
def setUp(self):
super().setUp()
self.system = get_test_system()
usage_key = self.system.course_id.make_usage_key(PollBlock.category, 'test_loc')
course_key = CourseKey.from_string('org/course/run')
self.system = get_test_system(course_key)
usage_key = course_key.make_usage_key(PollBlock.category, 'test_loc')
# ScopeIds has 4 fields: user_id, block_type, def_id, usage_id
scope_ids = ScopeIds(1, PollBlock.category, usage_key, usage_key)
self.xmodule = PollBlock(