1
|
|
|
from __future__ import print_function |
2
|
|
|
from django.conf import settings |
3
|
|
|
from django.contrib.auth import get_user_model |
4
|
|
|
from django.core.management import call_command |
5
|
|
|
from django.contrib.sites.models import Site |
6
|
|
|
from django.test import TestCase |
7
|
|
|
from django.test.utils import override_settings |
8
|
|
|
import os |
9
|
|
|
from parler import appsettings |
10
|
|
|
|
11
|
|
|
try: |
12
|
|
|
from importlib import import_module |
13
|
|
|
except ImportError: |
14
|
|
|
from django.utils.importlib import import_module # Python 2.6 |
15
|
|
|
|
16
|
|
|
try: |
17
|
|
|
User = get_user_model() |
18
|
|
|
except ImportError: # django < 1.5 |
19
|
|
|
from django.contrib.auth.models import User |
20
|
|
|
|
21
|
|
|
|
22
|
|
|
def clear_cache(): |
23
|
|
|
""" |
24
|
|
|
Clear internal cache of apps loading |
25
|
|
|
""" |
26
|
|
|
import django |
27
|
|
|
if django.VERSION >= (1.7): |
28
|
|
|
try: |
29
|
|
|
from django.db.models import loading |
30
|
|
|
loading.cache.loaded = False |
31
|
|
|
except ImportError: # Django >= 1.9 |
32
|
|
|
pass |
33
|
|
|
else: |
34
|
|
|
from django.apps import apps |
35
|
|
|
apps.clear_cache() |
36
|
|
|
|
37
|
|
|
|
38
|
|
|
class override_parler_settings(override_settings): |
39
|
|
|
""" |
40
|
|
|
Make sure the parler.appsettings is also updated with override_settings() |
41
|
|
|
""" |
42
|
|
|
|
43
|
|
|
def __init__(self, **kwargs): |
44
|
|
|
super(override_parler_settings, self).__init__(**kwargs) |
45
|
|
|
self.old_values = {} |
46
|
|
|
|
47
|
|
|
def enable(self): |
48
|
|
|
super(override_parler_settings, self).enable() |
49
|
|
|
for key, value in self.options.items(): |
50
|
|
|
self.old_values[key] = getattr(appsettings, key) |
51
|
|
|
setattr(appsettings, key, value) |
52
|
|
|
|
53
|
|
|
def disable(self): |
54
|
|
|
super(override_parler_settings, self).disable() |
55
|
|
|
for key in self.options.keys(): |
56
|
|
|
setattr(appsettings, key, self.old_values[key]) |
57
|
|
|
|
58
|
|
|
|
59
|
|
|
class AppTestCase(TestCase): |
60
|
|
|
""" |
61
|
|
|
Tests for URL resolving. |
62
|
|
|
""" |
63
|
|
|
user = None |
64
|
|
|
install_apps = ( |
65
|
|
|
'parler.tests.testapp', |
66
|
|
|
) |
67
|
|
|
|
68
|
|
|
@classmethod |
69
|
|
|
def setUpClass(cls): |
70
|
|
|
super(AppTestCase, cls).setUpClass() |
71
|
|
|
|
72
|
|
|
from django.template.loaders import app_directories # late import, for django 1.7 |
73
|
|
|
if cls.install_apps: |
74
|
|
|
# When running this app via `./manage.py test fluent_pages`, auto install the test app + models. |
75
|
|
|
run_syncdb = False |
76
|
|
|
for appname in cls.install_apps: |
77
|
|
|
if appname not in settings.INSTALLED_APPS: |
78
|
|
|
print('Adding {0} to INSTALLED_APPS'.format(appname)) |
79
|
|
|
settings.INSTALLED_APPS = (appname,) + tuple(settings.INSTALLED_APPS) |
80
|
|
|
run_syncdb = True |
81
|
|
|
|
82
|
|
|
# Flush caches |
83
|
|
|
testapp = import_module(appname) |
84
|
|
|
clear_cache() |
85
|
|
|
app_directories.app_template_dirs += ( |
86
|
|
|
os.path.join(os.path.dirname(testapp.__file__), 'templates'), |
87
|
|
|
) |
88
|
|
|
|
89
|
|
|
if run_syncdb: |
90
|
|
|
call_command('syncdb', verbosity=0) # may run south's overlaid version |
91
|
|
|
|
92
|
|
|
# Create basic objects |
93
|
|
|
# 1.4 does not create site automatically with the defined SITE_ID, 1.3 does. |
94
|
|
|
Site.objects.get_or_create(id=settings.SITE_ID, defaults=dict(domain='django.localhost', name='django at localhost')) |
95
|
|
|
cls.user, _ = User.objects.get_or_create(is_superuser=True, is_staff=True, username="admin") |
96
|
|
|
|
97
|
|
|
# Be supportive for other project settings too. |
98
|
|
|
cls.conf_fallbacks = list(appsettings.PARLER_LANGUAGES['default']['fallbacks'] or ['en']) |
99
|
|
|
cls.conf_fallback = cls.conf_fallbacks[0] |
100
|
|
|
cls.other_lang1 = next(x for x, _ in settings.LANGUAGES if x not in cls.conf_fallbacks) # "af" |
101
|
|
|
cls.other_lang2 = next(x for x, _ in settings.LANGUAGES if x not in cls.conf_fallbacks + [cls.other_lang1]) # "ar" |
102
|
|
|
|