Skip to content

Commit

Permalink
Not allow to pass an empty actions to viewset.as_view(). Refs issue #…
Browse files Browse the repository at this point in the history
  • Loading branch information
BrickXu committed Dec 2, 2014
1 parent 81870b6 commit 51e3ad8
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 0 deletions.
5 changes: 5 additions & 0 deletions rest_framework/viewsets.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,11 @@ def as_view(cls, actions=None, **initkwargs):
# eg. 'List' or 'Instance'.
cls.suffix = None

# actions must not be empty
if not actions:
raise TypeError("Your tried to pass an empty actions dict. Don't "
"do that.")

# sanitize keyword arguments
for key in initkwargs:
if key in cls.http_method_names:
Expand Down
34 changes: 34 additions & 0 deletions tests/test_viewsets.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
from django.test import TestCase
from rest_framework import status
from rest_framework.response import Response
from rest_framework.test import APIRequestFactory
from rest_framework.viewsets import GenericViewSet


factory = APIRequestFactory()


class BasicViewSet(GenericViewSet):
def list(self, request, *args, **kwargs):
return Response({'METHOD': 'LIST'})


class InitializeViewSetsTestCase(TestCase):
def test_initialize_view_set_with_actions(self):
request = factory.get('/', '', content_type='application/json')
my_view = BasicViewSet.as_view(actions={
'get': 'list',
})

response = my_view(request)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data, {'METHOD': 'LIST'})

def test_initialize_view_set_with_empty_actions(self):
try:
BasicViewSet.as_view()
except TypeError as e:
self.assertEqual(str(e), "Your tried to pass an empty actions dict"
". Don't do that.")
else:
self.fail("actions must not be empty.")

0 comments on commit 51e3ad8

Please sign in to comment.