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
2695cfe7
Commit
2695cfe7
authored
Nov 16, 2015
by
E. Kolpakov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added course_id parameter
parent
4d5ab8bf
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
42 additions
and
4 deletions
+42
-4
lms/djangoapps/projects/tests/test_projects.py
+27
-3
lms/djangoapps/projects/views.py
+15
-1
No files found.
lms/djangoapps/projects/tests/test_projects.py
View file @
2695cfe7
...
...
@@ -11,10 +11,12 @@ from django.contrib.auth.models import User
from
django.core.cache
import
cache
from
django.test
import
TestCase
,
Client
from
django.test.utils
import
override_settings
from
django.utils.http
import
urlencode
from
projects.models
import
Project
,
Workgroup
from
projects.scope_resolver
import
GroupProjectParticipantsScopeResolver
TEST_API_KEY
=
str
(
uuid
.
uuid4
())
...
...
@@ -96,12 +98,14 @@ class ProjectsApiTests(TestCase):
uri
,
headers
=
headers
,
content_type
=
'application/json'
,
data
=
json_data
)
return
response
def
do_get
(
self
,
uri
):
def
do_get
(
self
,
uri
,
query_parameters
=
None
):
"""Submit an HTTP GET request"""
headers
=
{
'Content-Type'
:
'application/json'
,
'X-Edx-Api-Key'
:
str
(
TEST_API_KEY
),
}
if
query_parameters
:
uri
+=
"?"
+
urlencode
(
query_parameters
)
response
=
self
.
client
.
get
(
uri
,
headers
=
headers
)
return
response
...
...
@@ -130,15 +134,35 @@ class ProjectsApiTests(TestCase):
def
test_projects_list_get_filter_by_content_id
(
self
):
""" Tests GET request with specified content_id - should return single project with matching content_id """
response
=
self
.
do_get
(
self
.
test_projects_uri
+
"?content_id="
+
self
.
test_project
.
content_id
)
filter1
=
{
'course_id'
:
self
.
test_project
.
course_id
,
'content_id'
:
self
.
test_project
.
content_id
}
response
=
self
.
do_get
(
self
.
test_projects_uri
,
filter1
)
self
.
assertEqual
(
len
(
response
.
data
),
1
)
self
.
assertEqual
(
response
.
data
[
0
][
'id'
],
self
.
test_project
.
id
)
self
.
assertEqual
(
response
.
data
[
0
][
'content_id'
],
self
.
test_project
.
content_id
)
self
.
assertEqual
(
response
.
data
[
0
][
'course_id'
],
self
.
test_project
.
course_id
)
response
=
self
.
do_get
(
self
.
test_projects_uri
+
"?content_id="
+
self
.
test_project2
.
content_id
)
filter2
=
{
'course_id'
:
self
.
test_project2
.
course_id
,
'content_id'
:
self
.
test_project2
.
content_id
}
response
=
self
.
do_get
(
self
.
test_projects_uri
,
filter2
)
self
.
assertEqual
(
len
(
response
.
data
),
1
)
self
.
assertEqual
(
response
.
data
[
0
][
'id'
],
self
.
test_project2
.
id
)
self
.
assertEqual
(
response
.
data
[
0
][
'content_id'
],
self
.
test_project2
.
content_id
)
self
.
assertEqual
(
response
.
data
[
0
][
'course_id'
],
self
.
test_project2
.
course_id
)
def
test_projects_list_incorrect_filter_request
(
self
):
""" Tests that GET requests with invalid filter returns BAD REQUEST response """
def
assert_request_failed
(
response
):
""" Assertion helper """
self
.
assertEqual
(
response
.
status_code
,
400
)
self
.
assertIn
(
"detail"
,
response
.
data
)
assert_request_failed
(
self
.
do_get
(
self
.
test_projects_uri
,
{
'course_id'
:
self
.
test_project
.
course_id
}))
assert_request_failed
(
self
.
do_get
(
self
.
test_projects_uri
,
{
'content_id'
:
self
.
test_project
.
content_id
}))
assert_request_failed
(
self
.
do_get
(
self
.
test_projects_uri
,
{
'content_id'
:
""
,
'course_id'
:
self
.
test_project
.
course_id
})
)
assert_request_failed
(
self
.
do_get
(
self
.
test_projects_uri
,
{
'content_id'
:
self
.
test_project
.
content_id
,
'course_id'
:
""
})
)
def
test_projects_list_post
(
self
):
data
=
{
...
...
lms/djangoapps/projects/views.py
View file @
2695cfe7
...
...
@@ -317,15 +317,29 @@ class ProjectsViewSet(viewsets.ModelViewSet):
"""
Django Rest Framework ViewSet for the Project model.
"""
def
list
(
self
,
request
,
*
args
,
**
kwargs
):
target_course_id
=
self
.
request
.
QUERY_PARAMS
.
get
(
'course_id'
)
target_content_id
=
self
.
request
.
QUERY_PARAMS
.
get
(
'content_id'
)
has_target_course
,
has_target_content
=
bool
(
target_course_id
),
bool
(
target_content_id
)
if
has_target_course
!=
has_target_content
:
message
=
"Both course_id and content_id should be present for filtering"
return
Response
({
"detail"
:
message
},
status
.
HTTP_400_BAD_REQUEST
)
return
super
(
ProjectsViewSet
,
self
)
.
list
(
request
,
*
args
,
**
kwargs
)
serializer_class
=
ProjectSerializer
model
=
Project
def
get_queryset
(
self
):
target_course_id
=
self
.
request
.
QUERY_PARAMS
.
get
(
'course_id'
)
target_content_id
=
self
.
request
.
QUERY_PARAMS
.
get
(
'content_id'
)
queryset
=
self
.
model
.
objects
.
all
()
if
target_content_id
:
queryset
=
queryset
.
filter
(
content_id
=
target_content_id
)
queryset
=
queryset
.
filter
(
content_id
=
target_content_id
,
course_id
=
target_course_id
)
return
queryset
...
...
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