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/test_versioning.py | |
| parent | 70bd3a32f7cf57543e8ec08fddf001a718e40c7f (diff) | |
| download | django-rest-framework-05a6eaec8aebdca2248b9e1069a15769fd85a480.tar.bz2 | |
More docs, plus 'ALLOWED_VERSIONS' setting.
Diffstat (limited to 'tests/test_versioning.py')
| -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 |
