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
74aa3a5b
Commit
74aa3a5b
authored
May 08, 2014
by
zubair-arbi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
create course gorups properly on course import
STUD-1595
parent
fb9b38b7
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
68 additions
and
31 deletions
+68
-31
cms/djangoapps/contentstore/tests/utils.py
+5
-4
cms/djangoapps/contentstore/views/import_export.py
+14
-21
cms/djangoapps/contentstore/views/tests/test_import_export.py
+49
-6
No files found.
cms/djangoapps/contentstore/tests/utils.py
View file @
74aa3a5b
...
...
@@ -4,16 +4,16 @@ Utilities for contentstore tests
import
json
from
student.models
import
Registration
from
django.contrib.auth.models
import
User
from
django.test.client
import
Client
from
django.test.utils
import
override_settings
from
xmodule.modulestore.django
import
loc_mapper
from
xmodule.modulestore.tests.django_utils
import
ModuleStoreTestCase
from
xmodule.modulestore.tests.factories
import
CourseFactory
,
ItemFactory
from
contentstore.tests.modulestore_config
import
TEST_MODULESTORE
from
contentstore.utils
import
get_modulestore
from
xmodule.modulestore.django
import
loc_mapper
from
student.models
import
Registration
def
parse_json
(
response
):
...
...
@@ -98,9 +98,9 @@ class CourseTestCase(ModuleStoreTestCase):
)
self
.
store
=
get_modulestore
(
self
.
course
.
location
)
def
create_non_staff_authed_user_client
(
self
):
def
create_non_staff_authed_user_client
(
self
,
authenticate
=
True
):
"""
Create a non-staff user, log them in, and return the client, user to use for testing.
Create a non-staff user, log them in
(if authenticate=True)
, and return the client, user to use for testing.
"""
uname
=
'teststudent'
password
=
'foo'
...
...
@@ -113,6 +113,7 @@ class CourseTestCase(ModuleStoreTestCase):
nonstaff
.
save
()
client
=
Client
()
if
authenticate
:
client
.
login
(
username
=
uname
,
password
=
password
)
return
client
,
nonstaff
...
...
cms/djangoapps/contentstore/views/import_export.py
View file @
74aa3a5b
...
...
@@ -4,38 +4,35 @@ courses
"""
import
logging
import
os
import
tarfile
import
shutil
import
re
from
tempfile
import
mkdtemp
import
shutil
import
tarfile
from
path
import
path
from
tempfile
import
mkdtemp
from
django.conf
import
settings
from
django.http
import
HttpResponse
from
django.contrib.auth.decorators
import
login_required
from
django_future.csrf
import
ensure_csrf_cookie
from
django.core.servers.basehttp
import
FileWrapper
from
django.core.files.temp
import
NamedTemporaryFile
from
django.core.exceptions
import
SuspiciousOperation
,
PermissionDenied
from
django.http
import
HttpResponseNotFound
from
django.views.decorators.http
import
require_http_methods
,
require_GET
from
django.core.files.temp
import
NamedTemporaryFile
from
django.core.servers.basehttp
import
FileWrapper
from
django.http
import
HttpResponse
,
HttpResponseNotFound
from
django.utils.translation
import
ugettext
as
_
from
django.views.decorators.http
import
require_http_methods
,
require_GET
from
django_future.csrf
import
ensure_csrf_cookie
from
edxmako.shortcuts
import
render_to_response
from
xmodule.modulestore.xml_importer
import
import_from_xml
from
xmodule.contentstore.django
import
contentstore
from
xmodule.modulestore.xml_exporter
import
export_to_xml
from
xmodule.modulestore.django
import
modulestore
,
loc_mapper
from
xmodule.exceptions
import
SerializationError
from
xmodule.modulestore.django
import
modulestore
,
loc_mapper
from
xmodule.modulestore.locator
import
BlockUsageLocator
from
.access
import
has_course_access
from
xmodule.modulestore.xml_importer
import
import_from_xml
from
xmodule.modulestore.xml_exporter
import
export_to_xml
from
util.json_request
import
JsonResponse
from
.access
import
has_course_access
from
extract_tar
import
safetar_extractall
from
student.roles
import
CourseInstructorRole
,
CourseStaffRole
from
student
import
auth
from
student.roles
import
CourseInstructorRole
,
CourseStaffRole
,
GlobalStaff
from
util.json_request
import
JsonResponse
__all__
=
[
'import_handler'
,
'import_status_handler'
,
'export_handler'
]
...
...
@@ -232,10 +229,6 @@ def import_handler(request, tag=None, package_id=None, branch=None, version_guid
session_status
[
key
]
=
3
request
.
session
.
modified
=
True
auth
.
add_users
(
request
.
user
,
CourseInstructorRole
(
new_location
),
request
.
user
)
auth
.
add_users
(
request
.
user
,
CourseStaffRole
(
new_location
),
request
.
user
)
logging
.
debug
(
'created all course groups at {0}'
.
format
(
new_location
))
# Send errors to client with stage at which error occurred.
except
Exception
as
exception
:
# pylint: disable=W0703
log
.
exception
(
...
...
cms/djangoapps/contentstore/views/tests/test_import_export.py
View file @
74aa3a5b
"""
Unit tests for course import and export
"""
import
copy
import
json
import
logging
import
os
import
shutil
import
tarfile
import
tempfile
import
copy
from
path
import
path
import
json
import
logging
from
uuid
import
uuid4
from
pymongo
import
MongoClient
from
uuid
import
uuid4
from
contentstore.tests.utils
import
CourseTestCase
from
django.test.utils
import
override_settings
from
django.conf
import
settings
from
xmodule.modulestore.django
import
loc_mapper
from
xmodule.contentstore.django
import
_CONTENTSTORE
from
xmodule.modulestore.django
import
loc_mapper
from
xmodule.modulestore.tests.factories
import
ItemFactory
from
contentstore.tests.utils
import
CourseTestCase
from
student
import
auth
from
student.roles
import
CourseInstructorRole
,
CourseStaffRole
TEST_DATA_CONTENTSTORE
=
copy
.
deepcopy
(
settings
.
CONTENTSTORE
)
TEST_DATA_CONTENTSTORE
[
'DOC_STORE_CONFIG'
][
'db'
]
=
'test_xcontent_
%
s'
%
uuid4
()
.
hex
...
...
@@ -107,6 +110,46 @@ class ImportTestCase(CourseTestCase):
self
.
assertEquals
(
resp
.
status_code
,
200
)
def
test_import_in_existing_course
(
self
):
"""
Check that course is imported successfully in existing course and users have their access roles
"""
# Create a non_staff user and add it to course staff only
__
,
nonstaff_user
=
self
.
create_non_staff_authed_user_client
(
authenticate
=
False
)
auth
.
add_users
(
self
.
user
,
CourseStaffRole
(
self
.
course
.
location
),
nonstaff_user
)
course
=
self
.
store
.
get_item
(
self
.
course_location
)
self
.
assertIsNotNone
(
course
)
display_name_before_import
=
course
.
display_name
# Check that global staff user can import course
with
open
(
self
.
good_tar
)
as
gtar
:
args
=
{
"name"
:
self
.
good_tar
,
"course-data"
:
[
gtar
]}
resp
=
self
.
client
.
post
(
self
.
url
,
args
)
self
.
assertEquals
(
resp
.
status_code
,
200
)
course
=
self
.
store
.
get_item
(
self
.
course_location
)
self
.
assertIsNotNone
(
course
)
display_name_after_import
=
course
.
display_name
# Check that course display name have changed after import
self
.
assertNotEqual
(
display_name_before_import
,
display_name_after_import
)
# Now check that non_staff user has his same role
self
.
assertFalse
(
CourseInstructorRole
(
self
.
course_location
)
.
has_user
(
nonstaff_user
))
self
.
assertTrue
(
CourseStaffRole
(
self
.
course_location
)
.
has_user
(
nonstaff_user
))
# Now course staff user can also successfully import course
self
.
client
.
login
(
username
=
nonstaff_user
.
username
,
password
=
'foo'
)
with
open
(
self
.
good_tar
)
as
gtar
:
args
=
{
"name"
:
self
.
good_tar
,
"course-data"
:
[
gtar
]}
resp
=
self
.
client
.
post
(
self
.
url
,
args
)
self
.
assertEquals
(
resp
.
status_code
,
200
)
# Now check that non_staff user has his same role
self
.
assertFalse
(
CourseInstructorRole
(
self
.
course_location
)
.
has_user
(
nonstaff_user
))
self
.
assertTrue
(
CourseStaffRole
(
self
.
course_location
)
.
has_user
(
nonstaff_user
))
## Unsafe tar methods #####################################################
# Each of these methods creates a tarfile with a single type of unsafe
# content.
...
...
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