Repository URL to install this package:
|
Version:
0.32.0 ▾
|
import uuid
from django.contrib.auth import get_user_model
from django.test import TestCase
from rest_framework import status
from rest_framework import permissions
from rest_framework.response import Response
from rest_framework.test import APIRequestFactory
from dockerhub.viewsets import ViewSet, GenericViewSet, ModelViewSet
factory = APIRequestFactory()
default_response = {'a': 1, 'b': 2, 'c': 3}
User = get_user_model()
class MockViewMixin(object):
permission_classes = (permissions.IsAuthenticated,)
def list(self, request):
return Response(default_response)
def create(self, request):
return Response(default_response)
class MockViewSet(MockViewMixin, ViewSet):
pass
class MockGenericViewSet(MockViewMixin, GenericViewSet):
pass
class MockModelViewSet(MockViewMixin, ModelViewSet):
pass
class BaseSetTestCase(object):
viewset_class = None
def setUp(self):
self.username = 'johndoe'
self.email = 'johndoe@docker.com'
self.user = User.objects.create_active_user(self.username, self.email)
def test_get_without_authentication(self):
request = factory.get('/', '', content_type='application/json')
my_view = self.viewset_class.as_view({'get': 'list'})
response = my_view(request)
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
def test_get_with_authentication(self):
request = factory.get('/', '', content_type='application/json')
# logged-in user by setting request.user manually.
request.user = self.user
my_view = self.viewset_class.as_view({'get': 'list'})
response = my_view(request)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data, default_response)
def test_post_without_authentication(self):
request = factory.post('/', {'foo': 'bar'}, content_type='application/json')
my_view = self.viewset_class.as_view({'post': 'create'})
response = my_view(request)
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
def test_post_authentication(self):
request = factory.post('/', {'foo': 'bar'}, content_type='application/json')
# logged-in user by setting request.user manually.
request.user = self.user
my_view = self.viewset_class.as_view({'post': 'create'})
response = my_view(request)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data, default_response)
class MockViewSetTestCase(BaseSetTestCase, TestCase):
viewset_class = MockViewSet
class MockGenericViewSet(BaseSetTestCase, TestCase):
viewset_class = MockViewSet
class MockGenericViewSet(BaseSetTestCase, TestCase):
viewset_class = MockModelViewSet