aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/browsable_api/auth_urls.py9
-rw-r--r--tests/browsable_api/test_browsable_api.py10
-rw-r--r--tests/browsable_api/views.py27
3 files changed, 45 insertions, 1 deletions
diff --git a/tests/browsable_api/auth_urls.py b/tests/browsable_api/auth_urls.py
index bce7dcf9..098a99ac 100644
--- a/tests/browsable_api/auth_urls.py
+++ b/tests/browsable_api/auth_urls.py
@@ -1,10 +1,17 @@
from __future__ import unicode_literals
from django.conf.urls import patterns, url, include
+from rest_framework import routers
-from .views import MockView
+from .views import MockView, FooViewSet, BarViewSet
+
+router = routers.SimpleRouter()
+router.register(r'foo', FooViewSet)
+router.register(r'bar', BarViewSet)
urlpatterns = patterns(
'',
(r'^$', MockView.as_view()),
+ url(r'^', include(router.urls)),
+ url(r'^bar/(?P<pk>\d+)/$', BarViewSet, name='bar-list'),
url(r'^auth/', include('rest_framework.urls', namespace='rest_framework')),
)
diff --git a/tests/browsable_api/test_browsable_api.py b/tests/browsable_api/test_browsable_api.py
index 5f264783..31907f84 100644
--- a/tests/browsable_api/test_browsable_api.py
+++ b/tests/browsable_api/test_browsable_api.py
@@ -3,6 +3,7 @@ from django.contrib.auth.models import User
from django.test import TestCase
from rest_framework.test import APIClient
+from .models import Foo, Bar
class DropdownWithAuthTests(TestCase):
@@ -16,6 +17,8 @@ class DropdownWithAuthTests(TestCase):
self.email = 'lennon@thebeatles.com'
self.password = 'password'
self.user = User.objects.create_user(self.username, self.email, self.password)
+ foo = Foo.objects.create(name='Foo')
+ Bar.objects.create(foo=foo)
def tearDown(self):
self.client.logout()
@@ -25,6 +28,13 @@ class DropdownWithAuthTests(TestCase):
response = self.client.get('/')
self.assertContains(response, 'john')
+ def test_bug_2455_clone_request(self):
+ self.client.login(username=self.username, password=self.password)
+ json_response = self.client.get('/foo/1/?format=json')
+ self.assertEqual(json_response.status_code, 200)
+ browsable_api_response = self.client.get('/foo/1/')
+ self.assertEqual(browsable_api_response.status_code, 200)
+
def test_logout_shown_when_logged_in(self):
self.client.login(username=self.username, password=self.password)
response = self.client.get('/')
diff --git a/tests/browsable_api/views.py b/tests/browsable_api/views.py
index 000f4e80..f06f7c40 100644
--- a/tests/browsable_api/views.py
+++ b/tests/browsable_api/views.py
@@ -1,9 +1,14 @@
from __future__ import unicode_literals
from rest_framework.views import APIView
+from rest_framework.viewsets import ModelViewSet
from rest_framework import authentication
from rest_framework import renderers
from rest_framework.response import Response
+from rest_framework.renderers import BrowsableAPIRenderer, JSONRenderer
+from rest_framework.versioning import NamespaceVersioning
+from .models import Foo, Bar
+from .serializers import FooSerializer, BarSerializer
class MockView(APIView):
@@ -13,3 +18,25 @@ class MockView(APIView):
def get(self, request):
return Response({'a': 1, 'b': 2, 'c': 3})
+
+
+class SerializerClassMixin(object):
+ def get_serializer_class(self):
+ # Get base name of serializer
+ self.request.version
+ return self.serializer_class
+
+
+class FooViewSet(SerializerClassMixin, ModelViewSet):
+ versioning_class = NamespaceVersioning
+ model = Foo
+ queryset = Foo.objects.all()
+ serializer_class = FooSerializer
+ renderer_classes = (BrowsableAPIRenderer, JSONRenderer)
+
+
+class BarViewSet(SerializerClassMixin, ModelViewSet):
+ model = Bar
+ queryset = Bar.objects.all()
+ serializer_class = BarSerializer
+ renderer_classes = (BrowsableAPIRenderer, )