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
073e29cc
Commit
073e29cc
authored
Apr 10, 2017
by
Calen Pennington
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Don't capture browser language into unauthenticated user session
[LEARNER-243]
parent
58f1ce0a
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
35 additions
and
50 deletions
+35
-50
openedx/core/djangoapps/lang_pref/middleware.py
+0
-16
openedx/core/djangoapps/lang_pref/tests/test_api.py
+27
-3
openedx/core/djangoapps/lang_pref/tests/test_middleware.py
+8
-31
No files found.
openedx/core/djangoapps/lang_pref/middleware.py
View file @
073e29cc
...
...
@@ -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 @
073e29cc
...
...
@@ -4,20 +4,44 @@
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 @
073e29cc
...
...
@@ -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
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