From fa0ef1773773c58b5708abad0e90a44fc9a308f8 Mon Sep 17 00:00:00 2001
From: Carlton Gibson
Date: Tue, 2 Sep 2014 14:53:37 +0200
Subject: Remove Login Dropdown when Auth Views are not registered.
Fixes #1738
---
tests/browsable_api/__init__.py | 0
tests/browsable_api/auth_urls.py | 10 +++++
tests/browsable_api/no_auth_urls.py | 9 +++++
tests/browsable_api/test_browsable_api.py | 65 +++++++++++++++++++++++++++++++
tests/browsable_api/views.py | 15 +++++++
5 files changed, 99 insertions(+)
create mode 100644 tests/browsable_api/__init__.py
create mode 100644 tests/browsable_api/auth_urls.py
create mode 100644 tests/browsable_api/no_auth_urls.py
create mode 100644 tests/browsable_api/test_browsable_api.py
create mode 100644 tests/browsable_api/views.py
(limited to 'tests/browsable_api')
diff --git a/tests/browsable_api/__init__.py b/tests/browsable_api/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/browsable_api/auth_urls.py b/tests/browsable_api/auth_urls.py
new file mode 100644
index 00000000..3cb2d8da
--- /dev/null
+++ b/tests/browsable_api/auth_urls.py
@@ -0,0 +1,10 @@
+from __future__ import unicode_literals
+from django.conf.urls import patterns, url, include
+
+from views import MockView
+
+urlpatterns = patterns(
+ '',
+ (r'^$', MockView.as_view()),
+ url(r'^auth/', include('rest_framework.urls', namespace='rest_framework')),
+)
diff --git a/tests/browsable_api/no_auth_urls.py b/tests/browsable_api/no_auth_urls.py
new file mode 100644
index 00000000..d9b9bc43
--- /dev/null
+++ b/tests/browsable_api/no_auth_urls.py
@@ -0,0 +1,9 @@
+from __future__ import unicode_literals
+from django.conf.urls import patterns
+
+from views import MockView
+
+urlpatterns = patterns(
+ '',
+ (r'^$', MockView.as_view()),
+)
diff --git a/tests/browsable_api/test_browsable_api.py b/tests/browsable_api/test_browsable_api.py
new file mode 100644
index 00000000..61c76b4f
--- /dev/null
+++ b/tests/browsable_api/test_browsable_api.py
@@ -0,0 +1,65 @@
+from __future__ import unicode_literals
+from django.contrib.auth.models import User
+from django.test import TestCase
+
+from rest_framework.test import APIClient
+
+
+class DropdownWithAuthTests(TestCase):
+ """Tests correct dropdown behaviour with Auth views enabled."""
+
+ urls = 'tests.browsable_api.auth_urls'
+
+ def setUp(self):
+ self.client = APIClient(enforce_csrf_checks=True)
+ self.username = 'john'
+ self.email = 'lennon@thebeatles.com'
+ self.password = 'password'
+ self.user = User.objects.create_user(self.username, self.email, self.password)
+
+ def tearDown(self):
+ self.client.logout()
+
+ def test_name_shown_when_logged_in(self):
+ self.client.login(username=self.username, password=self.password)
+ response = self.client.get('/')
+ self.assertContains(response, 'john')
+
+ def test_logout_shown_when_logged_in(self):
+ self.client.login(username=self.username, password=self.password)
+ response = self.client.get('/')
+ self.assertContains(response, '>Log out<')
+
+ def test_login_shown_when_logged_out(self):
+ response = self.client.get('/')
+ self.assertContains(response, '>Log in<')
+
+
+class NoDropdownWithoutAuthTests(TestCase):
+ """Tests correct dropdown behaviour with Auth views enabled."""
+
+ urls = 'tests.browsable_api.no_auth_urls'
+
+ def setUp(self):
+ self.client = APIClient(enforce_csrf_checks=True)
+ self.username = 'john'
+ self.email = 'lennon@thebeatles.com'
+ self.password = 'password'
+ self.user = User.objects.create_user(self.username, self.email, self.password)
+
+ def tearDown(self):
+ self.client.logout()
+
+ def test_name_shown_when_logged_in(self):
+ self.client.login(username=self.username, password=self.password)
+ response = self.client.get('/')
+ self.assertContains(response, 'john')
+
+ def test_dropdown_not_shown_when_logged_in(self):
+ self.client.login(username=self.username, password=self.password)
+ response = self.client.get('/')
+ self.assertNotContains(response, '
')
+
+ def test_dropdown_not_shown_when_logged_out(self):
+ response = self.client.get('/')
+ self.assertNotContains(response, '')
diff --git a/tests/browsable_api/views.py b/tests/browsable_api/views.py
new file mode 100644
index 00000000..000f4e80
--- /dev/null
+++ b/tests/browsable_api/views.py
@@ -0,0 +1,15 @@
+from __future__ import unicode_literals
+
+from rest_framework.views import APIView
+from rest_framework import authentication
+from rest_framework import renderers
+from rest_framework.response import Response
+
+
+class MockView(APIView):
+
+ authentication_classes = (authentication.SessionAuthentication,)
+ renderer_classes = (renderers.BrowsableAPIRenderer,)
+
+ def get(self, request):
+ return Response({'a': 1, 'b': 2, 'c': 3})
--
cgit v1.2.3
From 4836afa89f045263ded91946d43403e807880181 Mon Sep 17 00:00:00 2001
From: Carlton Gibson
Date: Tue, 2 Sep 2014 15:11:23 +0200
Subject: Fix docstring
---
tests/browsable_api/test_browsable_api.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'tests/browsable_api')
diff --git a/tests/browsable_api/test_browsable_api.py b/tests/browsable_api/test_browsable_api.py
index 61c76b4f..5f264783 100644
--- a/tests/browsable_api/test_browsable_api.py
+++ b/tests/browsable_api/test_browsable_api.py
@@ -36,7 +36,7 @@ class DropdownWithAuthTests(TestCase):
class NoDropdownWithoutAuthTests(TestCase):
- """Tests correct dropdown behaviour with Auth views enabled."""
+ """Tests correct dropdown behaviour with Auth views NOT enabled."""
urls = 'tests.browsable_api.no_auth_urls'
--
cgit v1.2.3
From 1e491c82e6ddf2941d1f8639920c6b5dfd9378f8 Mon Sep 17 00:00:00 2001
From: Carlton Gibson
Date: Tue, 2 Sep 2014 15:29:21 +0200
Subject: Fix imports
---
tests/browsable_api/auth_urls.py | 2 +-
tests/browsable_api/no_auth_urls.py | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
(limited to 'tests/browsable_api')
diff --git a/tests/browsable_api/auth_urls.py b/tests/browsable_api/auth_urls.py
index 3cb2d8da..bce7dcf9 100644
--- a/tests/browsable_api/auth_urls.py
+++ b/tests/browsable_api/auth_urls.py
@@ -1,7 +1,7 @@
from __future__ import unicode_literals
from django.conf.urls import patterns, url, include
-from views import MockView
+from .views import MockView
urlpatterns = patterns(
'',
diff --git a/tests/browsable_api/no_auth_urls.py b/tests/browsable_api/no_auth_urls.py
index d9b9bc43..5e3604a6 100644
--- a/tests/browsable_api/no_auth_urls.py
+++ b/tests/browsable_api/no_auth_urls.py
@@ -1,7 +1,7 @@
from __future__ import unicode_literals
from django.conf.urls import patterns
-from views import MockView
+from .views import MockView
urlpatterns = patterns(
'',
--
cgit v1.2.3
From b09ef28959fe63351f0dd24564b7d2d344b44fa3 Mon Sep 17 00:00:00 2001
From: Brandon Cazander
Date: Sat, 24 Jan 2015 01:37:23 -0800
Subject: Add failing test for request.version AttributeError in BrowsableAPI.
---
tests/browsable_api/auth_urls.py | 9 ++++++++-
tests/browsable_api/test_browsable_api.py | 10 ++++++++++
tests/browsable_api/views.py | 27 +++++++++++++++++++++++++++
3 files changed, 45 insertions(+), 1 deletion(-)
(limited to 'tests/browsable_api')
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\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, )
--
cgit v1.2.3
From 0ee2edc0a14c4d14b8aa6e4b63ccbd0c2cc78024 Mon Sep 17 00:00:00 2001
From: Brandon Cazander
Date: Sat, 24 Jan 2015 01:44:09 -0800
Subject: Add missed files for test.
---
tests/browsable_api/models.py | 9 +++++++++
tests/browsable_api/serializers.py | 14 ++++++++++++++
2 files changed, 23 insertions(+)
create mode 100644 tests/browsable_api/models.py
create mode 100644 tests/browsable_api/serializers.py
(limited to 'tests/browsable_api')
diff --git a/tests/browsable_api/models.py b/tests/browsable_api/models.py
new file mode 100644
index 00000000..05c6c23b
--- /dev/null
+++ b/tests/browsable_api/models.py
@@ -0,0 +1,9 @@
+from django.db import models
+
+
+class Foo(models.Model):
+ name = models.CharField(max_length=30)
+
+
+class Bar(models.Model):
+ foo = models.ForeignKey("Foo", editable=False)
diff --git a/tests/browsable_api/serializers.py b/tests/browsable_api/serializers.py
new file mode 100644
index 00000000..e8364540
--- /dev/null
+++ b/tests/browsable_api/serializers.py
@@ -0,0 +1,14 @@
+from .models import Foo, Bar
+from rest_framework.serializers import HyperlinkedModelSerializer, HyperlinkedIdentityField
+
+
+class FooSerializer(HyperlinkedModelSerializer):
+ bar = HyperlinkedIdentityField(view_name='bar-list')
+
+ class Meta:
+ model = Foo
+
+
+class BarSerializer(HyperlinkedModelSerializer):
+ class Meta:
+ model = Bar
--
cgit v1.2.3
From 6c083b12a1162bf8e0f51e6c52ff13a1bd621cf2 Mon Sep 17 00:00:00 2001
From: Brandon Cazander
Date: Sat, 24 Jan 2015 11:00:36 -0800
Subject: Streamline test for #2455
---
tests/browsable_api/auth_urls.py | 8 +-------
tests/browsable_api/models.py | 9 ---------
tests/browsable_api/serializers.py | 14 --------------
tests/browsable_api/test_browsable_api.py | 10 ----------
tests/browsable_api/views.py | 27 ---------------------------
5 files changed, 1 insertion(+), 67 deletions(-)
delete mode 100644 tests/browsable_api/models.py
delete mode 100644 tests/browsable_api/serializers.py
(limited to 'tests/browsable_api')
diff --git a/tests/browsable_api/auth_urls.py b/tests/browsable_api/auth_urls.py
index 098a99ac..97bc1036 100644
--- a/tests/browsable_api/auth_urls.py
+++ b/tests/browsable_api/auth_urls.py
@@ -1,17 +1,11 @@
from __future__ import unicode_literals
from django.conf.urls import patterns, url, include
-from rest_framework import routers
-from .views import MockView, FooViewSet, BarViewSet
+from .views import MockView
-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\d+)/$', BarViewSet, name='bar-list'),
url(r'^auth/', include('rest_framework.urls', namespace='rest_framework')),
)
diff --git a/tests/browsable_api/models.py b/tests/browsable_api/models.py
deleted file mode 100644
index 05c6c23b..00000000
--- a/tests/browsable_api/models.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from django.db import models
-
-
-class Foo(models.Model):
- name = models.CharField(max_length=30)
-
-
-class Bar(models.Model):
- foo = models.ForeignKey("Foo", editable=False)
diff --git a/tests/browsable_api/serializers.py b/tests/browsable_api/serializers.py
deleted file mode 100644
index e8364540..00000000
--- a/tests/browsable_api/serializers.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from .models import Foo, Bar
-from rest_framework.serializers import HyperlinkedModelSerializer, HyperlinkedIdentityField
-
-
-class FooSerializer(HyperlinkedModelSerializer):
- bar = HyperlinkedIdentityField(view_name='bar-list')
-
- class Meta:
- model = Foo
-
-
-class BarSerializer(HyperlinkedModelSerializer):
- class Meta:
- model = Bar
diff --git a/tests/browsable_api/test_browsable_api.py b/tests/browsable_api/test_browsable_api.py
index 31907f84..5f264783 100644
--- a/tests/browsable_api/test_browsable_api.py
+++ b/tests/browsable_api/test_browsable_api.py
@@ -3,7 +3,6 @@ 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):
@@ -17,8 +16,6 @@ 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()
@@ -28,13 +25,6 @@ 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 f06f7c40..000f4e80 100644
--- a/tests/browsable_api/views.py
+++ b/tests/browsable_api/views.py
@@ -1,14 +1,9 @@
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):
@@ -18,25 +13,3 @@ 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, )
--
cgit v1.2.3