Commit f9bfd32f by Clinton Blackburn

Added permissions to the Affiliate Window viewset

The same permissions for the catalog endpoint are now enforced for the Affiliate Window endpoint.

ECOM-4481
parent 65be02c2
...@@ -20,6 +20,7 @@ from course_discovery.apps.course_metadata.tests.factories import CourseRunFacto ...@@ -20,6 +20,7 @@ from course_discovery.apps.course_metadata.tests.factories import CourseRunFacto
@ddt.ddt @ddt.ddt
class AffiliateWindowViewSetTests(ElasticsearchTestMixin, SerializationMixin, APITestCase): class AffiliateWindowViewSetTests(ElasticsearchTestMixin, SerializationMixin, APITestCase):
""" Tests for the AffiliateWindowViewSet. """ """ Tests for the AffiliateWindowViewSet. """
def setUp(self): def setUp(self):
super(AffiliateWindowViewSetTests, self).setUp() super(AffiliateWindowViewSetTests, self).setUp()
self.user = UserFactory() self.user = UserFactory()
...@@ -110,3 +111,23 @@ class AffiliateWindowViewSetTests(ElasticsearchTestMixin, SerializationMixin, AP ...@@ -110,3 +111,23 @@ class AffiliateWindowViewSetTests(ElasticsearchTestMixin, SerializationMixin, AP
root = etree.XML(response.content) root = etree.XML(response.content)
self.assertTrue(dtd.validate(root)) self.assertTrue(dtd.validate(root))
def test_permissions(self):
""" Verify only users with the appropriate permissions can access the endpoint. """
catalog = CatalogFactory()
superuser = UserFactory(is_superuser=True)
url = reverse('api:v1:partners:affiliate_window-detail', kwargs={'pk': catalog.id})
# Superusers can view all catalogs
self.client.force_authenticate(superuser)
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
# Regular users can only view catalogs belonging to them
self.client.force_authenticate(self.user)
response = self.client.get(url)
self.assertEqual(response.status_code, 403)
catalog.viewers = [self.user]
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
...@@ -9,6 +9,7 @@ from dry_rest_permissions.generics import DRYPermissions ...@@ -9,6 +9,7 @@ from dry_rest_permissions.generics import DRYPermissions
from edx_rest_framework_extensions.permissions import IsSuperuser from edx_rest_framework_extensions.permissions import IsSuperuser
from rest_framework import status, viewsets from rest_framework import status, viewsets
from rest_framework.decorators import detail_route, list_route from rest_framework.decorators import detail_route, list_route
from rest_framework.exceptions import PermissionDenied
from rest_framework.permissions import IsAuthenticated from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response from rest_framework.response import Response
...@@ -279,9 +280,13 @@ class AffiliateWindowViewSet(viewsets.ViewSet): ...@@ -279,9 +280,13 @@ class AffiliateWindowViewSet(viewsets.ViewSet):
""" """
catalog = get_object_or_404(Catalog, pk=pk) catalog = get_object_or_404(Catalog, pk=pk)
queryset = catalog.courses().active()
if not catalog.has_object_read_permission(request):
raise PermissionDenied
courses = catalog.courses().active()
seats = Seat.objects.filter( seats = Seat.objects.filter(
course_run__course__in=queryset, type__in=[Seat.VERIFIED, Seat.PROFESSIONAL] course_run__course__in=courses, type__in=[Seat.VERIFIED, Seat.PROFESSIONAL]
) )
serializer = AffiliateWindowSerializer(seats, many=True) serializer = AffiliateWindowSerializer(seats, many=True)
......
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