Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
hub-client / tests / test_viewsets.py
Size: Mime:
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