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
8bfccd73
Commit
8bfccd73
authored
May 30, 2013
by
Vasyl Nakvasiuk
Committed by
Jason Bau
Jun 08, 2013
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add python video tests
parent
5e83335d
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
283 additions
and
0 deletions
+283
-0
lms/djangoapps/courseware/tests/__init__.py
+97
-0
lms/djangoapps/courseware/tests/test_video_mongo.py
+49
-0
lms/djangoapps/courseware/tests/test_video_xml.py
+137
-0
No files found.
lms/djangoapps/courseware/tests/__init__.py
View file @
8bfccd73
"""
integration tests for xmodule
Contains:
1. BaseTestXmodule class provides course and users
for testing Xmodules with mongo store.
"""
from
django.test.utils
import
override_settings
from
django.core.urlresolvers
import
reverse
from
django.test.client
import
Client
from
student.tests.factories
import
UserFactory
,
CourseEnrollmentFactory
from
courseware.tests.tests
import
TEST_DATA_MONGO_MODULESTORE
from
xmodule.modulestore
import
Location
from
xmodule.modulestore.django
import
modulestore
from
xmodule.modulestore.tests.factories
import
CourseFactory
,
ItemFactory
from
xmodule.modulestore.tests.django_utils
import
ModuleStoreTestCase
@override_settings
(
MODULESTORE
=
TEST_DATA_MONGO_MODULESTORE
)
class
BaseTestXmodule
(
ModuleStoreTestCase
):
"""Base class for testing Xmodules with mongo store.
This class prepares course and users for tests:
1. create test course
2. create, enrol and login users for this course
Any xmodule should overwrite only next parameters for test:
1. TEMPLATE_NAME
2. DATA
3. COURSE_DATA and USER_COUNT if needed
This class should not contain any tests, because TEMPLATE_NAME
should be defined in child class.
"""
USER_COUNT
=
2
COURSE_DATA
=
{}
# Data from YAML common/lib/xmodule/xmodule/templates/NAME/default.yaml
TEMPLATE_NAME
=
""
DATA
=
{}
def
setUp
(
self
):
self
.
course
=
CourseFactory
.
create
(
data
=
self
.
COURSE_DATA
)
# Turn off cache.
modulestore
()
.
request_cache
=
None
modulestore
()
.
metadata_inheritance_cache_subsystem
=
None
chapter
=
ItemFactory
.
create
(
parent_location
=
self
.
course
.
location
,
template
=
"i4x://edx/templates/sequential/Empty"
,
)
section
=
ItemFactory
.
create
(
parent_location
=
chapter
.
location
,
template
=
"i4x://edx/templates/sequential/Empty"
)
# username = robot{0}, password = 'test'
self
.
users
=
[
UserFactory
.
create
(
username
=
'robot
%
d'
%
i
,
email
=
'robot+test+
%
d@edx.org'
%
i
)
for
i
in
range
(
self
.
USER_COUNT
)
]
for
user
in
self
.
users
:
CourseEnrollmentFactory
.
create
(
user
=
user
,
course_id
=
self
.
course
.
id
)
item
=
ItemFactory
.
create
(
parent_location
=
section
.
location
,
template
=
self
.
TEMPLATE_NAME
,
data
=
self
.
DATA
)
self
.
item_url
=
Location
(
item
.
location
)
.
url
()
# login all users for acces to Xmodule
self
.
clients
=
{
user
.
username
:
Client
()
for
user
in
self
.
users
}
self
.
login_statuses
=
[
self
.
clients
[
user
.
username
]
.
login
(
username
=
user
.
username
,
password
=
'test'
)
for
user
in
self
.
users
]
self
.
assertTrue
(
all
(
self
.
login_statuses
))
def
get_url
(
self
,
dispatch
):
"""Return word cloud url with dispatch."""
return
reverse
(
'modx_dispatch'
,
args
=
(
self
.
course
.
id
,
self
.
item_url
,
dispatch
)
)
def
tearDown
(
self
):
for
user
in
self
.
users
:
user
.
delete
()
lms/djangoapps/courseware/tests/test_video_mongo.py
0 → 100644
View file @
8bfccd73
# -*- coding: utf-8 -*-
"""Video xmodule tests in mongo."""
import
json
from
.
import
BaseTestXmodule
class
TestVideo
(
BaseTestXmodule
):
"""Integration tests: web client + mongo."""
TEMPLATE_NAME
=
"i4x://edx/templates/video/default"
DATA
=
'<video youtube="0.75:JMD_ifUUfsU,1.0:OEoXaMPEzfM,1.25:AKqURZnYqpk,1.50:DYpADpL7jAY"/>'
def
test_handle_ajax_correct_dispatch
(
self
):
responses
=
{
user
.
username
:
self
.
clients
[
user
.
username
]
.
post
(
self
.
get_url
(
'goto_position'
),
{
'position'
:
10
},
HTTP_X_REQUESTED_WITH
=
'XMLHttpRequest'
)
for
user
in
self
.
users
}
response_contents
=
{
username
:
json
.
loads
(
response
.
content
)
for
username
,
response
in
responses
.
items
()
}
self
.
assertTrue
(
all
([
content
[
'success'
]
for
_
,
content
in
response_contents
.
items
()
]))
def
test_handle_ajax_incorrect_dispatch
(
self
):
responses
=
{
user
.
username
:
self
.
clients
[
user
.
username
]
.
post
(
self
.
get_url
(
'whatever'
),
{},
HTTP_X_REQUESTED_WITH
=
'XMLHttpRequest'
)
for
user
in
self
.
users
}
self
.
assertEqual
(
set
([
response
.
status_code
for
_
,
response
in
responses
.
items
()
])
.
pop
(),
404
)
lms/djangoapps/courseware/tests/test_video_xml.py
0 → 100644
View file @
8bfccd73
# -*- coding: utf-8 -*-
"""Test for Video Xmodule functional logic.
These tests data readed from xml, not from mongo.
We have a ModuleStoreTestCase class defined in
common/lib/xmodule/xmodule/modulestore/tests/django_utils.py.
You can search for usages of this in the cms and lms tests for examples.
You use this so that it will do things like point the modulestore
setting to mongo, flush the contentstore before and after, load the
templates, etc.
You can then use the CourseFactory and XModuleItemFactory as defined in
common/lib/xmodule/xmodule/modulestore/tests/factories.py to create the
course, section, subsection, unit, etc.
"""
import
json
import
unittest
from
mock
import
Mock
from
lxml
import
etree
from
xmodule.video_module
import
VideoDescriptor
,
VideoModule
from
xmodule.modulestore
import
Location
from
xmodule.tests
import
test_system
from
xmodule.tests.test_logic
import
LogicTest
class
VideoFactory
(
object
):
"""A helper class to create video modules with various parameters
for testing.
"""
# tag that uses youtube videos
sample_problem_xml_youtube
=
"""
<video show_captions="true"
youtube="0.75:jNCf2gIqpeE,1.0:ZwkTiUPN0mg,1.25:rsq9auxASqI,1.50:kMyNdzVHHgg"
data_dir=""
caption_asset_path=""
autoplay="true"
from="01:00:03" to="01:00:10"
>
<source src=".../mit-3091x/M-3091X-FA12-L21-3_100.mp4"/>
</video>
"""
@staticmethod
def
create
():
"""Method return Video Xmodule instance."""
location
=
Location
([
"i4x"
,
"edX"
,
"video"
,
"default"
,
"SampleProblem{0}"
.
format
(
1
)])
model_data
=
{
'data'
:
VideoFactory
.
sample_problem_xml_youtube
}
descriptor
=
Mock
(
weight
=
"1"
)
system
=
test_system
()
system
.
render_template
=
lambda
template
,
context
:
context
module
=
VideoModule
(
system
,
location
,
descriptor
,
model_data
)
return
module
class
VideoModuleLogicTest
(
LogicTest
):
"""Tests for logic of Video Xmodule."""
descriptor_class
=
VideoDescriptor
raw_model_data
=
{
'data'
:
'<video />'
}
def
test_get_timeframe_no_parameters
(
self
):
"""Make sure that timeframe() works correctly w/o parameters"""
xmltree
=
etree
.
fromstring
(
'<video>test</video>'
)
output
=
self
.
xmodule
.
_get_timeframe
(
xmltree
)
self
.
assertEqual
(
output
,
(
''
,
''
))
def
test_get_timeframe_with_one_parameter
(
self
):
"""Make sure that timeframe() works correctly with one parameter"""
xmltree
=
etree
.
fromstring
(
'<video from="00:04:07">test</video>'
)
output
=
self
.
xmodule
.
_get_timeframe
(
xmltree
)
self
.
assertEqual
(
output
,
(
247
,
''
))
def
test_get_timeframe_with_two_parameters
(
self
):
"""Make sure that timeframe() works correctly with two parameters"""
xmltree
=
etree
.
fromstring
(
'''<video
from="00:04:07"
to="13:04:39"
>test</video>'''
)
output
=
self
.
xmodule
.
_get_timeframe
(
xmltree
)
self
.
assertEqual
(
output
,
(
247
,
47079
))
class
VideoModuleUnitTest
(
unittest
.
TestCase
):
"""Unit tests for Video Xmodule."""
def
test_video_constructor
(
self
):
"""Make sure that all parameters extracted correclty from xml"""
module
=
VideoFactory
.
create
()
# `get_html` return only context, cause we
# overwrite `system.render_template`
context
=
module
.
get_html
()
expected_context
=
{
'track'
:
None
,
'show_captions'
:
'true'
,
'display_name'
:
'SampleProblem1'
,
'id'
:
'i4x-edX-video-default-SampleProblem1'
,
'end'
:
3610.0
,
'caption_asset_path'
:
'/static/subs/'
,
'source'
:
'.../mit-3091x/M-3091X-FA12-L21-3_100.mp4'
,
'streams'
:
'0.75:jNCf2gIqpeE,1.0:ZwkTiUPN0mg,1.25:rsq9auxASqI,1.50:kMyNdzVHHgg'
,
'normal_speed_video_id'
:
'ZwkTiUPN0mg'
,
'position'
:
0
,
'start'
:
3603.0
}
self
.
assertDictEqual
(
context
,
expected_context
)
self
.
assertEqual
(
module
.
youtube
,
'0.75:jNCf2gIqpeE,1.0:ZwkTiUPN0mg,1.25:rsq9auxASqI,1.50:kMyNdzVHHgg'
)
self
.
assertEqual
(
module
.
video_list
(),
module
.
youtube
)
self
.
assertEqual
(
module
.
position
,
0
)
self
.
assertDictEqual
(
json
.
loads
(
module
.
get_instance_state
()),
{
'position'
:
0
})
self
.
assertIsNone
(
module
.
get_progress
())
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