Skip to content
Snippets Groups Projects
test_settings.py 2.87 KiB
Newer Older
"""Unit tests for settings.py."""
from mock import patch
from third_party_auth import provider, settings
from third_party_auth.tests import testutil
_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,
Ayub-khan's avatar
Ayub-khan committed
    '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.

    def setUp(self):
        super(SettingsUnitTest, self).setUp()
        self.settings = testutil.FakeDjangoSettings(_SETTINGS_MAP)

    def test_apply_settings_adds_exception_middleware(self):
Ayub-khan's avatar
Ayub-khan committed
        self.assertIn('third_party_auth.middleware.ExceptionMiddleware', self.settings.MIDDLEWARE)

    def test_apply_settings_adds_fields_stored_in_session(self):
Nimisha Asthagiri's avatar
Nimisha Asthagiri committed
        self.assertEqual(['auth_entry', 'next'], self.settings.FIELDS_STORED_IN_SESSION)
    @unittest.skipUnless(testutil.AUTH_FEATURE_ENABLED, testutil.AUTH_FEATURES_KEY + ' not enabled')
    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.
        self.assertFalse(self.settings.SOCIAL_AUTH_RAISE_EXCEPTIONS)
Nimisha Asthagiri's avatar
Nimisha Asthagiri committed

    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)