aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorTom Christie2014-12-17 12:41:46 +0000
committerTom Christie2014-12-17 12:41:46 +0000
commit05a6eaec8aebdca2248b9e1069a15769fd85a480 (patch)
tree58488ee2e6533032d942dc65f038bbbc43462a87 /tests
parent70bd3a32f7cf57543e8ec08fddf001a718e40c7f (diff)
downloaddjango-rest-framework-05a6eaec8aebdca2248b9e1069a15769fd85a480.tar.bz2
More docs, plus 'ALLOWED_VERSIONS' setting.
Diffstat (limited to 'tests')
-rw-r--r--tests/test_versioning.py60
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