diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/browsable_api/auth_urls.py | 9 | ||||
| -rw-r--r-- | tests/browsable_api/test_browsable_api.py | 10 | ||||
| -rw-r--r-- | tests/browsable_api/views.py | 27 | 
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, ) | 
