Commit 4b671e9b by Matthew Piatetsky

Only include programs for which the course runs are not excluded

parent f8a73cdb
......@@ -75,6 +75,7 @@ PREFETCH_FIELDS = {
'course__programs',
'course__programs__partner',
'course__programs__type',
'course__programs__excluded_course_runs',
'language',
'seats',
'seats__currency',
......@@ -350,7 +351,13 @@ class CourseRunSerializer(TimestampModelSerializer):
class CourseRunWithProgramsSerializer(CourseRunSerializer):
"""A ``CourseRunSerializer`` which includes programs derived from parent course."""
programs = NestedProgramSerializer(many=True)
programs = serializers.SerializerMethodField()
def get_programs(self, obj):
programs = [program for program in obj.programs.all()
if obj.id not in (run.id for run in program.excluded_course_runs.all())]
return NestedProgramSerializer(programs, many=True).data
class Meta(CourseRunSerializer.Meta):
model = CourseRun
......
......@@ -190,6 +190,23 @@ class CourseRunWithProgramsSerializerTests(TestCase):
self.assertDictEqual(serializer.data, expected)
def test_data_excluded_course_run(self):
"""
If a course run is excluded on a program, that program should not be
returned for that course run on the course run endpoint.
"""
request = make_request()
course_run = CourseRunFactory()
serializer_context = {'request': request}
serializer = CourseRunWithProgramsSerializer(course_run, context=serializer_context)
ProgramFactory(courses=[course_run.course], excluded_course_runs=[course_run])
expected = CourseRunSerializer(course_run, context=serializer_context).data
expected.update({
'programs': [],
})
self.assertDictEqual(serializer.data, expected)
class FlattenedCourseRunWithCourseSerializerTests(TestCase): # pragma: no cover
def serialize_seats(self, course_run):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment