Commit 4b512626 by Calen Pennington

Reset the SESSION language when the language-preference cookie changes

parent ec6dfeea
...@@ -44,6 +44,10 @@ class LanguagePreferenceMiddleware(object): ...@@ -44,6 +44,10 @@ class LanguagePreferenceMiddleware(object):
accept_header = cookie_lang accept_header = cookie_lang
request.META[LANGUAGE_HEADER] = accept_header request.META[LANGUAGE_HEADER] = accept_header
# Allow the new cookie setting to update the language in the user's session
if LANGUAGE_SESSION_KEY in request.session and request.session[LANGUAGE_SESSION_KEY] != cookie_lang:
del request.session[LANGUAGE_SESSION_KEY]
def process_response(self, request, response): def process_response(self, request, response):
# If the user is logged in, check for their language preference # If the user is logged in, check for their language preference
if getattr(request, 'user', None) and request.user.is_authenticated(): if getattr(request, 'user', None) and request.user.is_authenticated():
......
...@@ -105,25 +105,30 @@ class TestUserPreferenceMiddleware(TestCase): ...@@ -105,25 +105,30 @@ class TestUserPreferenceMiddleware(TestCase):
for logged_in in (True, False) for logged_in in (True, False)
for test_def in [ for test_def in [
# (LANGUAGE_COOKIE, LANGUAGE_SESSION_KEY, Accept-Language In, Accept-Language Out) # (LANGUAGE_COOKIE, LANGUAGE_SESSION_KEY, Accept-Language In, Accept-Language Out)
(None, None, None, None), (None, None, None, None, None),
(None, 'eo', None, None), (None, 'eo', None, None, 'eo'),
(None, 'eo', 'en', 'en'), (None, 'en', None, None, 'en'),
(None, None, 'en', 'en'), (None, 'eo', 'en', 'en', 'eo'),
('en', None, None, 'en'), (None, None, 'en', 'en', None),
('en', None, 'eo', 'en;q=1.0,eo'), ('en', None, None, 'en', None),
('en', None, 'en', 'en'), ('en', 'en', None, 'en', 'en'),
('en', 'eo', 'en', 'en'), ('en', None, 'eo', 'en;q=1.0,eo', None),
('en', 'eo', 'eo', 'en;q=1.0,eo') ('en', None, 'en', 'en', None),
('en', 'eo', 'en', 'en', None),
('en', 'eo', 'eo', 'en;q=1.0,eo', None)
] ]
)) ))
@ddt.unpack @ddt.unpack
def test_preference_cookie_overrides_browser(self, logged_in, lang_cookie, lang_session, accept_lang_in, accept_lang_out): def test_preference_cookie_overrides_browser(
self, logged_in, lang_cookie, lang_session_in, accept_lang_in, accept_lang_out,
lang_session_out,
):
if not logged_in: if not logged_in:
self.request.user = self.anonymous_user self.request.user = self.anonymous_user
if lang_cookie: if lang_cookie:
self.request.COOKIES[settings.LANGUAGE_COOKIE] = lang_cookie self.request.COOKIES[settings.LANGUAGE_COOKIE] = lang_cookie
if lang_session: if lang_session_in:
self.request.session[LANGUAGE_SESSION_KEY] = lang_session self.request.session[LANGUAGE_SESSION_KEY] = lang_session_in
if accept_lang_in: if accept_lang_in:
self.request.META['HTTP_ACCEPT_LANGUAGE'] = accept_lang_in self.request.META['HTTP_ACCEPT_LANGUAGE'] = accept_lang_in
else: else:
...@@ -143,7 +148,7 @@ class TestUserPreferenceMiddleware(TestCase): ...@@ -143,7 +148,7 @@ class TestUserPreferenceMiddleware(TestCase):
else: else:
self.assertEqual(accept_lang_result, accept_lang_out) self.assertEqual(accept_lang_result, accept_lang_out)
self.assertEquals(self.request.session.get(LANGUAGE_SESSION_KEY), lang_session) self.assertEquals(self.request.session.get(LANGUAGE_SESSION_KEY), lang_session_out)
@ddt.data(None, 'es', 'en') @ddt.data(None, 'es', 'en')
def test_logout_preserves_cookie(self, lang_cookie): def test_logout_preserves_cookie(self, lang_cookie):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment