Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
problem-builder
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
OpenEdx
problem-builder
Commits
05527093
Commit
05527093
authored
Mar 01, 2016
by
Tim Krones
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Ensure default theme is used if theme has not been customized.
parent
d754b299
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
79 additions
and
13 deletions
+79
-13
problem_builder/mentoring.py
+6
-7
problem_builder/tests/unit/test_problem_builder.py
+73
-6
No files found.
problem_builder/mentoring.py
View file @
05527093
...
...
@@ -59,11 +59,6 @@ except ImportError:
log
=
logging
.
getLogger
(
__name__
)
loader
=
ResourceLoader
(
__name__
)
_default_theme_config
=
{
'package'
:
'problem_builder'
,
'locations'
:
[
'public/themes/lms.css'
]
}
_default_options_config
=
{
'pb_mcq_hide_previous_answer'
:
False
}
...
...
@@ -126,9 +121,13 @@ class BaseMentoringBlock(
icon_class
=
'problem'
block_settings_key
=
'mentoring'
theme_key
=
'theme'
options_key
=
'options'
default_theme_config
=
{
'package'
:
'problem_builder'
,
'locations'
:
[
'public/themes/lms.css'
]
}
@property
def
url_name
(
self
):
"""
...
...
@@ -170,7 +169,7 @@ class BaseMentoringBlock(
Fall back on default options if xblock settings have not been customized at all
or no customizations for options available.
"""
xblock_settings
=
self
.
get_xblock_settings
(
_default_options_config
)
xblock_settings
=
self
.
get_xblock_settings
(
default
=
{}
)
if
xblock_settings
and
self
.
options_key
in
xblock_settings
:
return
xblock_settings
[
self
.
options_key
]
return
_default_options_config
...
...
problem_builder/tests/unit/test_problem_builder.py
View file @
05527093
...
...
@@ -7,9 +7,7 @@ from random import random
from
xblock.field_data
import
DictFieldData
from
problem_builder.mcq
import
MCQBlock
from
problem_builder.mentoring
import
(
MentoringBlock
,
MentoringMessageBlock
,
_default_theme_config
,
_default_options_config
)
from
problem_builder.mentoring
import
MentoringBlock
,
MentoringMessageBlock
,
_default_options_config
@ddt.ddt
...
...
@@ -69,6 +67,7 @@ class TestMentoringBlock(unittest.TestCase):
self
.
assertIn
(
'Unable to load child component'
,
fragment
.
content
)
@ddt.ddt
class
TestMentoringBlockTheming
(
unittest
.
TestCase
):
def
setUp
(
self
):
self
.
service_mock
=
Mock
()
...
...
@@ -76,6 +75,70 @@ class TestMentoringBlockTheming(unittest.TestCase):
self
.
runtime_mock
.
service
=
Mock
(
return_value
=
self
.
service_mock
)
self
.
block
=
MentoringBlock
(
self
.
runtime_mock
,
DictFieldData
({}),
Mock
())
def
test_get_theme_returns_default_if_settings_service_is_not_available
(
self
):
self
.
runtime_mock
.
service
=
Mock
(
return_value
=
None
)
theme
=
self
.
block
.
get_theme
()
# Ensure MentoringBlock overrides "default_theme_config" from ThemableXBlockMixin with meaningful value:
self
.
assertIsNotNone
(
theme
)
self
.
assertEqual
(
theme
,
MentoringBlock
.
default_theme_config
)
def
test_get_theme_returns_default_if_xblock_settings_not_customized
(
self
):
self
.
block
.
get_xblock_settings
=
Mock
(
return_value
=
None
)
theme
=
self
.
block
.
get_theme
()
# Ensure MentoringBlock overrides "default_theme_config" from ThemableXBlockMixin with meaningful value:
self
.
assertIsNotNone
(
theme
)
self
.
assertEqual
(
theme
,
MentoringBlock
.
default_theme_config
)
self
.
block
.
get_xblock_settings
.
assert_called_once_with
(
default
=
{})
@ddt.data
(
{},
{
'mass'
:
123
},
{
'spin'
:
{}},
{
'parity'
:
"1"
}
)
def
test_get_theme_returns_default_if_theme_not_customized
(
self
,
xblock_settings
):
self
.
block
.
get_xblock_settings
=
Mock
(
return_value
=
xblock_settings
)
theme
=
self
.
block
.
get_theme
()
# Ensure MentoringBlock overrides "default_theme_config" from ThemableXBlockMixin with meaningful value:
self
.
assertIsNotNone
(
theme
)
self
.
assertEqual
(
theme
,
MentoringBlock
.
default_theme_config
)
self
.
block
.
get_xblock_settings
.
assert_called_once_with
(
default
=
{})
@ddt.data
(
{
MentoringBlock
.
theme_key
:
123
},
{
MentoringBlock
.
theme_key
:
[
1
,
2
,
3
]},
{
MentoringBlock
.
theme_key
:
{
'package'
:
'qwerty'
,
'locations'
:
[
'something_else.css'
]}},
)
def
test_get_theme_correctly_returns_customized_theme
(
self
,
xblock_settings
):
self
.
block
.
get_xblock_settings
=
Mock
(
return_value
=
xblock_settings
)
theme
=
self
.
block
.
get_theme
()
# Ensure MentoringBlock overrides "default_theme_config" from ThemableXBlockMixin with meaningful value:
self
.
assertIsNotNone
(
theme
)
self
.
assertEqual
(
theme
,
xblock_settings
[
MentoringBlock
.
theme_key
])
self
.
block
.
get_xblock_settings
.
assert_called_once_with
(
default
=
{})
def
test_theme_files_are_loaded_from_correct_package
(
self
):
fragment
=
MagicMock
()
package_name
=
'some_package'
xblock_settings
=
{
MentoringBlock
.
theme_key
:
{
'package'
:
package_name
,
'locations'
:
[
'lms.css'
]}}
self
.
block
.
get_xblock_settings
=
Mock
(
return_value
=
xblock_settings
)
with
patch
(
"xblockutils.settings.ResourceLoader"
)
as
patched_resource_loader
:
self
.
block
.
include_theme_files
(
fragment
)
patched_resource_loader
.
assert_called_with
(
package_name
)
@ddt.data
(
(
'problem_builder'
,
[
'public/themes/lms.css'
]),
(
'problem_builder'
,
[
'public/themes/lms.css'
,
'public/themes/lms.part2.css'
]),
(
'my_app.my_rules'
,
[
'typography.css'
,
'icons.css'
]),
)
@ddt.unpack
def
test_theme_files_are_added_to_fragment
(
self
,
package_name
,
locations
):
fragment
=
MagicMock
()
xblock_settings
=
{
MentoringBlock
.
theme_key
:
{
'package'
:
package_name
,
'locations'
:
locations
}}
self
.
block
.
get_xblock_settings
=
Mock
(
return_value
=
xblock_settings
)
with
patch
(
"xblockutils.settings.ResourceLoader.load_unicode"
)
as
patched_load_unicode
:
self
.
block
.
include_theme_files
(
fragment
)
for
location
in
locations
:
patched_load_unicode
.
assert_any_call
(
location
)
self
.
assertEqual
(
patched_load_unicode
.
call_count
,
len
(
locations
))
def
test_student_view_calls_include_theme_files
(
self
):
self
.
service_mock
.
get_settings_bucket
=
Mock
(
return_value
=
{})
with
patch
.
object
(
self
.
block
,
'include_theme_files'
)
as
patched_include_theme_files
:
...
...
@@ -97,10 +160,14 @@ class TestMentoringBlockOptions(unittest.TestCase):
self
.
runtime_mock
.
service
=
Mock
(
return_value
=
self
.
service_mock
)
self
.
block
=
MentoringBlock
(
self
.
runtime_mock
,
DictFieldData
({}),
Mock
())
def
test_get_options_returns_default_if_settings_service_is_not_available
(
self
):
self
.
runtime_mock
.
service
=
Mock
(
return_value
=
None
)
self
.
assertEqual
(
self
.
block
.
get_options
(),
_default_options_config
)
def
test_get_options_returns_default_if_xblock_settings_not_customized
(
self
):
self
.
block
.
get_xblock_settings
=
Mock
(
return_value
=
None
)
self
.
assertEqual
(
self
.
block
.
get_options
(),
_default_options_config
)
self
.
block
.
get_xblock_settings
.
assert_called_once_with
(
_default_options_config
)
self
.
block
.
get_xblock_settings
.
assert_called_once_with
(
default
=
{}
)
@ddt.data
(
{},
{
'mass'
:
123
},
{
'spin'
:
{}},
{
'parity'
:
"1"
}
...
...
@@ -108,7 +175,7 @@ class TestMentoringBlockOptions(unittest.TestCase):
def
test_get_options_returns_default_if_options_not_customized
(
self
,
xblock_settings
):
self
.
block
.
get_xblock_settings
=
Mock
(
return_value
=
xblock_settings
)
self
.
assertEqual
(
self
.
block
.
get_options
(),
_default_options_config
)
self
.
block
.
get_xblock_settings
.
assert_called_once_with
(
_default_options_config
)
self
.
block
.
get_xblock_settings
.
assert_called_once_with
(
default
=
{}
)
@ddt.data
(
{
MentoringBlock
.
options_key
:
123
},
...
...
@@ -118,7 +185,7 @@ class TestMentoringBlockOptions(unittest.TestCase):
def
test_get_options_correctly_returns_customized_options
(
self
,
xblock_settings
):
self
.
block
.
get_xblock_settings
=
Mock
(
return_value
=
xblock_settings
)
self
.
assertEqual
(
self
.
block
.
get_options
(),
xblock_settings
[
MentoringBlock
.
options_key
])
self
.
block
.
get_xblock_settings
.
assert_called_once_with
(
_default_options_config
)
self
.
block
.
get_xblock_settings
.
assert_called_once_with
(
default
=
{}
)
def
test_get_option
(
self
):
random_key
,
random_value
=
random
(),
random
()
...
...
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