Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
course-discovery
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
course-discovery
Commits
6a352f33
Commit
6a352f33
authored
Sep 15, 2016
by
Simon Chen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ECOM-5635 allow filter of unpublished course_runs
parent
fff1422f
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
49 additions
and
1 deletions
+49
-1
course_discovery/apps/api/serializers.py
+5
-1
course_discovery/apps/api/tests/test_serializers.py
+33
-0
course_discovery/apps/api/v1/views.py
+11
-0
No files found.
course_discovery/apps/api/serializers.py
View file @
6a352f33
...
...
@@ -13,6 +13,7 @@ from taggit_serializer.serializers import TagListSerializerField, TaggitSerializ
from
course_discovery.apps.api.fields
import
StdImageSerializerField
,
ImageField
from
course_discovery.apps.catalogs.models
import
Catalog
from
course_discovery.apps.course_metadata.choices
import
CourseRunStatus
from
course_discovery.apps.course_metadata.models
import
(
Course
,
CourseRun
,
Image
,
Organization
,
Person
,
Prerequisite
,
Seat
,
Subject
,
Video
,
Program
,
ProgramType
,
FAQ
,
CorporateEndorsement
,
Endorsement
,
Position
...
...
@@ -353,6 +354,8 @@ class ProgramCourseSerializer(CourseSerializer):
def
get_course_runs
(
self
,
course
):
program
=
self
.
context
[
'program'
]
course_runs
=
program
.
course_runs
.
filter
(
course
=
course
)
if
self
.
context
.
get
(
'published_course_runs_only'
):
course_runs
=
course_runs
.
filter
(
status
=
CourseRunStatus
.
Published
)
return
CourseRunSerializer
(
course_runs
,
many
=
True
,
...
...
@@ -391,7 +394,8 @@ class ProgramSerializer(serializers.ModelSerializer):
many
=
True
,
context
=
{
'request'
:
self
.
context
.
get
(
'request'
),
'program'
:
program
'program'
:
program
,
'published_course_runs_only'
:
self
.
context
.
get
(
'published_course_runs_only'
),
}
)
...
...
course_discovery/apps/api/tests/test_serializers.py
View file @
6a352f33
...
...
@@ -176,6 +176,7 @@ class CourseRunSerializerTests(TestCase):
self
.
assertDictEqual
(
serializer
.
data
,
expected
)
@ddt.ddt
class
ProgramCourseSerializerTests
(
TestCase
):
def
setUp
(
self
):
super
(
ProgramCourseSerializerTests
,
self
)
.
setUp
()
...
...
@@ -228,6 +229,38 @@ class ProgramCourseSerializerTests(TestCase):
context
=
{
'request'
:
self
.
request
})
.
data
self
.
assertDictEqual
(
serializer
.
data
,
expected
)
@ddt.data
(
[
CourseRunStatus
.
Unpublished
,
1
],
[
CourseRunStatus
.
Unpublished
,
0
],
[
CourseRunStatus
.
Published
,
1
],
[
CourseRunStatus
.
Published
,
0
]
)
@ddt.unpack
def
test_with_published_only_querystring
(
self
,
course_run_status
,
published_course_runs_only
):
"""
Test the serializer's ability to filter out course_runs based on
"published_course_runs_only" query string
"""
expected
=
CourseSerializer
(
self
.
course_list
,
many
=
True
,
context
=
{
'request'
:
self
.
request
})
.
data
for
course
in
self
.
course_list
:
CourseRunFactory
.
create_batch
(
2
,
status
=
course_run_status
,
course
=
course
)
serializer
=
ProgramCourseSerializer
(
self
.
course_list
,
many
=
True
,
context
=
{
'request'
:
self
.
request
,
'program'
:
self
.
program
,
'published_course_runs_only'
:
published_course_runs_only
}
)
validate_data
=
serializer
.
data
if
not
published_course_runs_only
or
course_run_status
!=
CourseRunStatus
.
Unpublished
:
expected
=
CourseSerializer
(
self
.
course_list
,
many
=
True
,
context
=
{
'request'
:
self
.
request
})
.
data
self
.
assertSequenceEqual
(
validate_data
,
expected
)
class
ProgramSerializerTests
(
TestCase
):
def
test_data
(
self
):
...
...
course_discovery/apps/api/v1/views.py
View file @
6a352f33
...
...
@@ -397,6 +397,11 @@ class ProgramViewSet(viewsets.ReadOnlyModelViewSet):
filter_backends
=
(
DjangoFilterBackend
,)
filter_class
=
filters
.
ProgramFilter
def
get_serializer_context
(
self
,
*
args
,
**
kwargs
):
context
=
super
()
.
get_serializer_context
(
*
args
,
**
kwargs
)
context
[
'published_course_runs_only'
]
=
int
(
self
.
request
.
GET
.
get
(
'published_course_runs_only'
,
0
))
return
context
def
list
(
self
,
request
,
*
args
,
**
kwargs
):
""" List all programs.
---
...
...
@@ -414,6 +419,12 @@ class ProgramViewSet(viewsets.ReadOnlyModelViewSet):
type: integer
paramType: query
multiple: false
- name: published_course_runs_only
description: Filter course runs by published ones only
required: false
type: integer
paramType: query
mulitple: false
"""
return
super
(
ProgramViewSet
,
self
)
.
list
(
request
,
*
args
,
**
kwargs
)
...
...
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