Commit d5a47469 by Renzo Lucioni Committed by GitHub

Merge pull request #248 from edx/renzo/program-type-filter

Allow programs to be filtered by type
parents 32b7fd14 b4835c40
......@@ -8,7 +8,7 @@ from dry_rest_permissions.generics import DRYPermissionFiltersBase
from guardian.shortcuts import get_objects_for_user
from rest_framework.exceptions import PermissionDenied, NotFound
from course_discovery.apps.course_metadata.models import Course, CourseRun
from course_discovery.apps.course_metadata.models import Course, CourseRun, Program
User = get_user_model()
......@@ -89,3 +89,11 @@ class CourseRunFilter(django_filters.FilterSet):
class Meta:
model = CourseRun
fields = ['keys']
class ProgramFilter(django_filters.FilterSet):
type = django_filters.CharFilter(name='type__name', lookup_expr='iexact')
class Meta:
model = Program
fields = ['type']
......@@ -4,7 +4,7 @@ from rest_framework.test import APITestCase
from course_discovery.apps.api.serializers import ProgramSerializer
from course_discovery.apps.core.tests.factories import USER_PASSWORD, UserFactory
from course_discovery.apps.course_metadata.models import Program
from course_discovery.apps.course_metadata.tests.factories import ProgramFactory
from course_discovery.apps.course_metadata.tests.factories import ProgramFactory, ProgramTypeFactory
class ProgramViewSetTests(APITestCase):
......@@ -41,3 +41,16 @@ class ProgramViewSetTests(APITestCase):
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data['results'], ProgramSerializer(Program.objects.all(), many=True).data)
def test_filter_by_type(self):
""" Verify that the endpoint filters programs to those of a given type. """
url = reverse('api:v1:program-list') + '?type='
self.program.type = ProgramTypeFactory(name='Foo')
self.program.save() # pylint: disable=no-member
response = self.client.get(url + 'foo')
self.assertEqual(response.data['results'][0], ProgramSerializer(Program.objects.get()).data)
response = self.client.get(url + 'bar')
self.assertEqual(response.data['results'], [])
......@@ -333,6 +333,8 @@ class ProgramViewSet(viewsets.ReadOnlyModelViewSet):
queryset = Program.objects.all()
permission_classes = (IsAuthenticated,)
serializer_class = serializers.ProgramSerializer
filter_backends = (DjangoFilterBackend,)
filter_class = filters.ProgramFilter
class ManagementViewSet(viewsets.ViewSet):
......
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