1 # -*- coding: utf-8 -*-
2 # This file is part of django-ssify, licensed under GNU Affero GPLv3 or later.
3 # Copyright © Fundacja Nowoczesna Polska. See README.md for more information.
5 from __future__ import unicode_literals
7 from django.conf import settings
8 from django.test import Client, TestCase
9 from django.test.utils import override_settings
10 from django.utils import translation
11 from ssify import exceptions
12 from ssify.middleware import SsiMiddleware
15 class LocaleTestCase(TestCase):
17 self.ssi_process_response = SsiMiddleware.process_response
18 SsiMiddleware.process_response = lambda self, req, res: res
21 SsiMiddleware.process_response = self.ssi_process_response
23 def test_locale_middleware(self):
24 index = settings.MIDDLEWARE_CLASSES.index(
25 'ssify.middleware.LocaleMiddleware')
26 stock_middleware = settings.MIDDLEWARE_CLASSES[:index] + \
27 ['django.middleware.locale.LocaleMiddleware'] + \
28 settings.MIDDLEWARE_CLASSES[index + 1:]
30 for use_stock_middleware in False, True:
31 for with_lang in False, True:
32 for with_i18n in False, True:
33 override = {'USE_I18N': with_i18n}
35 if use_stock_middleware:
36 override['MIDDLEWARE_CLASSES'] = stock_middleware
38 if use_stock_middleware and with_i18n:
39 expected_vary = 'Accept-Language, Cookie'
41 expected_vary = 'Accept-Language'
44 url = '/include_language_with_lang'
46 url = '/include_language_without_lang'
48 with self.settings(**override):
49 # Changed USE_I18N, must reload translation mechanism.
50 translation._trans.__dict__.clear()
51 response = Client().get(url)
55 'Wrong Vary with: use_stock_middleware=%s, '
56 'with_lang=%s, with_i18n=%s; '
57 'expected: %s, got: %s' % (
58 use_stock_middleware, with_lang, with_i18n,
59 expected_vary, response['Vary'])
62 def test_lang_arg(self):
64 self.client.get('/language/uk').content.strip(), b'uk')
66 self.client.get('/language').content.strip(), b'pl')
68 def test_lang_arg_missing(self):
70 exceptions.NoLangFieldError,
71 lambda: self.client.get('/bad_language'))
73 def test_locale_middleware_without_session(self):
74 index = settings.MIDDLEWARE_CLASSES.index(
75 'django.contrib.sessions.middleware.SessionMiddleware')
76 middleware = settings.MIDDLEWARE_CLASSES[:index] + \
77 settings.MIDDLEWARE_CLASSES[index + 1:]
78 with self.settings(MIDDLEWARE_CLASSES=middleware):
80 self.client.get('/include_language_with_lang')['Vary'],