297 lines
13 KiB
Python
297 lines
13 KiB
Python
import datetime
|
|
from django.core.urlresolvers import reverse
|
|
from django.conf import settings
|
|
from django.contrib.auth.models import User
|
|
from django.template import Template, Context
|
|
from simple_translation.test.testcases import SimpleTranslationBaseTestCase
|
|
from simple_translation.translation_pool import TranslationPool
|
|
|
|
class SimpleTranslationTestCase(SimpleTranslationBaseTestCase):
|
|
|
|
def test_01_test_translated_urls(self):
|
|
|
|
old_urlconf = settings.ROOT_URLCONF
|
|
settings.ROOT_URLCONF = 'simple_translation.test.testapp.translated_urls'
|
|
old_middleware = settings.MIDDLEWARE_CLASSES
|
|
settings.MIDDLEWARE_CLASSES = old_middleware +[
|
|
'simple_translation.middleware.MultilingualGenericsMiddleware']
|
|
|
|
published_at = datetime.datetime.now() - datetime.timedelta(hours=-1)
|
|
en_title, entry = self.create_entry_with_title(title='english', published_at=published_at)
|
|
|
|
de_title = self.create_entry_title(entry, title='german', language='de', published_at=published_at)
|
|
|
|
index = reverse('entry_archive_index')
|
|
|
|
en_index = reverse('en:entry_archive_index')
|
|
de_index = reverse('de:entry_archive_index')
|
|
|
|
self.assertEquals(index, '/')
|
|
self.assertEquals(en_index, '/en/')
|
|
self.assertEquals(de_index, '/de/')
|
|
|
|
response = self.client.get(index)
|
|
self.assertContains(response, 'english')
|
|
|
|
response = self.client.get(en_index)
|
|
self.assertContains(response, 'english')
|
|
self.assertNotContains(response, 'german')
|
|
|
|
response = self.client.get(de_index)
|
|
self.assertContains(response, 'german')
|
|
self.assertNotContains(response, 'english')
|
|
|
|
settings.ROOT_URLCONF = old_urlconf
|
|
settings.MIDDLEWARE_CLASSES = old_middleware
|
|
|
|
def test_02_test_no_translated_urls_with_middleware(self):
|
|
|
|
old_middleware = settings.MIDDLEWARE_CLASSES
|
|
settings.MIDDLEWARE_CLASSES = old_middleware +[
|
|
'simple_translation.middleware.MultilingualGenericsMiddleware']
|
|
|
|
published_at = datetime.datetime.now() - datetime.timedelta(hours=-1)
|
|
en_title, entry = self.create_entry_with_title(title='english', published_at=published_at)
|
|
|
|
de_title = self.create_entry_title(entry, title='german', language='de', published_at=published_at)
|
|
|
|
index = reverse('entry_archive_index')
|
|
|
|
response = self.client.get(index)
|
|
self.assertContains(response, 'english')
|
|
|
|
settings.MIDDLEWARE_CLASSES = old_middleware
|
|
|
|
def test_03_test_no_translated_urls_without_middleware(self):
|
|
|
|
published_at = datetime.datetime.now() - datetime.timedelta(hours=-1)
|
|
en_title, entry = self.create_entry_with_title(title='english', published_at=published_at)
|
|
|
|
de_title = self.create_entry_title(entry, title='german', language='de', published_at=published_at)
|
|
|
|
index = reverse('entry_archive_index')
|
|
|
|
response = self.client.get(index)
|
|
self.assertContains(response, 'english')
|
|
self.assertContains(response, 'german')
|
|
|
|
def test_04_test_no_translated_urls_with_locale_middleware(self):
|
|
|
|
old_middleware = settings.MIDDLEWARE_CLASSES
|
|
settings.MIDDLEWARE_CLASSES = old_middleware + [
|
|
'django.middleware.locale.LocaleMiddleware',
|
|
'simple_translation.middleware.MultilingualGenericsMiddleware']
|
|
|
|
published_at = datetime.datetime.now() - datetime.timedelta(hours=-1)
|
|
en_title, entry = self.create_entry_with_title(title='english', published_at=published_at)
|
|
|
|
de_title = self.create_entry_title(entry, title='german', language='de', published_at=published_at)
|
|
|
|
index = reverse('entry_archive_index')
|
|
|
|
response = self.client.get(index)
|
|
self.assertContains(response, 'english')
|
|
self.assertNotContains(response, 'german')
|
|
|
|
settings.MIDDLEWARE_CLASSES = old_middleware
|
|
|
|
def test_05_test_translated_urls_with_locale_middleware(self):
|
|
|
|
old_urlconf = settings.ROOT_URLCONF
|
|
settings.ROOT_URLCONF = 'simple_translation.test.testapp.translated_urls'
|
|
old_middleware = settings.MIDDLEWARE_CLASSES
|
|
settings.MIDDLEWARE_CLASSES = old_middleware +[
|
|
'django.middleware.locale.LocaleMiddleware',
|
|
'simple_translation.middleware.MultilingualGenericsMiddleware']
|
|
|
|
published_at = datetime.datetime.now() - datetime.timedelta(hours=-1)
|
|
en_title, entry = self.create_entry_with_title(title='english', published_at=published_at)
|
|
|
|
de_title = self.create_entry_title(entry, title='german', language='de', published_at=published_at)
|
|
|
|
index = reverse('entry_archive_index')
|
|
|
|
en_index = reverse('en:entry_archive_index')
|
|
de_index = reverse('de:entry_archive_index')
|
|
|
|
self.assertEquals(index, '/')
|
|
self.assertEquals(en_index, '/en/')
|
|
self.assertEquals(de_index, '/de/')
|
|
|
|
response = self.client.get(index)
|
|
self.assertContains(response, 'english') # localemiddleware wins
|
|
self.assertNotContains(response, 'german')
|
|
|
|
response = self.client.get(en_index)
|
|
self.assertContains(response, 'english')
|
|
self.assertNotContains(response, 'german')
|
|
|
|
response = self.client.get(de_index)
|
|
self.assertContains(response, 'german')
|
|
self.assertNotContains(response, 'english') # generics middleware wins
|
|
|
|
settings.ROOT_URLCONF = old_urlconf
|
|
settings.MIDDLEWARE_CLASSES = old_middleware
|
|
|
|
def test_06_admin_edit_translated_entry(self):
|
|
|
|
superuser = User(username="super", is_staff=True, is_active=True,
|
|
is_superuser=True)
|
|
superuser.set_password("super")
|
|
superuser.save()
|
|
|
|
self.client.login(username='super', password='super')
|
|
|
|
published_at = datetime.datetime.now() - datetime.timedelta(hours=-1)
|
|
en_title, entry = self.create_entry_with_title(title='english', published_at=published_at)
|
|
|
|
de_title = self.create_entry_title(entry, title='german', language='de', published_at=published_at)
|
|
|
|
edit_url = reverse('admin:testapp_entry_change', args=(str(entry.pk)))
|
|
|
|
# edit english(default)
|
|
response = self.client.get(edit_url)
|
|
|
|
self.assertEquals(response.status_code, 200)
|
|
self.assertContains(response, 'simple-translation-current" name="en"' )
|
|
|
|
# edit english
|
|
response = self.client.get(edit_url, {'language': 'en'})
|
|
self.assertEquals(response.status_code, 200)
|
|
self.assertContains(response, 'simple-translation-current" name="en"' )
|
|
|
|
# edit german
|
|
response = self.client.get(edit_url, {'language': 'de'})
|
|
self.assertEquals(response.status_code, 200)
|
|
self.assertContains(response, 'simple-translation-current" name="de"' )
|
|
|
|
|
|
def test_07_test_changelist_description(self):
|
|
superuser = User(username="super", is_staff=True, is_active=True,
|
|
is_superuser=True)
|
|
superuser.set_password("super")
|
|
superuser.save()
|
|
|
|
self.client.login(username='super', password='super')
|
|
|
|
published_at = datetime.datetime.now() - datetime.timedelta(hours=-1)
|
|
en_title, entry = self.create_entry_with_title(title='english', published_at=published_at)
|
|
|
|
de_title = self.create_entry_title(entry, title='german', language='de', published_at=published_at)
|
|
|
|
list_url = reverse('admin:testapp_entry_changelist')
|
|
response = self.client.get(list_url)
|
|
self.assertEquals(response.status_code, 200)
|
|
self.assertContains(response, '<a href="1/?language=en">EN</a>' )
|
|
self.assertContains(response, '<a href="1/?language=de">DE</a>' )
|
|
|
|
def test_08_test_filters(self):
|
|
published_at = datetime.datetime.now() - datetime.timedelta(hours=-1)
|
|
en_title, entry = self.create_entry_with_title(title='english', published_at=published_at)
|
|
|
|
de_title = self.create_entry_title(entry, title='german', language='de', published_at=published_at)
|
|
|
|
class MockRequest(object):
|
|
LANGUAGE_CODE = 'en'
|
|
REQUEST = {}
|
|
|
|
request = MockRequest()
|
|
|
|
ctxt = Context({'entry': entry, 'request': request})
|
|
|
|
tpl_req = Template('''{% load simple_translation_tags %}
|
|
{% with entry|get_preferred_translation_from_request:request as title %}
|
|
{{ title }}
|
|
{% endwith %}
|
|
''')
|
|
|
|
self.assertEquals(tpl_req.render(ctxt).strip(), 'english')
|
|
|
|
tpl_lang = Template('''{% load simple_translation_tags %}
|
|
{% with entry|get_preferred_translation_from_lang:'de' as title %}
|
|
{{ title }}
|
|
{% endwith %}
|
|
''')
|
|
self.assertEquals(tpl_lang.render(ctxt).strip(), 'german')
|
|
|
|
def test_09_test_respect_settings_languages(self):
|
|
settings.LANGUAGES = (
|
|
('en', 'English'),
|
|
('pl', 'Polish'),
|
|
)
|
|
published_at = datetime.datetime.now() - datetime.timedelta(hours=-1)
|
|
en_title, entry = self.create_entry_with_title(title='english', published_at=published_at)
|
|
de_title = self.create_entry_title(entry, title='german', language='de', published_at=published_at)
|
|
pl_title = self.create_entry_title(entry, title='polish', language='pl', published_at=published_at)
|
|
|
|
pool = TranslationPool()
|
|
|
|
pool.annotate_with_translations(entry)
|
|
translated_languages = [t.language for t in entry.translations]
|
|
self.assertIn('pl', translated_languages)
|
|
self.assertIn('en', translated_languages)
|
|
self.assertNotIn('de', translated_languages)
|
|
|
|
def test_10_test_respect_settings_languages_order(self):
|
|
settings.LANGUAGES = (
|
|
('pl', 'Polish'),
|
|
('en', 'English'),
|
|
('de', 'German')
|
|
)
|
|
published_at = datetime.datetime.now() - datetime.timedelta(hours=-1)
|
|
en_title, entry = self.create_entry_with_title(title='english', published_at=published_at)
|
|
de_title = self.create_entry_title(entry, title='german', language='de', published_at=published_at)
|
|
pl_title = self.create_entry_title(entry, title='polish', language='pl', published_at=published_at)
|
|
|
|
pool = TranslationPool()
|
|
|
|
pool.annotate_with_translations(entry)
|
|
translated_languages = [t.language for t in entry.translations]
|
|
settings_languages = [lang_code for lang_code, language in settings.LANGUAGES]
|
|
self.assertSequenceEqual(translated_languages, settings_languages)
|
|
|
|
def test_11_test_respect_settings_languages_list(self):
|
|
settings.LANGUAGES = (
|
|
('en', 'English'),
|
|
('pl', 'Polish'),
|
|
)
|
|
entries = []
|
|
for title in ('title1', 'title2'):
|
|
published_at = datetime.datetime.now() - datetime.timedelta(hours=-1)
|
|
en_title, entry = self.create_entry_with_title(title='english' + title, published_at=published_at)
|
|
de_title = self.create_entry_title(entry, title='german' + title, language='de', published_at=published_at)
|
|
pl_title = self.create_entry_title(entry, title='polish' + title, language='pl', published_at=published_at)
|
|
entries.append(entry)
|
|
|
|
pool = TranslationPool()
|
|
|
|
pool.annotate_with_translations(entries)
|
|
for entry in entries:
|
|
translated_languages = [t.language for t in entry.translations]
|
|
self.assertIn('pl', translated_languages)
|
|
self.assertIn('en', translated_languages)
|
|
self.assertNotIn('de', translated_languages)
|
|
|
|
def test_12_test_respect_settings_languages_order_list(self):
|
|
settings.LANGUAGES = (
|
|
('pl', 'Polish'),
|
|
('en', 'English'),
|
|
('de', 'German')
|
|
)
|
|
entries = []
|
|
for title in ('title1', 'title2'):
|
|
published_at = datetime.datetime.now() - datetime.timedelta(hours=-1)
|
|
en_title, entry = self.create_entry_with_title(title='english'+title, published_at=published_at)
|
|
de_title = self.create_entry_title(entry, title='german'+title, language='de', published_at=published_at)
|
|
pl_title = self.create_entry_title(entry, title='polish'+title, language='pl', published_at=published_at)
|
|
entries.append(entry)
|
|
|
|
pool = TranslationPool()
|
|
|
|
pool.annotate_with_translations(entries)
|
|
|
|
settings_languages = [lang_code for lang_code, language in settings.LANGUAGES]
|
|
for entry in entries:
|
|
translated_languages = [t.language for t in entry.translations]
|
|
self.assertSequenceEqual(translated_languages, settings_languages)
|