mirror of
https://github.com/django/django.git
synced 2025-11-07 07:15:35 +00:00
Refs #15902 -- Deprecated storing user's language in the session.
This commit is contained in:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user