diff options
| author | Claude Paroz <claude@2xlibre.net> | 2016-08-14 22:42:49 +0200 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2019-02-14 10:23:02 -0500 |
| commit | a8e2a9bac6e548d6ab2e13af6171d2fdd3b8055b (patch) | |
| tree | f49b5f5f14b5a8d8f907efee6079a4e3b51ce72c /tests | |
| parent | 76990cbbda5d93fda560c8a5ab019860f7efaab7 (diff) | |
Refs #15902 -- Deprecated storing user's language in the session.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/auth_tests/test_views.py | 15 | ||||
| -rw-r--r-- | tests/auth_tests/urls.py | 2 | ||||
| -rw-r--r-- | tests/view_tests/tests/test_i18n.py | 57 |
3 files changed, 51 insertions, 23 deletions
diff --git a/tests/auth_tests/test_views.py b/tests/auth_tests/test_views.py index 4949ce1bf4..f738a73e64 100644 --- a/tests/auth_tests/test_views.py +++ b/tests/auth_tests/test_views.py @@ -31,7 +31,6 @@ from django.test import Client, TestCase, override_settings from django.test.client import RedirectCycleError from django.urls import NoReverseMatch, reverse, reverse_lazy from django.utils.http import urlsafe_base64_encode -from django.utils.translation import LANGUAGE_SESSION_KEY from .client import PasswordResetConfirmClient from .models import CustomUser, UUIDUser @@ -1075,16 +1074,12 @@ class LogoutTest(AuthViewsTestCase): self.confirm_logged_out() def test_logout_preserve_language(self): - """Language stored in session is preserved after logout""" - # Create a new session with language - engine = import_module(settings.SESSION_ENGINE) - session = engine.SessionStore() - session[LANGUAGE_SESSION_KEY] = 'pl' - session.save() - self.client.cookies[settings.SESSION_COOKIE_NAME] = session.session_key - + """Language is preserved after logout.""" + self.login() + self.client.post('/setlang/', {'language': 'pl'}) + self.assertEqual(self.client.cookies[settings.LANGUAGE_COOKIE_NAME].value, 'pl') self.client.get('/logout/') - self.assertEqual(self.client.session[LANGUAGE_SESSION_KEY], 'pl') + self.assertEqual(self.client.cookies[settings.LANGUAGE_COOKIE_NAME].value, 'pl') @override_settings(LOGOUT_REDIRECT_URL='/custom/') def test_logout_redirect_url_setting(self): diff --git a/tests/auth_tests/urls.py b/tests/auth_tests/urls.py index d0b259935b..142a2b49c2 100644 --- a/tests/auth_tests/urls.py +++ b/tests/auth_tests/urls.py @@ -9,6 +9,7 @@ from django.shortcuts import render from django.template import RequestContext, Template from django.urls import path, re_path, reverse_lazy from django.views.decorators.cache import never_cache +from django.views.i18n import set_language class CustomRequestAuthenticationForm(AuthenticationForm): @@ -148,6 +149,7 @@ urlpatterns = auth_urlpatterns + [ path('permission_required_exception/', permission_required_exception), path('login_and_permission_required_exception/', login_and_permission_required_exception), + path('setlang/', set_language, name='set_language'), # This line is only required to render the password reset with is_admin=True path('admin/', admin.site.urls), ] diff --git a/tests/view_tests/tests/test_i18n.py b/tests/view_tests/tests/test_i18n.py index a3463a1bab..7b36181800 100644 --- a/tests/view_tests/tests/test_i18n.py +++ b/tests/view_tests/tests/test_i18n.py @@ -4,11 +4,12 @@ from os import path from django.conf import settings from django.test import ( - RequestFactory, SimpleTestCase, TestCase, modify_settings, + RequestFactory, SimpleTestCase, TestCase, ignore_warnings, modify_settings, override_settings, ) from django.test.selenium import SeleniumTestCase from django.urls import reverse +from django.utils.deprecation import RemovedInDjango40Warning from django.utils.translation import ( LANGUAGE_SESSION_KEY, get_language, override, ) @@ -36,7 +37,8 @@ class SetLanguageTests(TestCase): post_data = {'language': lang_code, 'next': '/'} response = self.client.post('/i18n/setlang/', post_data, HTTP_REFERER='/i_should_not_be_used/') self.assertRedirects(response, '/') - self.assertEqual(self.client.session[LANGUAGE_SESSION_KEY], lang_code) + with ignore_warnings(category=RemovedInDjango40Warning): + self.assertEqual(self.client.session[LANGUAGE_SESSION_KEY], lang_code) # The language is set in a cookie. language_cookie = self.client.cookies[settings.LANGUAGE_COOKIE_NAME] self.assertEqual(language_cookie.value, lang_code) @@ -53,7 +55,9 @@ class SetLanguageTests(TestCase): post_data = {'language': lang_code, 'next': '//unsafe/redirection/'} response = self.client.post('/i18n/setlang/', data=post_data) self.assertEqual(response.url, '/') - self.assertEqual(self.client.session[LANGUAGE_SESSION_KEY], lang_code) + self.assertEqual(self.client.cookies[settings.LANGUAGE_COOKIE_NAME].value, lang_code) + with ignore_warnings(category=RemovedInDjango40Warning): + self.assertEqual(self.client.session[LANGUAGE_SESSION_KEY], lang_code) def test_setlang_http_next(self): """ @@ -66,11 +70,15 @@ class SetLanguageTests(TestCase): # Insecure URL in POST data. response = self.client.post('/i18n/setlang/', data=post_data, secure=True) self.assertEqual(response.url, '/') - self.assertEqual(self.client.session[LANGUAGE_SESSION_KEY], lang_code) + self.assertEqual(self.client.cookies[settings.LANGUAGE_COOKIE_NAME].value, lang_code) + with ignore_warnings(category=RemovedInDjango40Warning): + self.assertEqual(self.client.session[LANGUAGE_SESSION_KEY], lang_code) # Insecure URL in HTTP referer. response = self.client.post('/i18n/setlang/', secure=True, HTTP_REFERER=non_https_next_url) self.assertEqual(response.url, '/') - self.assertEqual(self.client.session[LANGUAGE_SESSION_KEY], lang_code) + self.assertEqual(self.client.cookies[settings.LANGUAGE_COOKIE_NAME].value, lang_code) + with ignore_warnings(category=RemovedInDjango40Warning): + self.assertEqual(self.client.session[LANGUAGE_SESSION_KEY], lang_code) def test_setlang_redirect_to_referer(self): """ @@ -81,7 +89,9 @@ class SetLanguageTests(TestCase): post_data = {'language': lang_code} response = self.client.post('/i18n/setlang/', post_data, HTTP_REFERER='/i18n/') self.assertRedirects(response, '/i18n/', fetch_redirect_response=False) - self.assertEqual(self.client.session[LANGUAGE_SESSION_KEY], lang_code) + self.assertEqual(self.client.cookies[settings.LANGUAGE_COOKIE_NAME].value, lang_code) + with ignore_warnings(category=RemovedInDjango40Warning): + self.assertEqual(self.client.session[LANGUAGE_SESSION_KEY], lang_code) def test_setlang_default_redirect(self): """ @@ -92,7 +102,9 @@ class SetLanguageTests(TestCase): post_data = {'language': lang_code} response = self.client.post('/i18n/setlang/', post_data) self.assertRedirects(response, '/') - self.assertEqual(self.client.session[LANGUAGE_SESSION_KEY], lang_code) + self.assertEqual(self.client.cookies[settings.LANGUAGE_COOKIE_NAME].value, lang_code) + with ignore_warnings(category=RemovedInDjango40Warning): + self.assertEqual(self.client.session[LANGUAGE_SESSION_KEY], lang_code) def test_setlang_performs_redirect_for_ajax_if_explicitly_requested(self): """ @@ -102,7 +114,9 @@ class SetLanguageTests(TestCase): post_data = {'language': lang_code, 'next': '/'} response = self.client.post('/i18n/setlang/', post_data, HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.assertRedirects(response, '/') - self.assertEqual(self.client.session[LANGUAGE_SESSION_KEY], lang_code) + self.assertEqual(self.client.cookies[settings.LANGUAGE_COOKIE_NAME].value, lang_code) + with ignore_warnings(category=RemovedInDjango40Warning): + self.assertEqual(self.client.session[LANGUAGE_SESSION_KEY], lang_code) def test_setlang_doesnt_perform_a_redirect_to_referer_for_ajax(self): """ @@ -114,7 +128,9 @@ class SetLanguageTests(TestCase): headers = {'HTTP_REFERER': '/', 'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest'} response = self.client.post('/i18n/setlang/', post_data, **headers) self.assertEqual(response.status_code, 204) - self.assertEqual(self.client.session[LANGUAGE_SESSION_KEY], lang_code) + self.assertEqual(self.client.cookies[settings.LANGUAGE_COOKIE_NAME].value, lang_code) + with ignore_warnings(category=RemovedInDjango40Warning): + self.assertEqual(self.client.session[LANGUAGE_SESSION_KEY], lang_code) def test_setlang_doesnt_perform_a_default_redirect_for_ajax(self): """ @@ -124,7 +140,9 @@ class SetLanguageTests(TestCase): post_data = {'language': lang_code} response = self.client.post('/i18n/setlang/', post_data, HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.assertEqual(response.status_code, 204) - self.assertEqual(self.client.session[LANGUAGE_SESSION_KEY], lang_code) + self.assertEqual(self.client.cookies[settings.LANGUAGE_COOKIE_NAME].value, lang_code) + with ignore_warnings(category=RemovedInDjango40Warning): + self.assertEqual(self.client.session[LANGUAGE_SESSION_KEY], lang_code) def test_setlang_unsafe_next_for_ajax(self): """ @@ -134,7 +152,16 @@ class SetLanguageTests(TestCase): post_data = {'language': lang_code, 'next': '//unsafe/redirection/'} response = self.client.post('/i18n/setlang/', post_data, HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.assertEqual(response.url, '/') - self.assertEqual(self.client.session[LANGUAGE_SESSION_KEY], lang_code) + self.assertEqual(self.client.cookies[settings.LANGUAGE_COOKIE_NAME].value, lang_code) + + def test_session_langauge_deprecation(self): + msg = ( + 'The user language will no longer be stored in request.session ' + 'in Django 4.0. Read it from ' + 'request.COOKIES[settings.LANGUAGE_COOKIE_NAME] instead.' + ) + with self.assertRaisesMessage(RemovedInDjango40Warning, msg): + self.client.session[LANGUAGE_SESSION_KEY] def test_setlang_reversal(self): self.assertEqual(reverse('set_language'), '/i18n/setlang/') @@ -168,7 +195,9 @@ class SetLanguageTests(TestCase): encoded_url = '/test-setlang/%C3%A4/' # (%C3%A4 decodes to รค) response = self.client.post('/i18n/setlang/', {'language': lang_code}, HTTP_REFERER=encoded_url) self.assertRedirects(response, encoded_url, fetch_redirect_response=False) - self.assertEqual(self.client.session[LANGUAGE_SESSION_KEY], lang_code) + self.assertEqual(self.client.cookies[settings.LANGUAGE_COOKIE_NAME].value, lang_code) + with ignore_warnings(category=RemovedInDjango40Warning): + self.assertEqual(self.client.session[LANGUAGE_SESSION_KEY], lang_code) @modify_settings(MIDDLEWARE={ 'append': 'django.middleware.locale.LocaleMiddleware', @@ -178,7 +207,9 @@ class SetLanguageTests(TestCase): '/i18n/setlang/', data={'language': 'nl'}, follow=True, HTTP_REFERER='/en/translated/' ) - self.assertEqual(self.client.session[LANGUAGE_SESSION_KEY], 'nl') + self.assertEqual(self.client.cookies[settings.LANGUAGE_COOKIE_NAME].value, 'nl') + with ignore_warnings(category=RemovedInDjango40Warning): + self.assertEqual(self.client.session[LANGUAGE_SESSION_KEY], 'nl') self.assertRedirects(response, '/nl/vertaald/') # And reverse response = self.client.post( |
