|
@@ -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)
|
|
|
|
|
|
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):
|
|
|
|
|
|
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)
|
|
|
|
|
|
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/'
|
|
|
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/')
|
|
|
|
|
|
response = self.client.post(
|