Commit ad45681a by Michael Frey Committed by Douglas Hall

mjfrey/micro-settings-merge: Override base dictionary keys with microsite configuration keys

* mattdrayer: Add helpers.get_value test
* mattdrayer: Change to simpler implementation, per @douglashall
* mattdrayer: Address quality violations and test failures
parent 40543ca0
...@@ -9,21 +9,22 @@ import ddt ...@@ -9,21 +9,22 @@ import ddt
import freezegun import freezegun
from mock import patch from mock import patch
from nose.plugins.attrib import attr from nose.plugins.attrib import attr
from django.conf import settings from django.conf import settings
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from lms.djangoapps.commerce.tests import test_utils as ecomm_test_utils
from openedx.core.djangoapps.theming.tests import test_util as theming_test_utils
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from util.testing import UrlResetMixin
from embargo.test_utils import restrict_course
from xmodule.modulestore.django import modulestore from xmodule.modulestore.django import modulestore
from xmodule.modulestore.tests.factories import CourseFactory from xmodule.modulestore.tests.factories import CourseFactory
from course_modes.models import CourseMode, Mode
from course_modes.tests.factories import CourseModeFactory from course_modes.tests.factories import CourseModeFactory
from student.tests.factories import CourseEnrollmentFactory, UserFactory from embargo.test_utils import restrict_course
from student.models import CourseEnrollment from student.models import CourseEnrollment
import lms.djangoapps.commerce.tests.test_utils as ecomm_test_utils from student.tests.factories import CourseEnrollmentFactory, UserFactory
from course_modes.models import CourseMode, Mode from util.testing import UrlResetMixin
from openedx.core.djangoapps.theming.test_util import with_is_edx_domain
@attr('shard_3') @attr('shard_3')
...@@ -373,7 +374,7 @@ class CourseModeViewTest(UrlResetMixin, ModuleStoreTestCase): ...@@ -373,7 +374,7 @@ class CourseModeViewTest(UrlResetMixin, ModuleStoreTestCase):
self.assertEquals(course_modes, expected_modes) self.assertEquals(course_modes, expected_modes)
@unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms') @unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms')
@with_is_edx_domain(True) @theming_test_utils.with_is_edx_domain(True)
def test_hide_nav(self): def test_hide_nav(self):
# Create the course modes # Create the course modes
for mode in ["honor", "verified"]: for mode in ["honor", "verified"]:
......
...@@ -20,7 +20,7 @@ from django.conf import settings ...@@ -20,7 +20,7 @@ from django.conf import settings
from edxmako.shortcuts import render_to_string from edxmako.shortcuts import render_to_string
from util.request import safe_get_host from util.request import safe_get_host
from util.testing import EventTestMixin from util.testing import EventTestMixin
from openedx.core.djangoapps.theming.test_util import with_is_edx_domain from openedx.core.djangoapps.theming.tests.test_util import with_is_edx_domain
from openedx.core.djangoapps.theming import helpers as theming_helpers from openedx.core.djangoapps.theming import helpers as theming_helpers
......
...@@ -46,7 +46,7 @@ from certificates.tests.factories import GeneratedCertificateFactory # pylint: ...@@ -46,7 +46,7 @@ from certificates.tests.factories import GeneratedCertificateFactory # pylint:
from lms.djangoapps.verify_student.models import SoftwareSecurePhotoVerification from lms.djangoapps.verify_student.models import SoftwareSecurePhotoVerification
import shoppingcart # pylint: disable=import-error import shoppingcart # pylint: disable=import-error
from openedx.core.djangoapps.programs.tests.mixins import ProgramsApiConfigMixin from openedx.core.djangoapps.programs.tests.mixins import ProgramsApiConfigMixin
from openedx.core.djangoapps.theming.test_util import with_is_edx_domain from openedx.core.djangoapps.theming.tests.test_util import with_is_edx_domain
# Explicitly import the cache from ConfigurationModel so we can reset it after each test # Explicitly import the cache from ConfigurationModel so we can reset it after each test
from config_models.models import cache from config_models.models import cache
......
...@@ -10,7 +10,7 @@ import mock ...@@ -10,7 +10,7 @@ import mock
import ddt import ddt
from config_models.models import cache from config_models.models import cache
from branding.models import BrandingApiConfig from branding.models import BrandingApiConfig
from openedx.core.djangoapps.theming.test_util import with_edx_domain_context from openedx.core.djangoapps.theming.tests.test_util import with_edx_domain_context
@ddt.ddt @ddt.ddt
......
...@@ -8,7 +8,7 @@ from django.test import TestCase ...@@ -8,7 +8,7 @@ from django.test import TestCase
import mock import mock
from student.tests.factories import UserFactory from student.tests.factories import UserFactory
from openedx.core.djangoapps.theming.test_util import with_is_edx_domain from openedx.core.djangoapps.theming.tests.test_util import with_is_edx_domain
class UserMixin(object): class UserMixin(object):
......
...@@ -9,7 +9,7 @@ from wiki.models import URLPath ...@@ -9,7 +9,7 @@ from wiki.models import URLPath
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory from xmodule.modulestore.tests.factories import CourseFactory
from openedx.core.djangoapps.theming.test_util import with_comprehensive_theme from openedx.core.djangoapps.theming.tests.test_util import with_comprehensive_theme
from courseware.tests.factories import InstructorFactory from courseware.tests.factories import InstructorFactory
from course_wiki.views import get_or_create_root from course_wiki.views import get_or_create_root
......
...@@ -6,7 +6,7 @@ from django.test import TestCase ...@@ -6,7 +6,7 @@ from django.test import TestCase
from path import path # pylint: disable=no-name-in-module from path import path # pylint: disable=no-name-in-module
from django.contrib import staticfiles from django.contrib import staticfiles
from openedx.core.djangoapps.theming.test_util import with_comprehensive_theme from openedx.core.djangoapps.theming.tests.test_util import with_comprehensive_theme
from openedx.core.lib.tempdir import mkdtemp_clean from openedx.core.lib.tempdir import mkdtemp_clean
......
...@@ -9,7 +9,7 @@ from django.conf import settings ...@@ -9,7 +9,7 @@ from django.conf import settings
from django.test import TestCase from django.test import TestCase
from django.test.utils import override_settings from django.test.utils import override_settings
from openedx.core.djangoapps.theming.test_util import with_is_edx_domain from openedx.core.djangoapps.theming.tests.test_util import with_is_edx_domain
@attr('shard_1') @attr('shard_1')
......
...@@ -33,7 +33,7 @@ from student_account.views import account_settings_context, get_user_orders ...@@ -33,7 +33,7 @@ from student_account.views import account_settings_context, get_user_orders
from third_party_auth.tests.testutil import simulate_running_pipeline, ThirdPartyAuthTestMixin from third_party_auth.tests.testutil import simulate_running_pipeline, ThirdPartyAuthTestMixin
from util.testing import UrlResetMixin from util.testing import UrlResetMixin
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from openedx.core.djangoapps.theming.test_util import with_edx_domain_context from openedx.core.djangoapps.theming.tests.test_util import with_edx_domain_context
@ddt.ddt @ddt.ddt
......
...@@ -39,7 +39,7 @@ from commerce.models import CommerceConfiguration ...@@ -39,7 +39,7 @@ from commerce.models import CommerceConfiguration
from commerce.tests import TEST_PAYMENT_DATA, TEST_API_URL, TEST_API_SIGNING_KEY, TEST_PUBLIC_URL_ROOT from commerce.tests import TEST_PAYMENT_DATA, TEST_API_URL, TEST_API_SIGNING_KEY, TEST_PUBLIC_URL_ROOT
from embargo.test_utils import restrict_course from embargo.test_utils import restrict_course
from openedx.core.djangoapps.user_api.accounts.api import get_account_settings from openedx.core.djangoapps.user_api.accounts.api import get_account_settings
from openedx.core.djangoapps.theming.test_util import with_is_edx_domain from openedx.core.djangoapps.theming.tests.test_util import with_is_edx_domain
from shoppingcart.models import Order, CertificateItem from shoppingcart.models import Order, CertificateItem
from student.tests.factories import UserFactory, CourseEnrollmentFactory from student.tests.factories import UserFactory, CourseEnrollmentFactory
from student.models import CourseEnrollment from student.models import CourseEnrollment
......
""" """
Helpers for accessing comprehensive theming related variables. Helpers for accessing comprehensive theming related variables.
""" """
from microsite_configuration import microsite
from microsite_configuration import page_title_breadcrumbs
from django.conf import settings from django.conf import settings
from microsite_configuration import microsite, page_title_breadcrumbs
def get_page_title_breadcrumbs(*args): def get_page_title_breadcrumbs(*args):
""" """
...@@ -17,7 +17,25 @@ def get_value(val_name, default=None, **kwargs): ...@@ -17,7 +17,25 @@ def get_value(val_name, default=None, **kwargs):
""" """
This is a proxy function to hide microsite_configuration behind comprehensive theming. This is a proxy function to hide microsite_configuration behind comprehensive theming.
""" """
return microsite.get_value(val_name, default=default, **kwargs)
# Retrieve the requested field/value from the microsite configuration
microsite_value = microsite.get_value(val_name, default=default, **kwargs)
# Attempt to perform a dictionary update using the provided default
# This will fail if either the default or the microsite value is not a dictionary
try:
value = dict(default)
value.update(microsite_value)
# If the dictionary update fails, just use the microsite value
# TypeError: default is not iterable (simple value or None)
# ValueError: default is iterable but not a dict (list, not dict)
# AttributeError: default does not have an 'update' method
except (TypeError, ValueError, AttributeError):
value = microsite_value
# Return the end result to the caller
return value
def get_template_path(relative_path, **kwargs): def get_template_path(relative_path, **kwargs):
......
"""
Test helpers for Comprehensive Theming.
"""
from django.test import TestCase
from mock import patch
from openedx.core.djangoapps.theming import helpers
class ThemingHelpersTests(TestCase):
"""
Make sure some of the theming helper functions work
"""
def test_get_value_returns_override(self):
"""
Tests to make sure the get_value() operation returns a combined dictionary consisting
of the base container with overridden keys from the microsite configuration
"""
with patch('microsite_configuration.microsite.get_value') as mock_get_value:
override_key = 'JWT_ISSUER'
override_value = 'testing'
mock_get_value.return_value = {override_key: override_value}
jwt_auth = helpers.get_value('JWT_AUTH')
self.assertEqual(jwt_auth[override_key], override_value)
...@@ -15,7 +15,7 @@ from django.test.utils import override_settings ...@@ -15,7 +15,7 @@ from django.test.utils import override_settings
import edxmako import edxmako
from .core import comprehensive_theme_changes from openedx.core.djangoapps.theming.core import comprehensive_theme_changes
EDX_THEME_DIR = settings.REPO_ROOT / "themes" / "edx.org" EDX_THEME_DIR = settings.REPO_ROOT / "themes" / "edx.org"
......
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