Source code for tests.test_utils

from unittest.mock import Mock

import requests
from django.test import RequestFactory
from django_cas_ng.utils import get_redirect_url, get_service_url, get_cas_client


#
# get_service_url tests
#
[docs]def test_service_url_helper(): factory = RequestFactory() request = factory.get('/login/') actual = get_service_url(request) expected = 'http://testserver/login/?next=%2F' assert actual == expected
[docs]def test_service_url_helper_as_https(): factory = RequestFactory() kwargs = {'secure': True, 'wsgi.url_scheme': 'https', 'SERVER_PORT': '443'} request = factory.get('/login/', **kwargs) actual = get_service_url(request) expected = 'https://testserver/login/?next=%2F' assert actual == expected
[docs]def test_service_url_helper_with_redirect(): factory = RequestFactory() request = factory.get('/login/') actual = get_service_url(request, redirect_to='http://testserver/landing-page/') expected = 'http://testserver/login/?next=http%3A%2F%2Ftestserver%2Flanding-page%2F' assert actual == expected
[docs]def test_service_url_preserves_query_parameters(): factory = RequestFactory() request = factory.get('/login/?foo=bar', secure=True) actual = get_service_url(request, redirect_to='https://testserver/landing-page/') assert 'next=https%3A%2F%2Ftestserver%2Flanding-page%2F' in actual
[docs]def test_service_url_avoids_next(settings): settings.CAS_STORE_NEXT = True factory = RequestFactory() request = factory.get('/login/') actual = get_service_url(request, redirect_to='/admin/') expected = 'http://testserver/login/' assert actual == expected
[docs]def test_service_url_root_proxied_as(settings): settings.CAS_ROOT_PROXIED_AS = 'https://foo.bar:8443' factory = RequestFactory() request = factory.get('/login/') actual = get_service_url(request) expected = 'https://foo.bar:8443/login/?next=%2F' assert actual == expected
[docs]def test_service_url_root_proxied_as_empty_string(settings): """ If the settings module has the attribute CAS_ROOT_PROXIED_AS but its value is an empty string (or another falsy value), we must make sure the setting is not considered while constructing the redirect url. """ settings.CAS_ROOT_PROXIED_AS = '' factory = RequestFactory() request = factory.get('/login/') actual = get_service_url(request) expected = 'http://testserver/login/?next=%2F' assert actual == expected
[docs]def test_force_ssl_service_url(settings): settings.CAS_FORCE_SSL_SERVICE_URL = True factory = RequestFactory() request = factory.get('/login/') actual = get_service_url(request) expected = 'https://testserver/login/?next=%2F' assert actual == expected
# # get_redirect_url tests #
[docs]def test_redirect_url_with_url_as_get_parameter(): factory = RequestFactory() request = factory.get('/login/', data={'next': '/landing-page/'}) actual = get_redirect_url(request) expected = '/landing-page/' assert actual == expected
[docs]def test_redirect_url_falls_back_to_cas_redirect_url_setting(settings): settings.CAS_IGNORE_REFERER = True settings.CAS_REDIRECT_URL = '/landing-page/' factory = RequestFactory() request = factory.get('/login/') actual = get_redirect_url(request) expected = '/landing-page/' assert actual == expected
[docs]def test_params_redirect_url_preceeds_settings_redirect_url(settings): settings.CAS_IGNORE_REFERER = True settings.CAS_REDIRECT_URL = '/landing-page/' factory = RequestFactory() request = factory.get('/login/', data={'next': '/override/'}) actual = get_redirect_url(request) expected = '/override/' assert actual == expected
[docs]def test_redirect_url_falls_back_to_http_referrer(settings): settings.CAS_IGNORE_REFERER = False settings.CAS_REDIRECT_URL = '/wrong-landing-page/' factory = RequestFactory() request = factory.get('/login/', HTTP_REFERER='/landing-page/') actual = get_redirect_url(request) expected = '/landing-page/' assert actual == expected
[docs]def test_redirect_url_strips_domain_prefix(settings): settings.CAS_IGNORE_REFERER = True settings.CAS_REDIRECT_URL = 'http://testserver/landing-page/' factory = RequestFactory() request = factory.get('/login/') actual = get_redirect_url(request) expected = '/landing-page/' assert actual == expected
[docs]def test_redirect_url_named_pattern(settings): settings.CAS_IGNORE_REFERER = False settings.CAS_REDIRECT_URL = 'home' factory = RequestFactory() request = factory.get('/login/') actual = get_redirect_url(request) expected = '/' assert actual == expected
[docs]def test_redirect_url_named_pattern_without_referrer(settings): settings.CAS_IGNORE_REFERER = True settings.CAS_REDIRECT_URL = 'home' factory = RequestFactory() request = factory.get('/login/', HTTP_REFERER='/landing-page/') actual = get_redirect_url(request) expected = '/' assert actual == expected
[docs]def test_redirect_url_referrer_no_named_pattern(settings): settings.CAS_IGNORE_REFERER = False settings.CAS_REDIRECT_URL = '/wrong-landing-page/' factory = RequestFactory() request = factory.get('/login/', HTTP_REFERER='home') actual = get_redirect_url(request) expected = 'home' assert actual == expected
[docs]def test_redirect_url_next_no_named_pattern(settings): settings.CAS_IGNORE_REFERER = False settings.CAS_REDIRECT_URL = '/wrong-landing-page/' factory = RequestFactory() request = factory.get('/login/', data={'next': 'home'}) actual = get_redirect_url(request) expected = 'home' assert actual == expected
[docs]def test_session_factory(settings): session = requests.Session() settings.CAS_SESSION_FACTORY = Mock(return_value=session) client = get_cas_client() assert settings.CAS_SESSION_FACTORY.called assert client.session is session