Add config models and a configuration service to configure LTI Consumer.
This commit is contained in:
@@ -1,6 +1,9 @@
|
||||
"""
|
||||
Module contains various XModule/XBlock services
|
||||
"""
|
||||
import inspect
|
||||
|
||||
from config_models.models import ConfigurationModel
|
||||
from django.conf import settings
|
||||
|
||||
|
||||
@@ -61,3 +64,32 @@ class SettingsService(object):
|
||||
xblock_settings_bucket = getattr(block, self.xblock_settings_bucket_selector, block.unmixed_class.__name__)
|
||||
xblock_settings = settings.XBLOCK_SETTINGS if hasattr(settings, "XBLOCK_SETTINGS") else {}
|
||||
return xblock_settings.get(xblock_settings_bucket, actual_default)
|
||||
|
||||
|
||||
# TODO: ConfigurationService and its usage will be removed as a part of EDUCATOR-121
|
||||
# reference: https://openedx.atlassian.net/browse/EDUCATOR-121
|
||||
class ConfigurationService(object):
|
||||
"""
|
||||
An XBlock service to talk with the Configuration Models. This service should provide
|
||||
a pathway to Configuration Model which is designed to configure the corresponding XBlock.
|
||||
"""
|
||||
def __init__(self, configuration_model):
|
||||
"""
|
||||
Class initializer, this exposes configuration model to XBlock.
|
||||
|
||||
Arguments:
|
||||
configuration_model (ConfigurationModel): configurations for an XBlock
|
||||
|
||||
Raises:
|
||||
exception (ValueError): when configuration_model is not a subclass of
|
||||
ConfigurationModel.
|
||||
"""
|
||||
if not (inspect.isclass(configuration_model) and issubclass(configuration_model, ConfigurationModel)):
|
||||
raise ValueError(
|
||||
"Expected ConfigurationModel got {0} of type {1}".format(
|
||||
configuration_model,
|
||||
type(configuration_model)
|
||||
)
|
||||
)
|
||||
|
||||
self.configuration = configuration_model
|
||||
|
||||
@@ -6,11 +6,12 @@ import ddt
|
||||
import mock
|
||||
from unittest import TestCase
|
||||
|
||||
from config_models.models import ConfigurationModel
|
||||
from django.conf import settings
|
||||
from django.test.utils import override_settings
|
||||
|
||||
from xblock.runtime import Mixologist
|
||||
from xmodule.services import SettingsService
|
||||
from xmodule.services import ConfigurationService, SettingsService
|
||||
|
||||
|
||||
class _DummyBlock(object):
|
||||
@@ -18,6 +19,20 @@ class _DummyBlock(object):
|
||||
pass
|
||||
|
||||
|
||||
class DummyConfig(ConfigurationModel):
|
||||
"""
|
||||
Dummy Configuration
|
||||
"""
|
||||
pass
|
||||
|
||||
|
||||
class DummyUnexpected(object):
|
||||
"""
|
||||
Dummy Unexpected Class
|
||||
"""
|
||||
pass
|
||||
|
||||
|
||||
@ddt.ddt
|
||||
class TestSettingsService(TestCase):
|
||||
""" Test SettingsService """
|
||||
@@ -76,3 +91,23 @@ class TestSettingsService(TestCase):
|
||||
block = mixologist.mix(_DummyBlock)
|
||||
self.assertEqual(settings.XBLOCK_SETTINGS, {"_DummyBlock": [1, 2, 3]})
|
||||
self.assertEqual(self.settings_service.get_settings_bucket(block), [1, 2, 3])
|
||||
|
||||
|
||||
class TestConfigurationService(TestCase):
|
||||
"""
|
||||
Tests for ConfigurationService
|
||||
"""
|
||||
def test_given_unexpected_class_throws_value_error(self):
|
||||
"""
|
||||
Test that instantiating ConfigurationService raises exception on passing
|
||||
a class which is not subclass of ConfigurationModel.
|
||||
"""
|
||||
with self.assertRaises(ValueError):
|
||||
ConfigurationService(DummyUnexpected)
|
||||
|
||||
def test_configuration_service(self):
|
||||
"""
|
||||
Test the correct configuration on instantiating ConfigurationService.
|
||||
"""
|
||||
config_service = ConfigurationService(DummyConfig)
|
||||
self.assertEqual(config_service.configuration, DummyConfig)
|
||||
|
||||
Reference in New Issue
Block a user