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
9a116529
Commit
9a116529
authored
Jan 09, 2015
by
Braden MacDonald
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add module key and library source info to problem events
parent
3a973d42
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
30 additions
and
6 deletions
+30
-6
lms/djangoapps/courseware/module_render.py
+6
-0
lms/djangoapps/courseware/tests/test_module_render.py
+24
-6
No files found.
lms/djangoapps/courseware/module_render.py
View file @
9a116529
...
...
@@ -755,6 +755,7 @@ def _invoke_xblock_handler(request, course_id, usage_id, handler, suffix, user):
try
:
descriptor
=
modulestore
()
.
get_item
(
usage_key
)
descriptor_orig_usage_key
,
descriptor_orig_version
=
modulestore
()
.
get_block_original_usage
(
usage_key
)
except
ItemNotFoundError
:
log
.
warn
(
"Invalid location for course id {course_id}: {usage_key}"
.
format
(
...
...
@@ -768,8 +769,13 @@ def _invoke_xblock_handler(request, course_id, usage_id, handler, suffix, user):
tracking_context
=
{
'module'
:
{
'display_name'
:
descriptor
.
display_name_with_default
,
'usage_key'
:
unicode
(
descriptor
.
location
),
}
}
# For blocks that are inherited from a content library, we add some additional metadata:
if
descriptor_orig_usage_key
is
not
None
:
tracking_context
[
'module'
][
'original_usage_key'
]
=
unicode
(
descriptor_orig_usage_key
)
tracking_context
[
'module'
][
'original_usage_version'
]
=
unicode
(
descriptor_orig_version
)
field_data_cache
=
FieldDataCache
.
cache_for_descriptor_descendents
(
course_id
,
...
...
lms/djangoapps/courseware/tests/test_module_render.py
View file @
9a116529
...
...
@@ -5,6 +5,7 @@ Test for lms courseware app, module render unit
from
functools
import
partial
import
json
from
bson
import
ObjectId
import
ddt
from
django.http
import
Http404
,
HttpResponse
from
django.core.urlresolvers
import
reverse
...
...
@@ -13,6 +14,7 @@ from django.test.client import RequestFactory
from
django.test.utils
import
override_settings
from
django.contrib.auth.models
import
AnonymousUser
from
mock
import
MagicMock
,
patch
,
Mock
from
opaque_keys.edx.keys
import
UsageKey
from
opaque_keys.edx.locations
import
SlashSeparatedCourseKey
from
xblock.field_data
import
FieldData
from
xblock.runtime
import
Runtime
...
...
@@ -971,12 +973,13 @@ class TestModuleTrackingContext(ModuleStoreTestCase):
def
test_context_contains_display_name
(
self
,
mock_tracker
):
problem_display_name
=
u'Option Response Problem'
actual_display_name
=
self
.
handle_callback_and_get_display_name
_from_event
(
mock_tracker
,
problem_display_name
)
self
.
assertEquals
(
problem_display_name
,
actual_display_name
)
module_info
=
self
.
handle_callback_and_get_module_info
_from_event
(
mock_tracker
,
problem_display_name
)
self
.
assertEquals
(
problem_display_name
,
module_info
[
'display_name'
]
)
def
handle_callback_and_get_
display_name
_from_event
(
self
,
mock_tracker
,
problem_display_name
=
None
):
def
handle_callback_and_get_
module_info
_from_event
(
self
,
mock_tracker
,
problem_display_name
=
None
):
"""
Creates a fake module, invokes the callback and extracts the display name from the emitted problem_check event.
Creates a fake module, invokes the callback and extracts the 'module'
metadata from the emitted problem_check event.
"""
descriptor_kwargs
=
{
'category'
:
'problem'
,
...
...
@@ -1000,12 +1003,27 @@ class TestModuleTrackingContext(ModuleStoreTestCase):
event
=
mock_call
[
1
][
0
]
self
.
assertEquals
(
event
[
'event_type'
],
'problem_check'
)
return
event
[
'context'
][
'module'
]
[
'display_name'
]
return
event
[
'context'
][
'module'
]
def
test_missing_display_name
(
self
,
mock_tracker
):
actual_display_name
=
self
.
handle_callback_and_get_
display_name_from_event
(
mock_tracker
)
actual_display_name
=
self
.
handle_callback_and_get_
module_info_from_event
(
mock_tracker
)[
'display_name'
]
self
.
assertTrue
(
actual_display_name
.
startswith
(
'problem'
))
def
test_library_source_information
(
self
,
mock_tracker
):
"""
Check that XBlocks that are inherited from a library include the
information about their library block source in events.
We patch the modulestore to avoid having to create a library.
"""
original_usage_key
=
UsageKey
.
from_string
(
u'block-v1:A+B+C+type@problem+block@abcd1234'
)
original_usage_version
=
ObjectId
()
with
patch
(
'xmodule.modulestore.mixed.MixedModuleStore.get_block_original_usage'
,
lambda
_
,
key
:
(
original_usage_key
,
original_usage_version
)):
module_info
=
self
.
handle_callback_and_get_module_info_from_event
(
mock_tracker
)
self
.
assertIn
(
'original_usage_key'
,
module_info
)
self
.
assertEqual
(
module_info
[
'original_usage_key'
],
unicode
(
original_usage_key
))
self
.
assertIn
(
'original_usage_version'
,
module_info
)
self
.
assertEqual
(
module_info
[
'original_usage_version'
],
unicode
(
original_usage_version
))
class
TestXmoduleRuntimeEvent
(
TestSubmittingProblems
):
"""
...
...
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