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
939dbb6c
Commit
939dbb6c
authored
Nov 05, 2013
by
Sarina Canelake
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1579 from edx/sarina/enhance-user-factories
Sarina/enhance user factories
parents
68a42902
ea529b88
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
50 additions
and
29 deletions
+50
-29
common/djangoapps/student/tests/factories.py
+5
-2
lms/djangoapps/bulk_email/tests/test_email.py
+6
-9
lms/djangoapps/courseware/tests/factories.py
+21
-0
lms/djangoapps/instructor/access.py
+1
-1
lms/djangoapps/instructor/tests/test_access.py
+11
-11
lms/djangoapps/instructor/tests/test_api.py
+0
-0
lms/djangoapps/instructor/views/api.py
+6
-6
No files found.
common/djangoapps/student/tests/factories.py
View file @
939dbb6c
"""Provides factories for student models."""
from
student.models
import
(
User
,
UserProfile
,
Registration
,
CourseEnrollmentAllowed
,
CourseEnrollment
,
PendingEmailChange
,
UserStanding
,
...
...
@@ -10,7 +11,7 @@ from uuid import uuid4
from
pytz
import
UTC
# Factories don't have __init__ methods, and are self documenting
# pylint: disable=W0232
# pylint: disable=W0232
, C0111
class
GroupFactory
(
DjangoModelFactory
):
...
...
@@ -18,6 +19,7 @@ class GroupFactory(DjangoModelFactory):
name
=
u'staff_MITx/999/Robot_Super_Course'
class
UserStandingFactory
(
DjangoModelFactory
):
FACTORY_FOR
=
UserStanding
...
...
@@ -47,6 +49,7 @@ class CourseModeFactory(DjangoModelFactory):
suggested_prices
=
''
currency
=
'usd'
class
RegistrationFactory
(
DjangoModelFactory
):
FACTORY_FOR
=
Registration
...
...
@@ -70,7 +73,7 @@ class UserFactory(DjangoModelFactory):
date_joined
=
datetime
(
2011
,
1
,
1
,
tzinfo
=
UTC
)
@post_generation
def
profile
(
obj
,
create
,
extracted
,
**
kwargs
):
def
profile
(
obj
,
create
,
extracted
,
**
kwargs
):
# pylint: disable=unused-argument, no-self-argument
if
create
:
obj
.
save
()
return
UserProfileFactory
.
create
(
user
=
obj
,
**
kwargs
)
...
...
lms/djangoapps/bulk_email/tests/test_email.py
View file @
939dbb6c
...
...
@@ -11,7 +11,9 @@ from django.core.management import call_command
from
django.test.utils
import
override_settings
from
courseware.tests.tests
import
TEST_DATA_MONGO_MODULESTORE
from
student.tests.factories
import
UserFactory
,
GroupFactory
,
CourseEnrollmentFactory
from
student.tests.factories
import
CourseEnrollmentFactory
,
UserFactory
from
courseware.tests.factories
import
StaffFactory
,
InstructorFactory
from
xmodule.modulestore.tests.django_utils
import
ModuleStoreTestCase
from
xmodule.modulestore.tests.factories
import
CourseFactory
from
bulk_email.models
import
Optout
...
...
@@ -47,16 +49,11 @@ class TestEmailSendFromDashboard(ModuleStoreTestCase):
@patch.dict
(
settings
.
MITX_FEATURES
,
{
'ENABLE_INSTRUCTOR_EMAIL'
:
True
,
'REQUIRE_COURSE_EMAIL_AUTH'
:
False
})
def
setUp
(
self
):
self
.
course
=
CourseFactory
.
create
()
self
.
instructor
=
UserFactory
.
create
(
username
=
"instructor"
,
email
=
"robot+instructor@edx.org"
)
# Create instructor group for course
instructor_group
=
GroupFactory
.
create
(
name
=
"instructor_MITx/999/Robot_Super_Course"
)
instructor_group
.
user_set
.
add
(
self
.
instructor
)
self
.
instructor
=
InstructorFactory
(
self
.
course
)
# Create staff
self
.
staff
=
[
UserFactory
()
for
_
in
xrange
(
STAFF_COUNT
)]
staff_group
=
GroupFactory
()
for
staff
in
self
.
staff
:
staff_group
.
user_set
.
add
(
staff
)
# pylint: disable=E1101
self
.
staff
=
[
StaffFactory
(
self
.
course
)
for
_
in
xrange
(
STAFF_COUNT
)]
# Create students
self
.
students
=
[
UserFactory
()
for
_
in
xrange
(
STUDENT_COUNT
)]
...
...
lms/djangoapps/courseware/tests/factories.py
View file @
939dbb6c
...
...
@@ -10,6 +10,7 @@ from student.tests.factories import CourseEnrollmentAllowedFactory as StudentCou
from
student.tests.factories
import
RegistrationFactory
as
StudentRegistrationFactory
from
courseware.models
import
StudentModule
,
XModuleUserStateSummaryField
from
courseware.models
import
XModuleStudentInfoField
,
XModuleStudentPrefsField
from
instructor.access
import
allow_access
from
xmodule.modulestore
import
Location
from
pytz
import
UTC
...
...
@@ -33,6 +34,26 @@ class UserFactory(StudentUserFactory):
date_joined
=
datetime
.
now
(
UTC
)
def
InstructorFactory
(
course
):
# pylint: disable=invalid-name
"""
Given a course object, returns a User object with instructor
permissions for `course`.
"""
user
=
StudentUserFactory
.
create
(
last_name
=
"Instructor"
)
allow_access
(
course
,
user
,
"instructor"
)
return
user
def
StaffFactory
(
course
):
# pylint: disable=invalid-name
"""
Given a course object, returns a User object with staff
permissions for `course`.
"""
user
=
StudentUserFactory
.
create
(
last_name
=
"Staff"
)
allow_access
(
course
,
user
,
"staff"
)
return
user
class
GroupFactory
(
StudentGroupFactory
):
name
=
'test_group'
...
...
lms/djangoapps/instructor/access.py
View file @
939dbb6c
...
...
@@ -82,7 +82,7 @@ def _change_access(course, user, level, action):
raise
ValueError
(
"unrecognized action '{}'"
.
format
(
action
))
def
update_forum_role
_membership
(
course_id
,
user
,
rolename
,
action
):
def
update_forum_role
(
course_id
,
user
,
rolename
,
action
):
"""
Change forum access of user.
...
...
lms/djangoapps/instructor/tests/test_access.py
View file @
939dbb6c
...
...
@@ -17,7 +17,7 @@ from django_comment_common.models import (Role,
from
instructor.access
import
(
allow_access
,
revoke_access
,
list_with_level
,
update_forum_role
_membership
)
update_forum_role
)
@override_settings
(
MODULESTORE
=
TEST_DATA_MIXED_MODULESTORE
)
...
...
@@ -148,44 +148,44 @@ class TestInstructorAccessForum(ModuleStoreTestCase):
def
test_allow
(
self
):
user
=
UserFactory
.
create
()
update_forum_role
_membership
(
self
.
course
.
id
,
user
,
FORUM_ROLE_MODERATOR
,
'allow'
)
update_forum_role
(
self
.
course
.
id
,
user
,
FORUM_ROLE_MODERATOR
,
'allow'
)
self
.
assertIn
(
user
,
self
.
mod_role
.
users
.
all
())
def
test_allow_twice
(
self
):
user
=
UserFactory
.
create
()
update_forum_role
_membership
(
self
.
course
.
id
,
user
,
FORUM_ROLE_MODERATOR
,
'allow'
)
update_forum_role
(
self
.
course
.
id
,
user
,
FORUM_ROLE_MODERATOR
,
'allow'
)
self
.
assertIn
(
user
,
self
.
mod_role
.
users
.
all
())
update_forum_role
_membership
(
self
.
course
.
id
,
user
,
FORUM_ROLE_MODERATOR
,
'allow'
)
update_forum_role
(
self
.
course
.
id
,
user
,
FORUM_ROLE_MODERATOR
,
'allow'
)
self
.
assertIn
(
user
,
self
.
mod_role
.
users
.
all
())
@raises
(
Role
.
DoesNotExist
)
def
test_allow_badrole
(
self
):
user
=
UserFactory
.
create
()
update_forum_role
_membership
(
self
.
course
.
id
,
user
,
'robot-not-a-real-role'
,
'allow'
)
update_forum_role
(
self
.
course
.
id
,
user
,
'robot-not-a-real-role'
,
'allow'
)
def
test_revoke
(
self
):
user
=
self
.
moderators
[
0
]
update_forum_role
_membership
(
self
.
course
.
id
,
user
,
FORUM_ROLE_MODERATOR
,
'revoke'
)
update_forum_role
(
self
.
course
.
id
,
user
,
FORUM_ROLE_MODERATOR
,
'revoke'
)
self
.
assertNotIn
(
user
,
self
.
mod_role
.
users
.
all
())
def
test_revoke_twice
(
self
):
user
=
self
.
moderators
[
0
]
update_forum_role
_membership
(
self
.
course
.
id
,
user
,
FORUM_ROLE_MODERATOR
,
'revoke'
)
update_forum_role
(
self
.
course
.
id
,
user
,
FORUM_ROLE_MODERATOR
,
'revoke'
)
self
.
assertNotIn
(
user
,
self
.
mod_role
.
users
.
all
())
update_forum_role
_membership
(
self
.
course
.
id
,
user
,
FORUM_ROLE_MODERATOR
,
'revoke'
)
update_forum_role
(
self
.
course
.
id
,
user
,
FORUM_ROLE_MODERATOR
,
'revoke'
)
self
.
assertNotIn
(
user
,
self
.
mod_role
.
users
.
all
())
def
test_revoke_notallowed
(
self
):
user
=
UserFactory
()
update_forum_role
_membership
(
self
.
course
.
id
,
user
,
FORUM_ROLE_MODERATOR
,
'revoke'
)
update_forum_role
(
self
.
course
.
id
,
user
,
FORUM_ROLE_MODERATOR
,
'revoke'
)
self
.
assertNotIn
(
user
,
self
.
mod_role
.
users
.
all
())
@raises
(
Role
.
DoesNotExist
)
def
test_revoke_badrole
(
self
):
user
=
self
.
moderators
[
0
]
update_forum_role
_membership
(
self
.
course
.
id
,
user
,
'robot-not-a-real-role'
,
'allow'
)
update_forum_role
(
self
.
course
.
id
,
user
,
'robot-not-a-real-role'
,
'allow'
)
@raises
(
ValueError
)
def
test_bad_mode
(
self
):
user
=
UserFactory
()
update_forum_role
_membership
(
self
.
course
.
id
,
user
,
FORUM_ROLE_MODERATOR
,
'robot-not-a-mode'
)
update_forum_role
(
self
.
course
.
id
,
user
,
FORUM_ROLE_MODERATOR
,
'robot-not-a-mode'
)
lms/djangoapps/instructor/tests/test_api.py
View file @
939dbb6c
This diff is collapsed.
Click to expand it.
lms/djangoapps/instructor/views/api.py
View file @
939dbb6c
...
...
@@ -35,7 +35,7 @@ from instructor_task.views import get_task_completion_info
import
instructor.enrollment
as
enrollment
from
instructor.enrollment
import
enroll_email
,
unenroll_email
from
instructor.views.tools
import
strip_if_string
,
get_student_from_identifier
import
instructor.access
as
access
from
instructor.access
import
list_with_level
,
allow_access
,
revoke_access
,
update_forum_role
import
analytics.basic
import
analytics.distributions
import
analytics.csvs
...
...
@@ -294,9 +294,9 @@ def modify_access(request, course_id):
)
if
action
==
'allow'
:
a
ccess
.
a
llow_access
(
course
,
user
,
rolename
)
allow_access
(
course
,
user
,
rolename
)
elif
action
==
'revoke'
:
access
.
revoke_access
(
course
,
user
,
rolename
)
revoke_access
(
course
,
user
,
rolename
)
else
:
return
HttpResponseBadRequest
(
"unrecognized action '{}'"
.
format
(
action
))
...
...
@@ -352,7 +352,7 @@ def list_course_role_members(request, course_id):
response_payload
=
{
'course_id'
:
course_id
,
rolename
:
map
(
extract_user_info
,
access
.
list_with_level
(
rolename
:
map
(
extract_user_info
,
list_with_level
(
course
,
rolename
)),
}
...
...
@@ -381,7 +381,7 @@ def get_grading_config(request, course_id):
@ensure_csrf_cookie
@cache_control
(
no_cache
=
True
,
no_store
=
True
,
must_revalidate
=
True
)
@require_level
(
'staff'
)
def
get_students_features
(
request
,
course_id
,
csv
=
False
):
# pylint: disable=W0613
def
get_students_features
(
request
,
course_id
,
csv
=
False
):
# pylint: disable=W0613
, W0621
"""
Respond with json which contains a summary of all enrolled students profile information.
...
...
@@ -882,7 +882,7 @@ def update_forum_role_membership(request, course_id):
return
HttpResponseBadRequest
(
"Cannot revoke instructor forum admin privelages."
)
try
:
access
.
update_forum_role_membership
(
course_id
,
user
,
rolename
,
action
)
update_forum_role
(
course_id
,
user
,
rolename
,
action
)
except
Role
.
DoesNotExist
:
return
HttpResponseBadRequest
(
"Role does not exist."
)
...
...
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