diff options
| author | Tom Christie | 2014-12-17 12:41:46 +0000 | 
|---|---|---|
| committer | Tom Christie | 2014-12-17 12:41:46 +0000 | 
| commit | 05a6eaec8aebdca2248b9e1069a15769fd85a480 (patch) | |
| tree | 58488ee2e6533032d942dc65f038bbbc43462a87 /tests | |
| parent | 70bd3a32f7cf57543e8ec08fddf001a718e40c7f (diff) | |
| download | django-rest-framework-05a6eaec8aebdca2248b9e1069a15769fd85a480.tar.bz2 | |
More docs, plus 'ALLOWED_VERSIONS' setting.
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 | 
