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
e6c9a6c9
Commit
e6c9a6c9
authored
Mar 11, 2014
by
Sarina Canelake
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #2889 from edx/sarina/fix-abtest-for-sequentials
Bugfix for split test on sequential save
parents
be239bdb
119ffd46
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
63 additions
and
12 deletions
+63
-12
common/lib/xmodule/xmodule/modulestore/tests/factories.py
+3
-0
common/lib/xmodule/xmodule/partitions/partitions.py
+11
-12
lms/djangoapps/courseware/tests/test_split_module.py
+49
-0
No files found.
common/lib/xmodule/xmodule/modulestore/tests/factories.py
View file @
e6c9a6c9
...
...
@@ -56,6 +56,8 @@ class CourseFactory(XModuleFactory):
for
k
,
v
in
kwargs
.
iteritems
():
setattr
(
new_course
,
k
,
v
)
# Save the attributes we just set
new_course
.
save
()
# Update the data in the mongo datastore
store
.
update_item
(
new_course
)
return
new_course
...
...
@@ -156,6 +158,7 @@ class ItemFactory(XModuleFactory):
for
attr
,
val
in
kwargs
.
items
():
setattr
(
module
,
attr
,
val
)
# Save the attributes we just set
module
.
save
()
store
.
update_item
(
module
)
...
...
common/lib/xmodule/xmodule/partitions/partitions.py
View file @
e6c9a6c9
"""Defines ``Group`` and ``UserPartition`` models for partitioning"""
from
collections
import
namedtuple
# We use ``id`` in this file as the IDs of our Groups and UserPartitions,
# which Pylint disapproves of.
# pylint: disable=invalid-name, redefined-builtin
class
Group
(
object
):
class
Group
(
namedtuple
(
"Group"
,
"id name"
)
):
"""
An id and name for a group of students. The id should be unique
within the UserPartition this group appears in.
...
...
@@ -14,9 +14,9 @@ class Group(object):
# for deserializing old versions. (This will be serialized in courses)
VERSION
=
1
def
__
init__
(
self
,
id
,
name
):
self
.
id
=
int
(
id
)
self
.
name
=
name
def
__
new__
(
cls
,
id
,
name
):
# pylint: disable=super-on-old-class
return
super
(
Group
,
cls
)
.
__new__
(
cls
,
int
(
id
),
name
)
def
to_json
(
self
):
"""
...
...
@@ -25,6 +25,7 @@ class Group(object):
Returns:
a dictionary with keys for the properties of the group.
"""
# pylint: disable=no-member
return
{
"id"
:
self
.
id
,
"name"
:
self
.
name
,
...
...
@@ -53,7 +54,7 @@ class Group(object):
return
Group
(
value
[
"id"
],
value
[
"name"
])
class
UserPartition
(
object
):
class
UserPartition
(
namedtuple
(
"UserPartition"
,
"id name description groups"
)
):
"""
A named way to partition users into groups, primarily intended for running
experiments. It is expected that each user will be in at most one group in a
...
...
@@ -65,12 +66,9 @@ class UserPartition(object):
"""
VERSION
=
1
def
__init__
(
self
,
id
,
name
,
description
,
groups
):
self
.
id
=
int
(
id
)
self
.
name
=
name
self
.
description
=
description
self
.
groups
=
groups
def
__new__
(
cls
,
id
,
name
,
description
,
groups
):
# pylint: disable=super-on-old-class
return
super
(
UserPartition
,
cls
)
.
__new__
(
cls
,
int
(
id
),
name
,
description
,
groups
)
def
to_json
(
self
):
"""
...
...
@@ -79,6 +77,7 @@ class UserPartition(object):
Returns:
a dictionary with keys for the properties of the partition.
"""
# pylint: disable=no-member
return
{
"id"
:
self
.
id
,
"name"
:
self
.
name
,
...
...
lms/djangoapps/courseware/tests/test_split_module.py
View file @
e6c9a6c9
...
...
@@ -3,9 +3,12 @@ Test for split test XModule
"""
from
django.core.urlresolvers
import
reverse
from
django.test.utils
import
override_settings
from
mock
import
MagicMock
from
student.tests.factories
import
UserFactory
,
CourseEnrollmentFactory
from
courseware.tests.modulestore_config
import
TEST_DATA_MIXED_MODULESTORE
from
courseware.module_render
import
get_module_for_descriptor
from
courseware.model_data
import
FieldDataCache
from
xmodule.modulestore.tests.factories
import
ItemFactory
,
CourseFactory
from
xmodule.modulestore.tests.django_utils
import
ModuleStoreTestCase
...
...
@@ -267,3 +270,49 @@ class TestSplitTestVert(SplitTestBase):
)
video1
=
self
.
_video
(
cond1vert
,
1
)
html1
=
self
.
_html
(
cond1vert
,
1
)
@override_settings
(
MODULESTORE
=
TEST_DATA_MIXED_MODULESTORE
)
class
SplitTestPosition
(
ModuleStoreTestCase
):
"""
Check that we can change positions in a course with partitions defined
"""
def
setUp
(
self
):
self
.
partition
=
UserPartition
(
0
,
'first_partition'
,
'First Partition'
,
[
Group
(
0
,
'alpha'
),
Group
(
1
,
'beta'
)
]
)
self
.
course
=
CourseFactory
.
create
(
user_partitions
=
[
self
.
partition
]
)
self
.
chapter
=
ItemFactory
.
create
(
parent_location
=
self
.
course
.
location
,
category
=
"chapter"
,
display_name
=
"test chapter"
,
)
self
.
student
=
UserFactory
.
create
()
CourseEnrollmentFactory
.
create
(
user
=
self
.
student
,
course_id
=
self
.
course
.
id
)
self
.
client
.
login
(
username
=
self
.
student
.
username
,
password
=
'test'
)
def
test_changing_position_works
(
self
):
# Make a mock FieldDataCache for this course, so we can get the course module
mock_field_data_cache
=
FieldDataCache
([
self
.
course
],
self
.
course
.
id
,
self
.
student
)
course
=
get_module_for_descriptor
(
self
.
student
,
MagicMock
(
name
=
'request'
),
self
.
course
,
mock_field_data_cache
,
self
.
course
.
id
)
# Now that we have the course, change the position and save, nothing should explode!
course
.
position
=
2
course
.
save
()
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