Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
edx-platform
Commits
5726265c
Commit
5726265c
authored
Apr 11, 2017
by
Calen Pennington
Committed by
GitHub
Apr 11, 2017
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #14849 from cpennington/learner-243
Learner 243: Unauthenticated User Language Settings
parents
1ff2be0d
b2bf3ce6
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
59 additions
and
51 deletions
+59
-51
lms/djangoapps/student_account/test/test_views.py
+21
-0
openedx/core/djangoapps/lang_pref/middleware.py
+0
-16
openedx/core/djangoapps/lang_pref/tests/test_api.py
+28
-3
openedx/core/djangoapps/lang_pref/tests/test_middleware.py
+8
-31
pavelib/utils/test/suites/nose_suite.py
+2
-1
No files found.
lms/djangoapps/student_account/test/test_views.py
View file @
5726265c
...
...
@@ -35,6 +35,7 @@ from commerce.models import CommerceConfiguration
from
commerce.tests
import
factories
from
commerce.tests.mocks
import
mock_get_orders
from
course_modes.models
import
CourseMode
from
edxmako.shortcuts
import
render_to_response
from
openedx.core.djangoapps.oauth_dispatch.tests
import
factories
as
dot_factories
from
openedx.core.djangoapps.programs.tests.mixins
import
ProgramsApiConfigMixin
from
openedx.core.djangoapps.user_api.accounts.api
import
activate_account
,
create_account
...
...
@@ -521,6 +522,26 @@ class StudentAccountLoginAndRegistrationTest(ThirdPartyAuthTestMixin, UrlResetMi
'next'
:
'/account/finish_auth?{}'
.
format
(
urlencode
(
params
))
})
def
test_english_by_default
(
self
):
response
=
self
.
client
.
get
(
reverse
(
'signin_user'
),
[],
HTTP_ACCEPT
=
"text/html"
)
self
.
assertEqual
(
response
[
'Content-Language'
],
'en'
)
def
test_unsupported_language
(
self
):
response
=
self
.
client
.
get
(
reverse
(
'signin_user'
),
[],
HTTP_ACCEPT
=
"text/html"
,
HTTP_ACCEPT_LANGUAGE
=
"ts-zx"
)
self
.
assertEqual
(
response
[
'Content-Language'
],
'en'
)
def
test_browser_language
(
self
):
response
=
self
.
client
.
get
(
reverse
(
'signin_user'
),
[],
HTTP_ACCEPT
=
"text/html"
,
HTTP_ACCEPT_LANGUAGE
=
"es"
)
self
.
assertEqual
(
response
[
'Content-Language'
],
'es-419'
)
def
test_browser_language_dialent
(
self
):
response
=
self
.
client
.
get
(
reverse
(
'signin_user'
),
[],
HTTP_ACCEPT
=
"text/html"
,
HTTP_ACCEPT_LANGUAGE
=
"es-es"
)
self
.
assertEqual
(
response
[
'Content-Language'
],
'es-es'
)
class
AccountSettingsViewTest
(
ThirdPartyAuthTestMixin
,
TestCase
,
ProgramsApiConfigMixin
):
""" Tests for the account settings view. """
...
...
openedx/core/djangoapps/lang_pref/middleware.py
View file @
5726265c
...
...
@@ -35,19 +35,3 @@ class LanguagePreferenceMiddleware(object):
request
.
session
[
LANGUAGE_SESSION_KEY
]
=
user_pref
else
:
delete_user_preference
(
request
.
user
,
LANGUAGE_KEY
)
else
:
preferred_language
=
request
.
META
.
get
(
'HTTP_ACCEPT_LANGUAGE'
,
''
)
lang_headers
=
[
seq
[
0
]
for
seq
in
parse_accept_lang_header
(
preferred_language
)]
prefixes
=
[
prefix
.
split
(
"-"
)[
0
]
for
prefix
in
system_released_languages
]
# Setting the session language to the browser language, if it is supported.
for
browser_lang
in
lang_headers
:
if
browser_lang
in
system_released_languages
:
pass
elif
browser_lang
in
prefixes
:
browser_lang
=
system_released_languages
[
prefixes
.
index
(
browser_lang
)]
else
:
continue
if
request
.
session
.
get
(
LANGUAGE_SESSION_KEY
,
None
)
is
None
:
request
.
session
[
LANGUAGE_SESSION_KEY
]
=
unicode
(
browser_lang
)
break
openedx/core/djangoapps/lang_pref/tests/test_api.py
View file @
5726265c
...
...
@@ -4,20 +4,45 @@
from
django.test
import
TestCase
from
django.test.utils
import
override_settings
from
django.utils
import
translation
from
django.contrib.auth.models
import
User
import
ddt
from
openedx.core.djangoapps.dark_lang.models
import
DarkLangConfig
from
openedx.core.djangoapps.lang_pref
import
api
as
language_api
EN
=
language_api
.
Language
(
'en'
,
'English'
)
ES_419
=
language_api
.
Language
(
'es-419'
,
u'Español (Latinoamérica)'
)
@ddt.ddt
class
LanguageApiTest
(
TestCase
):
"""
Tests of the language APIs.
"""
def
test_released_languages
(
self
):
@ddt.data
(
*
[
(
'en'
,
[],
[],
[]),
(
'en'
,
[
EN
],
[],
[
EN
]),
(
'en'
,
[
EN
,
ES_419
],
[],
[
EN
]),
(
'en'
,
[
EN
,
ES_419
],
[
'es-419'
],
[
EN
,
ES_419
]),
(
'es-419'
,
[
EN
,
ES_419
],
[
'es-419'
],
[
ES_419
]),
(
'en'
,
[
EN
,
ES_419
],
[
'es'
],
[
EN
]),
])
@ddt.unpack
def
test_released_languages
(
self
,
default_lang
,
languages
,
dark_lang_released
,
expected_languages
):
"""
Tests for the released languages.
"""
released_languages
=
language_api
.
released_languages
()
self
.
assertGreaterEqual
(
len
(
released_languages
),
1
)
with
override_settings
(
LANGUAGES
=
languages
,
LANGUAGE_CODE
=
default_lang
):
user
=
User
()
user
.
save
()
DarkLangConfig
(
released_languages
=
', '
.
join
(
dark_lang_released
),
changed_by
=
user
,
enabled
=
True
)
.
save
()
released_languages
=
language_api
.
released_languages
()
self
.
assertEqual
(
released_languages
,
expected_languages
)
@override_settings
(
ALL_LANGUAGES
=
[[
u"cs"
,
u"Czech"
],
[
u"nl"
,
u"Dutch"
]])
def
test_all_languages
(
self
):
...
...
openedx/core/djangoapps/lang_pref/tests/test_middleware.py
View file @
5726265c
...
...
@@ -4,6 +4,7 @@ Tests for lang_pref middleware.
import
mock
import
ddt
from
django.test
import
TestCase
from
django.test.client
import
RequestFactory
from
django.contrib.sessions.middleware
import
SessionMiddleware
...
...
@@ -16,6 +17,7 @@ from student.tests.factories import UserFactory
from
student.tests.factories
import
AnonymousUserFactory
@ddt.ddt
class
TestUserPreferenceMiddleware
(
TestCase
):
"""
Tests to make sure user preferences are getting properly set in the middleware.
...
...
@@ -66,15 +68,17 @@ class TestUserPreferenceMiddleware(TestCase):
@mock.patch
(
'openedx.core.djangoapps.lang_pref.middleware.released_languages'
,
mock
.
Mock
(
return_value
=
[(
'eo'
,
'dummy Esperanto'
),
(
'ar'
,
'arabic'
)])
mock
.
Mock
(
return_value
=
[(
'eo'
,
'dummy Esperanto'
),
(
'ar'
,
'arabic'
)
,
(
'eu-es'
,
'euskara (Espainia)'
)
])
)
def
test_supported_browser_language_in_session
(
self
):
@ddt.data
(
'ar;q=1.0'
,
'eu;q=1.0'
,
'es-419;q=1.0'
)
def
test_browser_language_in_session_for_unauthenticated_user
(
self
,
accept_language
):
"""
test: browser language should
be set in user session if it is supported by system
for unauthenticated user.
test: browser language should
not be set in user session
for unauthenticated user.
"""
self
.
request
.
META
[
'HTTP_ACCEPT_LANGUAGE'
]
=
accept_language
# pylint: disable=no-member
self
.
request
.
user
=
self
.
anonymous_user
self
.
middleware
.
process_request
(
self
.
request
)
self
.
assert
Equal
(
self
.
request
.
session
[
LANGUAGE_SESSION_KEY
],
'ar'
)
# pylint: disable=no-member
self
.
assert
NotIn
(
LANGUAGE_SESSION_KEY
,
self
.
request
.
session
)
# pylint: disable=no-member
@mock.patch
(
'openedx.core.djangoapps.lang_pref.middleware.released_languages'
,
...
...
@@ -100,30 +104,3 @@ class TestUserPreferenceMiddleware(TestCase):
set_user_preference
(
self
.
user
,
LANGUAGE_KEY
,
'eo'
)
self
.
middleware
.
process_request
(
self
.
request
)
self
.
assertEqual
(
get_user_preference
(
self
.
request
.
user
,
LANGUAGE_KEY
),
None
)
@mock.patch
(
'openedx.core.djangoapps.lang_pref.middleware.released_languages'
,
mock
.
Mock
(
return_value
=
[(
'eu-es'
,
'euskara (Espainia)'
),
(
'en'
,
'english'
)])
)
def
test_supported_browser_language_prefix_in_session
(
self
):
"""
test: browser language should be set in user session if it's prefix is supported by system for
unathenticated users
"""
self
.
request
.
META
[
'HTTP_ACCEPT_LANGUAGE'
]
=
'eu;q=1.0'
# pylint: disable=no-member
self
.
request
.
user
=
self
.
anonymous_user
self
.
middleware
.
process_request
(
self
.
request
)
self
.
assertEqual
(
self
.
request
.
session
.
get
(
LANGUAGE_SESSION_KEY
),
'eu-es'
)
# pylint: disable=no-member
@mock.patch
(
'openedx.core.djangoapps.lang_pref.middleware.released_languages'
,
mock
.
Mock
(
return_value
=
[(
'en'
,
'english'
)])
)
def
test_unsupported_browser_language_prefix
(
self
):
"""
test: browser language should not be set in user session if it's prefix is not supported by system.
"""
self
.
request
.
META
[
'HTTP_ACCEPT_LANGUAGE'
]
=
'eu;q=1.0'
# pylint: disable=no-member
self
.
request
.
user
=
self
.
anonymous_user
self
.
middleware
.
process_request
(
self
.
request
)
self
.
assertNotEqual
(
self
.
request
.
session
.
get
(
LANGUAGE_SESSION_KEY
),
'eu-es'
)
# pylint: disable=no-member
pavelib/utils/test/suites/nose_suite.py
View file @
5726265c
...
...
@@ -119,6 +119,7 @@ class SystemTestSuite(NoseTestSuite):
self
.
processes
=
kwargs
.
get
(
'processes'
,
None
)
self
.
randomize
=
kwargs
.
get
(
'randomize'
,
None
)
self
.
settings
=
kwargs
.
get
(
'settings'
,
'test'
)
if
self
.
processes
is
None
:
# Don't use multiprocessing by default
...
...
@@ -148,7 +149,7 @@ class SystemTestSuite(NoseTestSuite):
'--verbosity={}'
.
format
(
self
.
verbosity
),
self
.
test_id
,
]
+
self
.
test_options_flags
+
[
'--settings
=test'
,
'--settings
'
,
self
.
settings
,
self
.
extra_args
,
'--xunitmp-file={}'
.
format
(
self
.
report_dir
/
"nosetests.xml"
),
'--with-database-isolation'
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment