* Generate common/djangoapps import shims for LMS * Generate common/djangoapps import shims for Studio * Stop appending project root to sys.path * Stop appending common/djangoapps to sys.path * Import from common.djangoapps.course_action_state instead of course_action_state * Import from common.djangoapps.course_modes instead of course_modes * Import from common.djangoapps.database_fixups instead of database_fixups * Import from common.djangoapps.edxmako instead of edxmako * Import from common.djangoapps.entitlements instead of entitlements * Import from common.djangoapps.pipline_mako instead of pipeline_mako * Import from common.djangoapps.static_replace instead of static_replace * Import from common.djangoapps.student instead of student * Import from common.djangoapps.terrain instead of terrain * Import from common.djangoapps.third_party_auth instead of third_party_auth * Import from common.djangoapps.track instead of track * Import from common.djangoapps.util instead of util * Import from common.djangoapps.xblock_django instead of xblock_django * Add empty common/djangoapps/__init__.py to fix pytest collection * Fix pylint formatting violations * Exclude import_shims/ directory tree from linting
70 lines
2.9 KiB
Python
70 lines
2.9 KiB
Python
"""Unit tests for settings.py."""
|
|
|
|
|
|
import unittest
|
|
|
|
from mock import patch
|
|
from common.djangoapps.third_party_auth import provider, settings
|
|
from common.djangoapps.third_party_auth.tests import testutil
|
|
from common.djangoapps.third_party_auth.tests.utils import skip_unless_thirdpartyauth
|
|
_ORIGINAL_AUTHENTICATION_BACKENDS = ['first_authentication_backend']
|
|
_ORIGINAL_INSTALLED_APPS = ['first_installed_app']
|
|
_ORIGINAL_MIDDLEWARE_CLASSES = ['first_middleware_class']
|
|
_ORIGINAL_TEMPLATE_CONTEXT_PROCESSORS = ['first_template_context_preprocessor']
|
|
_SETTINGS_MAP = {
|
|
'AUTHENTICATION_BACKENDS': _ORIGINAL_AUTHENTICATION_BACKENDS,
|
|
'INSTALLED_APPS': _ORIGINAL_INSTALLED_APPS,
|
|
'MIDDLEWARE': _ORIGINAL_MIDDLEWARE_CLASSES,
|
|
'TEMPLATES': [{
|
|
'OPTIONS': {
|
|
'context_processors': _ORIGINAL_TEMPLATE_CONTEXT_PROCESSORS
|
|
}
|
|
}],
|
|
'FEATURES': {},
|
|
}
|
|
_SETTINGS_MAP['DEFAULT_TEMPLATE_ENGINE'] = _SETTINGS_MAP['TEMPLATES'][0]
|
|
|
|
|
|
class SettingsUnitTest(testutil.TestCase):
|
|
"""Unit tests for settings management code."""
|
|
|
|
# Suppress spurious no-member warning on fakes.
|
|
# pylint: disable=no-member
|
|
|
|
def setUp(self):
|
|
super(SettingsUnitTest, self).setUp()
|
|
self.settings = testutil.FakeDjangoSettings(_SETTINGS_MAP)
|
|
|
|
def test_apply_settings_adds_exception_middleware(self):
|
|
settings.apply_settings(self.settings)
|
|
self.assertIn('common.djangoapps.third_party_auth.middleware.ExceptionMiddleware', self.settings.MIDDLEWARE)
|
|
|
|
def test_apply_settings_adds_fields_stored_in_session(self):
|
|
settings.apply_settings(self.settings)
|
|
self.assertEqual(['auth_entry', 'next'], self.settings.FIELDS_STORED_IN_SESSION)
|
|
|
|
@skip_unless_thirdpartyauth()
|
|
def test_apply_settings_enables_no_providers_by_default(self):
|
|
# Providers are only enabled via ConfigurationModels in the database
|
|
settings.apply_settings(self.settings)
|
|
self.assertEqual([], provider.Registry.enabled())
|
|
|
|
def test_apply_settings_turns_off_raising_social_exceptions(self):
|
|
# Guard against submitting a conf change that's convenient in dev but
|
|
# bad in prod.
|
|
settings.apply_settings(self.settings)
|
|
self.assertFalse(self.settings.SOCIAL_AUTH_RAISE_EXCEPTIONS)
|
|
|
|
def test_apply_settings_turns_off_redirect_sanitization(self):
|
|
settings.apply_settings(self.settings)
|
|
self.assertFalse(self.settings.SOCIAL_AUTH_SANITIZE_REDIRECTS)
|
|
|
|
def test_apply_settings_avoids_default_username_check(self):
|
|
# Avoid the default username check where non-ascii characters are not
|
|
# allowed when unicode username is enabled
|
|
settings.apply_settings(self.settings)
|
|
self.assertTrue(self.settings.SOCIAL_AUTH_CLEAN_USERNAMES) # verify default behavior
|
|
with patch.dict('django.conf.settings.FEATURES', {'ENABLE_UNICODE_USERNAME': True}):
|
|
settings.apply_settings(self.settings)
|
|
self.assertFalse(self.settings.SOCIAL_AUTH_CLEAN_USERNAMES)
|