Add config models and a configuration service to configure LTI Consumer.

This commit is contained in:
Qubad786
2017-03-30 16:54:17 +05:00
parent 6ea581793d
commit 4b2488b5ee
9 changed files with 317 additions and 5 deletions

View File

@@ -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

View File

@@ -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)