diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/test_versioning.py | 60 | 
1 files changed, 58 insertions, 2 deletions
| diff --git a/tests/test_versioning.py b/tests/test_versioning.py index eaac5dfb..c44f727d 100644 --- a/tests/test_versioning.py +++ b/tests/test_versioning.py @@ -1,5 +1,5 @@  from django.conf.urls import include, url -from rest_framework import versioning +from rest_framework import status, versioning  from rest_framework.decorators import APIView  from rest_framework.response import Response  from rest_framework.reverse import reverse @@ -16,6 +16,16 @@ class ReverseView(APIView):          return Response({'url': reverse('another', request=request)}) +class RequestInvalidVersionView(APIView): +    def determine_version(self, request, *args, **kwargs): +        scheme = self.versioning_class() +        scheme.allowed_versions = ('v1', 'v2') +        return (scheme.determine_version(request, *args, **kwargs), scheme) + +    def get(self, request, *args, **kwargs): +        return Response({'version': request.version}) + +  factory = APIRequestFactory()  mock_view = lambda request: None @@ -150,7 +160,7 @@ class TestURLReversing(APITestCase):          response = view(request)          assert response.data == {'url': 'http://testserver/another/'} -    def test_namespace_versioning(self): +    def test_reverse_namespace_versioning(self):          class FakeResolverMatch:              namespace = 'v1' @@ -165,3 +175,49 @@ class TestURLReversing(APITestCase):          request = factory.get('/endpoint/')          response = view(request)          assert response.data == {'url': 'http://testserver/another/'} + + +class TestInvalidVersion: +    def test_invalid_query_param_versioning(self): +        scheme = versioning.QueryParameterVersioning +        view = RequestInvalidVersionView.as_view(versioning_class=scheme) + +        request = factory.get('/endpoint/?version=v3') +        response = view(request) +        assert response.status_code == status.HTTP_404_NOT_FOUND + +    def test_invalid_host_name_versioning(self): +        scheme = versioning.HostNameVersioning +        view = RequestInvalidVersionView.as_view(versioning_class=scheme) + +        request = factory.get('/endpoint/', HTTP_HOST='v3.example.org') +        response = view(request) +        assert response.status_code == status.HTTP_404_NOT_FOUND + +    def test_invalid_accept_header_versioning(self): +        scheme = versioning.AcceptHeaderVersioning +        view = RequestInvalidVersionView.as_view(versioning_class=scheme) + +        request = factory.get('/endpoint/', HTTP_ACCEPT='application/json; version=v3') +        response = view(request) +        assert response.status_code == status.HTTP_406_NOT_ACCEPTABLE + +    def test_invalid_url_path_versioning(self): +        scheme = versioning.URLPathVersioning +        view = RequestInvalidVersionView.as_view(versioning_class=scheme) + +        request = factory.get('/v3/endpoint/') +        response = view(request, version='v3') +        assert response.status_code == status.HTTP_404_NOT_FOUND + +    def test_invalid_namespace_versioning(self): +        class FakeResolverMatch: +            namespace = 'v3' + +        scheme = versioning.NamespaceVersioning +        view = RequestInvalidVersionView.as_view(versioning_class=scheme) + +        request = factory.get('/v3/endpoint/') +        request.resolver_match = FakeResolverMatch +        response = view(request, version='v3') +        assert response.status_code == status.HTTP_404_NOT_FOUND | 
