Merge pull request #13018 from edx/TNL-4742_DarkLangChanges
Tnl 4742 dark lang changes
This commit is contained in:
@@ -2,29 +2,34 @@
|
||||
Tests i18n in courseware
|
||||
"""
|
||||
import re
|
||||
from nose.plugins.attrib import attr
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import User
|
||||
from django.core.urlresolvers import reverse, NoReverseMatch
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.test import TestCase
|
||||
from django.test.client import Client
|
||||
from django.utils import translation
|
||||
from nose.plugins.attrib import attr
|
||||
from openedx.core.djangoapps.user_api.preferences.api import set_user_preference
|
||||
|
||||
from dark_lang.models import DarkLangConfig
|
||||
from lang_pref import LANGUAGE_KEY
|
||||
from openedx.core.djangoapps.user_api.preferences.api import set_user_preference
|
||||
from student.tests.factories import UserFactory, RegistrationFactory, UserProfileFactory
|
||||
from student.tests.factories import UserFactory
|
||||
|
||||
|
||||
class BaseI18nTestCase(TestCase):
|
||||
"""
|
||||
Base utilities for i18n test classes to derive from
|
||||
"""
|
||||
preview_language_url = '/update_lang/'
|
||||
url = reverse('dashboard')
|
||||
site_lang = settings.LANGUAGE_CODE
|
||||
pwd = 'test_password'
|
||||
|
||||
def setUp(self):
|
||||
super(BaseI18nTestCase, self).setUp()
|
||||
self.addCleanup(translation.deactivate)
|
||||
self.client = Client()
|
||||
self.create_user()
|
||||
|
||||
def assert_tag_has_attr(self, content, tag, attname, value):
|
||||
"""Assert that a tag in `content` has a certain value in a certain attribute."""
|
||||
@@ -47,6 +52,22 @@ class BaseI18nTestCase(TestCase):
|
||||
enabled=True
|
||||
).save()
|
||||
|
||||
def create_user(self):
|
||||
"""
|
||||
Creates the user log in
|
||||
"""
|
||||
# Create one user and save it to the database
|
||||
email = 'test@edx.org'
|
||||
self.user = UserFactory.build(username='test', email=email, password=self.pwd)
|
||||
self.user.save()
|
||||
|
||||
def user_login(self):
|
||||
"""
|
||||
Log the user in
|
||||
"""
|
||||
# Get the login url & log in our user
|
||||
self.client.login(username=self.user.username, password=self.pwd)
|
||||
|
||||
|
||||
@attr('shard_1')
|
||||
class I18nTestCase(BaseI18nTestCase):
|
||||
@@ -96,35 +117,44 @@ class I18nRegressionTests(BaseI18nTestCase):
|
||||
def test_unreleased_lang_resolution(self):
|
||||
# Regression test; LOC-85
|
||||
self.release_languages('fa')
|
||||
self.user_login()
|
||||
|
||||
# We've released 'fa', AND we have language files for 'fa-ir' but
|
||||
# we want to keep 'fa-ir' as a dark language. Requesting 'fa-ir'
|
||||
# in the http request (NOT with the ?preview-lang query param) should
|
||||
# receive files for 'fa'
|
||||
response = self.client.get('/', HTTP_ACCEPT_LANGUAGE='fa-ir')
|
||||
response = self.client.get(self.url, HTTP_ACCEPT_LANGUAGE='fa-ir')
|
||||
self.assert_tag_has_attr(response.content, "html", "lang", "fa")
|
||||
|
||||
# Now try to access with dark lang
|
||||
response = self.client.get('/?preview-lang=fa-ir')
|
||||
self.client.post(self.preview_language_url, {'preview_lang': 'fa-ir', 'set_language': 'set_language'})
|
||||
response = self.client.get(self.url)
|
||||
self.assert_tag_has_attr(response.content, "html", "lang", "fa-ir")
|
||||
|
||||
def test_preview_lang(self):
|
||||
self.user_login()
|
||||
|
||||
# Regression test; LOC-87
|
||||
self.release_languages('es-419')
|
||||
site_lang = settings.LANGUAGE_CODE
|
||||
# Visit the front page; verify we see site default lang
|
||||
response = self.client.get('/')
|
||||
response = self.client.get(self.url)
|
||||
self.assert_tag_has_attr(response.content, "html", "lang", site_lang)
|
||||
|
||||
# Verify we can switch language using the preview-lang query param
|
||||
response = self.client.get('/?preview-lang=eo')
|
||||
# Set the language
|
||||
self.client.post(self.preview_language_url, {'preview_lang': 'eo', 'set_language': 'set_language'})
|
||||
|
||||
response = self.client.get(self.url)
|
||||
self.assert_tag_has_attr(response.content, "html", "lang", "eo")
|
||||
# We should be able to see released languages using preview-lang, too
|
||||
response = self.client.get('/?preview-lang=es-419')
|
||||
self.client.post(self.preview_language_url, {'preview_lang': 'es-419', 'set_language': 'set_language'})
|
||||
response = self.client.get(self.url)
|
||||
self.assert_tag_has_attr(response.content, "html", "lang", "es-419")
|
||||
|
||||
# Clearing the language should go back to site default
|
||||
response = self.client.get('/?clear-lang')
|
||||
self.client.post(self.preview_language_url, {'reset': 'reset'})
|
||||
response = self.client.get(self.url)
|
||||
self.assert_tag_has_attr(response.content, "html", "lang", site_lang)
|
||||
|
||||
|
||||
@@ -137,32 +167,7 @@ class I18nLangPrefTests(BaseI18nTestCase):
|
||||
"""
|
||||
def setUp(self):
|
||||
super(I18nLangPrefTests, self).setUp()
|
||||
# Create one user and save it to the database
|
||||
email = 'test@edx.org'
|
||||
pwd = 'test_password'
|
||||
self.user = UserFactory.build(username='test', email=email)
|
||||
self.user.set_password(pwd)
|
||||
self.user.save()
|
||||
|
||||
# Create a registration for the user
|
||||
RegistrationFactory(user=self.user)
|
||||
|
||||
# Create a profile for the user
|
||||
UserProfileFactory(user=self.user)
|
||||
|
||||
# Create the test client
|
||||
self.client = Client()
|
||||
|
||||
# Get the login url & log in our user
|
||||
try:
|
||||
login_url = reverse('login_post')
|
||||
except NoReverseMatch:
|
||||
login_url = reverse('login')
|
||||
self.client.post(login_url, {'email': email, 'password': pwd})
|
||||
|
||||
# Url and site lang vars for tests to use
|
||||
self.url = reverse('dashboard')
|
||||
self.site_lang = settings.LANGUAGE_CODE
|
||||
self.user_login()
|
||||
|
||||
def test_lang_preference(self):
|
||||
# Regression test; LOC-87
|
||||
@@ -190,12 +195,16 @@ class I18nLangPrefTests(BaseI18nTestCase):
|
||||
# Set user language preference
|
||||
set_user_preference(self.user, LANGUAGE_KEY, 'ar')
|
||||
# Verify preview-lang takes precedence
|
||||
response = self.client.get('{}?preview-lang=eo'.format(self.url))
|
||||
self.client.post(self.preview_language_url, {'preview_lang': 'eo', 'set_language': 'set_language'})
|
||||
response = self.client.get(self.url)
|
||||
|
||||
self.assert_tag_has_attr(response.content, "html", "lang", 'eo')
|
||||
# Hitting another page should keep the dark language set.
|
||||
response = self.client.get(reverse('courses'))
|
||||
self.assert_tag_has_attr(response.content, "html", "lang", "eo")
|
||||
|
||||
# Clearing language must set language back to preference language
|
||||
response = self.client.get('{}?clear-lang'.format(self.url))
|
||||
self.client.post(self.preview_language_url, {'reset': 'reset'})
|
||||
response = self.client.get(self.url)
|
||||
|
||||
self.assert_tag_has_attr(response.content, "html", "lang", 'ar')
|
||||
|
||||
Reference in New Issue
Block a user