This commit is contained in:
Markus Törnqvist 2013-05-20 02:20:17 -07:00
commit 7ca7e1759e
35 changed files with 117 additions and 54 deletions

View File

@ -48,7 +48,7 @@ urlpatterns = patterns('',
(r'^token/$', MockView.as_view(authentication_classes=[TokenAuthentication])), (r'^token/$', MockView.as_view(authentication_classes=[TokenAuthentication])),
(r'^auth-token/$', 'rest_framework.authtoken.views.obtain_auth_token'), (r'^auth-token/$', 'rest_framework.authtoken.views.obtain_auth_token'),
(r'^oauth/$', MockView.as_view(authentication_classes=[OAuthAuthentication])), (r'^oauth/$', MockView.as_view(authentication_classes=[OAuthAuthentication])),
(r'^oauth-with-scope/$', MockView.as_view(authentication_classes=[OAuthAuthentication], (r'^oauth-with-scope/$', MockView.as_view(authentication_classes=[OAuthAuthentication],
permission_classes=[permissions.TokenHasReadWriteScope])) permission_classes=[permissions.TokenHasReadWriteScope]))
) )
@ -56,14 +56,14 @@ if oauth2_provider is not None:
urlpatterns += patterns('', urlpatterns += patterns('',
url(r'^oauth2/', include('provider.oauth2.urls', namespace='oauth2')), url(r'^oauth2/', include('provider.oauth2.urls', namespace='oauth2')),
url(r'^oauth2-test/$', MockView.as_view(authentication_classes=[OAuth2Authentication])), url(r'^oauth2-test/$', MockView.as_view(authentication_classes=[OAuth2Authentication])),
url(r'^oauth2-with-scope-test/$', MockView.as_view(authentication_classes=[OAuth2Authentication], url(r'^oauth2-with-scope-test/$', MockView.as_view(authentication_classes=[OAuth2Authentication],
permission_classes=[permissions.TokenHasReadWriteScope])), permission_classes=[permissions.TokenHasReadWriteScope])),
) )
class BasicAuthTests(TestCase): class BasicAuthTests(TestCase):
"""Basic authentication""" """Basic authentication"""
urls = 'rest_framework.tests.authentication' urls = 'rest_framework.tests.test_authentication'
def setUp(self): def setUp(self):
self.csrf_client = Client(enforce_csrf_checks=True) self.csrf_client = Client(enforce_csrf_checks=True)
@ -102,7 +102,7 @@ class BasicAuthTests(TestCase):
class SessionAuthTests(TestCase): class SessionAuthTests(TestCase):
"""User session authentication""" """User session authentication"""
urls = 'rest_framework.tests.authentication' urls = 'rest_framework.tests.test_authentication'
def setUp(self): def setUp(self):
self.csrf_client = Client(enforce_csrf_checks=True) self.csrf_client = Client(enforce_csrf_checks=True)
@ -149,7 +149,7 @@ class SessionAuthTests(TestCase):
class TokenAuthTests(TestCase): class TokenAuthTests(TestCase):
"""Token authentication""" """Token authentication"""
urls = 'rest_framework.tests.authentication' urls = 'rest_framework.tests.test_authentication'
def setUp(self): def setUp(self):
self.csrf_client = Client(enforce_csrf_checks=True) self.csrf_client = Client(enforce_csrf_checks=True)
@ -243,7 +243,7 @@ class IncorrectCredentialsTests(TestCase):
class OAuthTests(TestCase): class OAuthTests(TestCase):
"""OAuth 1.0a authentication""" """OAuth 1.0a authentication"""
urls = 'rest_framework.tests.authentication' urls = 'rest_framework.tests.test_authentication'
def setUp(self): def setUp(self):
# these imports are here because oauth is optional and hiding them in try..except block or compat # these imports are here because oauth is optional and hiding them in try..except block or compat
@ -429,7 +429,7 @@ class OAuthTests(TestCase):
class OAuth2Tests(TestCase): class OAuth2Tests(TestCase):
"""OAuth 2.0 authentication""" """OAuth 2.0 authentication"""
urls = 'rest_framework.tests.authentication' urls = 'rest_framework.tests.test_authentication'
def setUp(self): def setUp(self):
self.csrf_client = Client(enforce_csrf_checks=True) self.csrf_client = Client(enforce_csrf_checks=True)

View File

@ -36,7 +36,7 @@ urlpatterns = patterns('',
class BreadcrumbTests(TestCase): class BreadcrumbTests(TestCase):
"""Tests the breadcrumb functionality used by the HTML renderer.""" """Tests the breadcrumb functionality used by the HTML renderer."""
urls = 'rest_framework.tests.breadcrumbs' urls = 'rest_framework.tests.test_breadcrumbs'
def test_root_breadcrumbs(self): def test_root_breadcrumbs(self):
url = '/' url = '/'

View File

@ -6,7 +6,7 @@ from rest_framework.renderers import JSONRenderer
from rest_framework.parsers import JSONParser from rest_framework.parsers import JSONParser
from rest_framework.authentication import BasicAuthentication from rest_framework.authentication import BasicAuthentication
from rest_framework.throttling import UserRateThrottle from rest_framework.throttling import UserRateThrottle
from rest_framework.permissions import IsAuthenticated from rest_framework.permissions import IsAuthenticated, AllowAny
from rest_framework.views import APIView from rest_framework.views import APIView
from rest_framework.decorators import ( from rest_framework.decorators import (
api_view, api_view,
@ -35,6 +35,7 @@ class DecoratorTestCase(TestCase):
""" """
@api_view @api_view
@permission_classes((AllowAny,))
def view(request): def view(request):
return Response() return Response()
@ -48,12 +49,14 @@ class DecoratorTestCase(TestCase):
with self.assertRaises(AssertionError): with self.assertRaises(AssertionError):
@api_view('GET') @api_view('GET')
@permission_classes((AllowAny,))
def view(request): def view(request):
return Response() return Response()
def test_calling_method(self): def test_calling_method(self):
@api_view(['GET']) @api_view(['GET'])
@permission_classes((AllowAny,))
def view(request): def view(request):
return Response({}) return Response({})
@ -68,6 +71,7 @@ class DecoratorTestCase(TestCase):
def test_calling_put_method(self): def test_calling_put_method(self):
@api_view(['GET', 'PUT']) @api_view(['GET', 'PUT'])
@permission_classes((AllowAny,))
def view(request): def view(request):
return Response({}) return Response({})
@ -82,6 +86,7 @@ class DecoratorTestCase(TestCase):
def test_calling_patch_method(self): def test_calling_patch_method(self):
@api_view(['GET', 'PATCH']) @api_view(['GET', 'PATCH'])
@permission_classes((AllowAny,))
def view(request): def view(request):
return Response({}) return Response({})
@ -96,6 +101,7 @@ class DecoratorTestCase(TestCase):
def test_renderer_classes(self): def test_renderer_classes(self):
@api_view(['GET']) @api_view(['GET'])
@permission_classes((AllowAny,))
@renderer_classes([JSONRenderer]) @renderer_classes([JSONRenderer])
def view(request): def view(request):
return Response({}) return Response({})
@ -107,6 +113,7 @@ class DecoratorTestCase(TestCase):
def test_parser_classes(self): def test_parser_classes(self):
@api_view(['GET']) @api_view(['GET'])
@permission_classes((AllowAny,))
@parser_classes([JSONParser]) @parser_classes([JSONParser])
def view(request): def view(request):
self.assertEqual(len(request.parsers), 1) self.assertEqual(len(request.parsers), 1)
@ -120,6 +127,7 @@ class DecoratorTestCase(TestCase):
def test_authentication_classes(self): def test_authentication_classes(self):
@api_view(['GET']) @api_view(['GET'])
@permission_classes((AllowAny,))
@authentication_classes([BasicAuthentication]) @authentication_classes([BasicAuthentication])
def view(request): def view(request):
self.assertEqual(len(request.authenticators), 1) self.assertEqual(len(request.authenticators), 1)
@ -146,6 +154,7 @@ class DecoratorTestCase(TestCase):
rate = '1/day' rate = '1/day'
@api_view(['GET']) @api_view(['GET'])
@permission_classes((AllowAny,))
@throttle_classes([OncePerDayUserThrottle]) @throttle_classes([OncePerDayUserThrottle])
def view(request): def view(request):
return Response({}) return Response({})

View File

@ -8,6 +8,8 @@ from django.test.client import RequestFactory
from django.utils import unittest from django.utils import unittest
from rest_framework import generics, serializers, status, filters from rest_framework import generics, serializers, status, filters
from rest_framework.compat import django_filters, patterns, url from rest_framework.compat import django_filters, patterns, url
from rest_framework.decorators import permission_classes
from rest_framework.permissions import AllowAny
from rest_framework.tests.models import BasicModel from rest_framework.tests.models import BasicModel
factory = RequestFactory() factory = RequestFactory()
@ -69,11 +71,13 @@ if django_filters:
serializer_class = FilterableItemSerializer serializer_class = FilterableItemSerializer
filter_fields = ['decimal', 'date'] filter_fields = ['decimal', 'date']
filter_backends = (filters.DjangoFilterBackend,) filter_backends = (filters.DjangoFilterBackend,)
permission_classes = (AllowAny,)
class GetQuerysetView(generics.ListCreateAPIView): class GetQuerysetView(generics.ListCreateAPIView):
serializer_class = FilterableItemSerializer serializer_class = FilterableItemSerializer
filter_class = SeveralFieldsFilter filter_class = SeveralFieldsFilter
filter_backends = (filters.DjangoFilterBackend,) filter_backends = (filters.DjangoFilterBackend,)
permission_classes = (AllowAny,)
def get_queryset(self): def get_queryset(self):
return FilterableItem.objects.all() return FilterableItem.objects.all()
@ -243,7 +247,7 @@ class IntegrationTestDetailFiltering(CommonFilteringTestCase):
""" """
Integration tests for filtered detail views. Integration tests for filtered detail views.
""" """
urls = 'rest_framework.tests.filters' urls = 'rest_framework.tests.test_filters'
def _get_url(self, item): def _get_url(self, item):
return reverse('detail-view', kwargs=dict(pk=item.pk)) return reverse('detail-view', kwargs=dict(pk=item.pk))
@ -312,6 +316,7 @@ class SearchFilterTests(TestCase):
class SearchListView(generics.ListAPIView): class SearchListView(generics.ListAPIView):
model = SearchFilterModel model = SearchFilterModel
filter_backends = (filters.SearchFilter,) filter_backends = (filters.SearchFilter,)
permission_classes = (AllowAny,)
search_fields = ('title', 'text') search_fields = ('title', 'text')
view = SearchListView.as_view() view = SearchListView.as_view()

View File

@ -6,6 +6,7 @@ from rest_framework import generics, renderers, serializers, status
from rest_framework.tests.utils import RequestFactory from rest_framework.tests.utils import RequestFactory
from rest_framework.tests.models import BasicModel, Comment, SlugBasedModel from rest_framework.tests.models import BasicModel, Comment, SlugBasedModel
from rest_framework.compat import six from rest_framework.compat import six
from rest_framework.permissions import AllowAny
import json import json
factory = RequestFactory() factory = RequestFactory()
@ -16,6 +17,7 @@ class RootView(generics.ListCreateAPIView):
Example description for OPTIONS. Example description for OPTIONS.
""" """
model = BasicModel model = BasicModel
permission_classes = (AllowAny,)
class InstanceView(generics.RetrieveUpdateDestroyAPIView): class InstanceView(generics.RetrieveUpdateDestroyAPIView):
@ -23,6 +25,7 @@ class InstanceView(generics.RetrieveUpdateDestroyAPIView):
Example description for OPTIONS. Example description for OPTIONS.
""" """
model = BasicModel model = BasicModel
permission_classes = (AllowAny,)
class SlugSerializer(serializers.ModelSerializer): class SlugSerializer(serializers.ModelSerializer):
@ -355,6 +358,7 @@ class CommentSerializer(serializers.ModelSerializer):
class CommentView(generics.ListCreateAPIView): class CommentView(generics.ListCreateAPIView):
serializer_class = CommentSerializer serializer_class = CommentSerializer
permission_classes = (AllowAny,)
model = Comment model = Comment
@ -486,6 +490,7 @@ class TwoFieldModel(models.Model):
class DynamicSerializerView(generics.ListCreateAPIView): class DynamicSerializerView(generics.ListCreateAPIView):
model = TwoFieldModel model = TwoFieldModel
renderer_classes = (renderers.BrowsableAPIRenderer, renderers.JSONRenderer) renderer_classes = (renderers.BrowsableAPIRenderer, renderers.JSONRenderer)
permission_classes = (AllowAny,)
def get_serializer_class(self): def get_serializer_class(self):
if self.request.method == 'POST': if self.request.method == 'POST':

View File

@ -6,14 +6,16 @@ from django.template import TemplateDoesNotExist, Template
import django.template.loader import django.template.loader
from rest_framework import status from rest_framework import status
from rest_framework.compat import patterns, url from rest_framework.compat import patterns, url
from rest_framework.decorators import api_view, renderer_classes from rest_framework.decorators import api_view, renderer_classes, permission_classes
from rest_framework.renderers import TemplateHTMLRenderer from rest_framework.renderers import TemplateHTMLRenderer
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.compat import six from rest_framework.compat import six
from rest_framework.permissions import AllowAny
@api_view(('GET',)) @api_view(('GET',))
@renderer_classes((TemplateHTMLRenderer,)) @renderer_classes((TemplateHTMLRenderer,))
@permission_classes((AllowAny,))
def example(request): def example(request):
""" """
A view that can returns an HTML representation. A view that can returns an HTML representation.
@ -24,12 +26,14 @@ def example(request):
@api_view(('GET',)) @api_view(('GET',))
@renderer_classes((TemplateHTMLRenderer,)) @renderer_classes((TemplateHTMLRenderer,))
@permission_classes((AllowAny,))
def permission_denied(request): def permission_denied(request):
raise PermissionDenied() raise PermissionDenied()
@api_view(('GET',)) @api_view(('GET',))
@renderer_classes((TemplateHTMLRenderer,)) @renderer_classes((TemplateHTMLRenderer,))
@permission_classes((AllowAny,))
def not_found(request): def not_found(request):
raise Http404() raise Http404()
@ -42,7 +46,7 @@ urlpatterns = patterns('',
class TemplateHTMLRendererTests(TestCase): class TemplateHTMLRendererTests(TestCase):
urls = 'rest_framework.tests.htmlrenderer' urls = 'rest_framework.tests.test_htmlrenderer'
def setUp(self): def setUp(self):
""" """
@ -82,7 +86,7 @@ class TemplateHTMLRendererTests(TestCase):
class TemplateHTMLRendererExceptionTests(TestCase): class TemplateHTMLRendererExceptionTests(TestCase):
urls = 'rest_framework.tests.htmlrenderer' urls = 'rest_framework.tests.test_htmlrenderer'
def setUp(self): def setUp(self):
""" """

View File

@ -5,6 +5,7 @@ from django.test.client import RequestFactory
from rest_framework import generics, status, serializers from rest_framework import generics, status, serializers
from rest_framework.compat import patterns, url from rest_framework.compat import patterns, url
from rest_framework.tests.models import Anchor, BasicModel, ManyToManyModel, BlogPost, BlogPostComment, Album, Photo, OptionalRelationModel from rest_framework.tests.models import Anchor, BasicModel, ManyToManyModel, BlogPost, BlogPostComment, Album, Photo, OptionalRelationModel
from rest_framework.permissions import AllowAny
factory = RequestFactory() factory = RequestFactory()
@ -38,56 +39,67 @@ class AlbumSerializer(serializers.ModelSerializer):
class BasicList(generics.ListCreateAPIView): class BasicList(generics.ListCreateAPIView):
model = BasicModel model = BasicModel
model_serializer_class = serializers.HyperlinkedModelSerializer model_serializer_class = serializers.HyperlinkedModelSerializer
permission_classes = (AllowAny,)
class BasicDetail(generics.RetrieveUpdateDestroyAPIView): class BasicDetail(generics.RetrieveUpdateDestroyAPIView):
model = BasicModel model = BasicModel
model_serializer_class = serializers.HyperlinkedModelSerializer model_serializer_class = serializers.HyperlinkedModelSerializer
permission_classes = (AllowAny,)
class AnchorDetail(generics.RetrieveAPIView): class AnchorDetail(generics.RetrieveAPIView):
model = Anchor model = Anchor
model_serializer_class = serializers.HyperlinkedModelSerializer model_serializer_class = serializers.HyperlinkedModelSerializer
permission_classes = (AllowAny,)
class ManyToManyList(generics.ListAPIView): class ManyToManyList(generics.ListAPIView):
model = ManyToManyModel model = ManyToManyModel
model_serializer_class = serializers.HyperlinkedModelSerializer model_serializer_class = serializers.HyperlinkedModelSerializer
permission_classes = (AllowAny,)
class ManyToManyDetail(generics.RetrieveAPIView): class ManyToManyDetail(generics.RetrieveAPIView):
model = ManyToManyModel model = ManyToManyModel
model_serializer_class = serializers.HyperlinkedModelSerializer model_serializer_class = serializers.HyperlinkedModelSerializer
permission_classes = (AllowAny,)
class BlogPostCommentListCreate(generics.ListCreateAPIView): class BlogPostCommentListCreate(generics.ListCreateAPIView):
model = BlogPostComment model = BlogPostComment
serializer_class = BlogPostCommentSerializer serializer_class = BlogPostCommentSerializer
permission_classes = (AllowAny,)
class BlogPostCommentDetail(generics.RetrieveAPIView): class BlogPostCommentDetail(generics.RetrieveAPIView):
model = BlogPostComment model = BlogPostComment
serializer_class = BlogPostCommentSerializer serializer_class = BlogPostCommentSerializer
permission_classes = (AllowAny,)
class BlogPostDetail(generics.RetrieveAPIView): class BlogPostDetail(generics.RetrieveAPIView):
model = BlogPost model = BlogPost
permission_classes = (AllowAny,)
class PhotoListCreate(generics.ListCreateAPIView): class PhotoListCreate(generics.ListCreateAPIView):
model = Photo model = Photo
model_serializer_class = PhotoSerializer model_serializer_class = PhotoSerializer
permission_classes = (AllowAny,)
class AlbumDetail(generics.RetrieveAPIView): class AlbumDetail(generics.RetrieveAPIView):
model = Album model = Album
serializer_class = AlbumSerializer serializer_class = AlbumSerializer
lookup_field = 'title' lookup_field = 'title'
permission_classes = (AllowAny,)
class OptionalRelationDetail(generics.RetrieveUpdateDestroyAPIView): class OptionalRelationDetail(generics.RetrieveUpdateDestroyAPIView):
model = OptionalRelationModel model = OptionalRelationModel
model_serializer_class = serializers.HyperlinkedModelSerializer model_serializer_class = serializers.HyperlinkedModelSerializer
permission_classes = (AllowAny,)
urlpatterns = patterns('', urlpatterns = patterns('',
@ -106,7 +118,7 @@ urlpatterns = patterns('',
class TestBasicHyperlinkedView(TestCase): class TestBasicHyperlinkedView(TestCase):
urls = 'rest_framework.tests.hyperlinkedserializers' urls = 'rest_framework.tests.test_hyperlinkedserializers'
def setUp(self): def setUp(self):
""" """
@ -143,7 +155,7 @@ class TestBasicHyperlinkedView(TestCase):
class TestManyToManyHyperlinkedView(TestCase): class TestManyToManyHyperlinkedView(TestCase):
urls = 'rest_framework.tests.hyperlinkedserializers' urls = 'rest_framework.tests.test_hyperlinkedserializers'
def setUp(self): def setUp(self):
""" """
@ -191,7 +203,7 @@ class TestManyToManyHyperlinkedView(TestCase):
class TestHyperlinkedIdentityFieldLookup(TestCase): class TestHyperlinkedIdentityFieldLookup(TestCase):
urls = 'rest_framework.tests.hyperlinkedserializers' urls = 'rest_framework.tests.test_hyperlinkedserializers'
def setUp(self): def setUp(self):
""" """
@ -221,7 +233,7 @@ class TestHyperlinkedIdentityFieldLookup(TestCase):
class TestCreateWithForeignKeys(TestCase): class TestCreateWithForeignKeys(TestCase):
urls = 'rest_framework.tests.hyperlinkedserializers' urls = 'rest_framework.tests.test_hyperlinkedserializers'
def setUp(self): def setUp(self):
""" """
@ -246,7 +258,7 @@ class TestCreateWithForeignKeys(TestCase):
class TestCreateWithForeignKeysAndCustomSlug(TestCase): class TestCreateWithForeignKeysAndCustomSlug(TestCase):
urls = 'rest_framework.tests.hyperlinkedserializers' urls = 'rest_framework.tests.test_hyperlinkedserializers'
def setUp(self): def setUp(self):
""" """
@ -271,7 +283,7 @@ class TestCreateWithForeignKeysAndCustomSlug(TestCase):
class TestOptionalRelationHyperlinkedView(TestCase): class TestOptionalRelationHyperlinkedView(TestCase):
urls = 'rest_framework.tests.hyperlinkedserializers' urls = 'rest_framework.tests.test_hyperlinkedserializers'
def setUp(self): def setUp(self):
""" """

View File

@ -39,14 +39,19 @@ class ModelPermissionsIntegrationTests(TestCase):
def setUp(self): def setUp(self):
User.objects.create_user('disallowed', 'disallowed@example.com', 'password') User.objects.create_user('disallowed', 'disallowed@example.com', 'password')
user = User.objects.create_user('permitted', 'permitted@example.com', 'password') user = User.objects.create_user('permitted', 'permitted@example.com', 'password')
# Keep get() lines clean and short
perm_kwargs = {
'content_type__app_label': 'tests',
'content_type__name': 'basic model',
}
user.user_permissions = [ user.user_permissions = [
Permission.objects.get(codename='add_basicmodel'), Permission.objects.get(codename='add_basicmodel', **perm_kwargs),
Permission.objects.get(codename='change_basicmodel'), Permission.objects.get(codename='change_basicmodel', **perm_kwargs),
Permission.objects.get(codename='delete_basicmodel') Permission.objects.get(codename='delete_basicmodel', **perm_kwargs)
] ]
user = User.objects.create_user('updateonly', 'updateonly@example.com', 'password') user = User.objects.create_user('updateonly', 'updateonly@example.com', 'password')
user.user_permissions = [ user.user_permissions = [
Permission.objects.get(codename='change_basicmodel'), Permission.objects.get(codename='change_basicmodel', **perm_kwargs),
] ]
self.permitted_credentials = basic_auth_header('permitted', 'password') self.permitted_credentials = basic_auth_header('permitted', 'password')

View File

@ -71,7 +71,7 @@ class NullableOneToOneTargetSerializer(serializers.HyperlinkedModelSerializer):
# TODO: Add test that .data cannot be accessed prior to .is_valid # TODO: Add test that .data cannot be accessed prior to .is_valid
class HyperlinkedManyToManyTests(TestCase): class HyperlinkedManyToManyTests(TestCase):
urls = 'rest_framework.tests.relations_hyperlink' urls = 'rest_framework.tests.test_relations_hyperlink'
def setUp(self): def setUp(self):
for idx in range(1, 4): for idx in range(1, 4):
@ -179,7 +179,7 @@ class HyperlinkedManyToManyTests(TestCase):
class HyperlinkedForeignKeyTests(TestCase): class HyperlinkedForeignKeyTests(TestCase):
urls = 'rest_framework.tests.relations_hyperlink' urls = 'rest_framework.tests.test_relations_hyperlink'
def setUp(self): def setUp(self):
target = ForeignKeyTarget(name='target-1') target = ForeignKeyTarget(name='target-1')
@ -307,7 +307,7 @@ class HyperlinkedForeignKeyTests(TestCase):
class HyperlinkedNullableForeignKeyTests(TestCase): class HyperlinkedNullableForeignKeyTests(TestCase):
urls = 'rest_framework.tests.relations_hyperlink' urls = 'rest_framework.tests.test_relations_hyperlink'
def setUp(self): def setUp(self):
target = ForeignKeyTarget(name='target-1') target = ForeignKeyTarget(name='target-1')
@ -435,7 +435,7 @@ class HyperlinkedNullableForeignKeyTests(TestCase):
class HyperlinkedNullableOneToOneTests(TestCase): class HyperlinkedNullableOneToOneTests(TestCase):
urls = 'rest_framework.tests.relations_hyperlink' urls = 'rest_framework.tests.test_relations_hyperlink'
def setUp(self): def setUp(self):
target = OneToOneTarget(name='target-1') target = OneToOneTarget(name='target-1')
@ -458,7 +458,7 @@ class HyperlinkedNullableOneToOneTests(TestCase):
# Regression tests for #694 (`source` attribute on related fields) # Regression tests for #694 (`source` attribute on related fields)
class HyperlinkedRelatedFieldSourceTests(TestCase): class HyperlinkedRelatedFieldSourceTests(TestCase):
urls = 'rest_framework.tests.relations_hyperlink' urls = 'rest_framework.tests.test_relations_hyperlink'
def test_related_manager_source(self): def test_related_manager_source(self):
""" """

View File

@ -6,6 +6,7 @@ from django.test.client import RequestFactory
from django.utils import unittest from django.utils import unittest
from rest_framework import status, permissions from rest_framework import status, permissions
from rest_framework.compat import yaml, etree, patterns, url, include from rest_framework.compat import yaml, etree, patterns, url, include
from rest_framework.decorators import permission_classes
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.views import APIView from rest_framework.views import APIView
from rest_framework.renderers import BaseRenderer, JSONRenderer, YAMLRenderer, \ from rest_framework.renderers import BaseRenderer, JSONRenderer, YAMLRenderer, \
@ -14,6 +15,7 @@ from rest_framework.parsers import YAMLParser, XMLParser
from rest_framework.settings import api_settings from rest_framework.settings import api_settings
from rest_framework.compat import StringIO from rest_framework.compat import StringIO
from rest_framework.compat import six from rest_framework.compat import six
from rest_framework.permissions import AllowAny
import datetime import datetime
import pickle import pickle
import re import re
@ -56,6 +58,7 @@ class RendererB(BaseRenderer):
class MockView(APIView): class MockView(APIView):
renderer_classes = (RendererA, RendererB) renderer_classes = (RendererA, RendererB)
permission_classes = (AllowAny,)
def get(self, request, **kwargs): def get(self, request, **kwargs):
response = Response(DUMMYCONTENT, status=DUMMYSTATUS) response = Response(DUMMYCONTENT, status=DUMMYSTATUS)
@ -64,12 +67,14 @@ class MockView(APIView):
class MockGETView(APIView): class MockGETView(APIView):
permission_classes = (AllowAny,)
def get(self, request, **kwargs): def get(self, request, **kwargs):
return Response({'foo': ['bar', 'baz']}) return Response({'foo': ['bar', 'baz']})
class HTMLView(APIView): class HTMLView(APIView):
renderer_classes = (BrowsableAPIRenderer, ) renderer_classes = (BrowsableAPIRenderer, )
permission_classes = (AllowAny,)
def get(self, request, **kwargs): def get(self, request, **kwargs):
return Response('text') return Response('text')
@ -77,6 +82,7 @@ class HTMLView(APIView):
class HTMLView1(APIView): class HTMLView1(APIView):
renderer_classes = (BrowsableAPIRenderer, JSONRenderer) renderer_classes = (BrowsableAPIRenderer, JSONRenderer)
permission_classes = (AllowAny,)
def get(self, request, **kwargs): def get(self, request, **kwargs):
return Response('text') return Response('text')
@ -130,7 +136,7 @@ class RendererEndToEndTests(TestCase):
End-to-end testing of renderers using an RendererMixin on a generic view. End-to-end testing of renderers using an RendererMixin on a generic view.
""" """
urls = 'rest_framework.tests.renderers' urls = 'rest_framework.tests.test_renderers'
def test_default_renderer_serializes_content(self): def test_default_renderer_serializes_content(self):
"""If the Accept header is not set the default renderer should serialize the response.""" """If the Accept header is not set the default renderer should serialize the response."""
@ -278,7 +284,7 @@ class JSONPRendererTests(TestCase):
Tests specific to the JSONP Renderer Tests specific to the JSONP Renderer
""" """
urls = 'rest_framework.tests.renderers' urls = 'rest_framework.tests.test_renderers'
def test_without_callback_with_json_renderer(self): def test_without_callback_with_json_renderer(self):
""" """
@ -451,7 +457,7 @@ class CacheRenderTest(TestCase):
Tests specific to caching responses Tests specific to caching responses
""" """
urls = 'rest_framework.tests.renderers' urls = 'rest_framework.tests.test_renderers'
cache_key = 'just_a_cache_key' cache_key = 'just_a_cache_key'

View File

@ -16,6 +16,8 @@ from rest_framework.parsers import (
MultiPartParser, MultiPartParser,
JSONParser JSONParser
) )
from rest_framework.decorators import permission_classes
from rest_framework.permissions import AllowAny
from rest_framework.request import Request from rest_framework.request import Request
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.settings import api_settings from rest_framework.settings import api_settings
@ -241,6 +243,7 @@ class TestContentParsing(TestCase):
class MockView(APIView): class MockView(APIView):
authentication_classes = (SessionAuthentication,) authentication_classes = (SessionAuthentication,)
permission_classes = (AllowAny,)
def post(self, request): def post(self, request):
if request.POST.get('example') is not None: if request.POST.get('example') is not None:
@ -254,7 +257,7 @@ urlpatterns = patterns('',
class TestContentParsingWithAuthentication(TestCase): class TestContentParsingWithAuthentication(TestCase):
urls = 'rest_framework.tests.request' urls = 'rest_framework.tests.test_request'
def setUp(self): def setUp(self):
self.csrf_client = Client(enforce_csrf_checks=True) self.csrf_client = Client(enforce_csrf_checks=True)

View File

@ -1,6 +1,8 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from django.test import TestCase from django.test import TestCase
from rest_framework.compat import patterns, url, include from rest_framework.compat import patterns, url, include
from rest_framework.decorators import permission_classes
from rest_framework.permissions import AllowAny
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.views import APIView from rest_framework.views import APIView
from rest_framework import status from rest_framework import status
@ -55,6 +57,7 @@ class RendererC(RendererB):
class MockView(APIView): class MockView(APIView):
renderer_classes = (RendererA, RendererB, RendererC) renderer_classes = (RendererA, RendererB, RendererC)
permission_classes = (AllowAny,)
def get(self, request, **kwargs): def get(self, request, **kwargs):
return Response(DUMMYCONTENT, status=DUMMYSTATUS) return Response(DUMMYCONTENT, status=DUMMYSTATUS)
@ -62,6 +65,7 @@ class MockView(APIView):
class MockViewSettingCharset(APIView): class MockViewSettingCharset(APIView):
renderer_classes = (RendererA, RendererB, RendererC) renderer_classes = (RendererA, RendererB, RendererC)
permission_classes = (AllowAny,)
def get(self, request, **kwargs): def get(self, request, **kwargs):
return Response(DUMMYCONTENT, status=DUMMYSTATUS, charset='setbyview') return Response(DUMMYCONTENT, status=DUMMYSTATUS, charset='setbyview')
@ -69,6 +73,7 @@ class MockViewSettingCharset(APIView):
class HTMLView(APIView): class HTMLView(APIView):
renderer_classes = (BrowsableAPIRenderer, ) renderer_classes = (BrowsableAPIRenderer, )
permission_classes = (AllowAny,)
def get(self, request, **kwargs): def get(self, request, **kwargs):
return Response('text') return Response('text')
@ -76,6 +81,7 @@ class HTMLView(APIView):
class HTMLView1(APIView): class HTMLView1(APIView):
renderer_classes = (BrowsableAPIRenderer, JSONRenderer) renderer_classes = (BrowsableAPIRenderer, JSONRenderer)
permission_classes = (AllowAny,)
def get(self, request, **kwargs): def get(self, request, **kwargs):
return Response('text') return Response('text')
@ -96,7 +102,7 @@ class RendererIntegrationTests(TestCase):
End-to-end testing of renderers using an ResponseMixin on a generic view. End-to-end testing of renderers using an ResponseMixin on a generic view.
""" """
urls = 'rest_framework.tests.response' urls = 'rest_framework.tests.test_response'
def test_default_renderer_serializes_content(self): def test_default_renderer_serializes_content(self):
"""If the Accept header is not set the default renderer should serialize the response.""" """If the Accept header is not set the default renderer should serialize the response."""
@ -176,7 +182,7 @@ class Issue122Tests(TestCase):
""" """
Tests that covers #122. Tests that covers #122.
""" """
urls = 'rest_framework.tests.response' urls = 'rest_framework.tests.test_response'
def test_only_html_renderer(self): def test_only_html_renderer(self):
""" """
@ -196,7 +202,7 @@ class Issue807Testts(TestCase):
Covers #807 Covers #807
""" """
urls = 'rest_framework.tests.response' urls = 'rest_framework.tests.test_response'
def test_does_not_append_charset_by_default(self): def test_does_not_append_charset_by_default(self):
""" """

View File

@ -19,7 +19,7 @@ class ReverseTests(TestCase):
""" """
Tests for fully qualified URLs when using `reverse`. Tests for fully qualified URLs when using `reverse`.
""" """
urls = 'rest_framework.tests.reverse' urls = 'rest_framework.tests.test_reverse'
def test_reversed_urls_are_fully_qualified(self): def test_reversed_urls_are_fully_qualified(self):
request = factory.get('/view') request = factory.get('/view')

View File

@ -1398,7 +1398,7 @@ class AttributeMappingOnAutogeneratedFieldsTests(TestCase):
], ],
} }
def field_test(self, field): def check_field(self, field):
serializer = self.serializer_class(data={}) serializer = self.serializer_class(data={})
self.assertEqual(serializer.is_valid(), True) self.assertEqual(serializer.is_valid(), True)
@ -1409,28 +1409,28 @@ class AttributeMappingOnAutogeneratedFieldsTests(TestCase):
) )
def test_char_field(self): def test_char_field(self):
self.field_test('char_field') self.check_field('char_field')
def test_comma_separated_integer_field(self): def test_comma_separated_integer_field(self):
self.field_test('comma_separated_integer_field') self.check_field('comma_separated_integer_field')
def test_decimal_field(self): def test_decimal_field(self):
self.field_test('decimal_field') self.check_field('decimal_field')
def test_email_field(self): def test_email_field(self):
self.field_test('email_field') self.check_field('email_field')
def test_file_field(self): def test_file_field(self):
self.field_test('file_field') self.check_field('file_field')
def test_image_field(self): def test_image_field(self):
self.field_test('image_field') self.check_field('image_field')
def test_slug_field(self): def test_slug_field(self):
self.field_test('slug_field') self.check_field('slug_field')
def test_url_field(self): def test_url_field(self):
self.field_test('url_field') self.check_field('url_field')
class DefaultValuesOnAutogeneratedFieldsTests(TestCase): class DefaultValuesOnAutogeneratedFieldsTests(TestCase):
@ -1474,7 +1474,7 @@ class DefaultValuesOnAutogeneratedFieldsTests(TestCase):
], ],
} }
def field_test(self, field): def check_field(self, field):
serializer = self.serializer_class(data={}) serializer = self.serializer_class(data={})
self.assertEqual(serializer.is_valid(), True) self.assertEqual(serializer.is_valid(), True)
@ -1485,22 +1485,23 @@ class DefaultValuesOnAutogeneratedFieldsTests(TestCase):
) )
def test_positive_integer_field(self): def test_positive_integer_field(self):
self.field_test('positive_integer_field') self.check_field('positive_integer_field')
def test_positive_small_integer_field(self): def test_positive_small_integer_field(self):
self.field_test('positive_small_integer_field') self.check_field('positive_small_integer_field')
def test_email_field(self): def test_email_field(self):
self.field_test('email_field') self.check_field('email_field')
def test_file_field(self): def test_file_field(self):
self.field_test('file_field') self.check_field('file_field')
def test_image_field(self): def test_image_field(self):
self.field_test('image_field') self.check_field('image_field')
def test_slug_field(self): def test_slug_field(self):
self.field_test('slug_field') self.check_field('slug_field')
def test_url_field(self): def test_url_field(self):
self.field_test('url_field') self.check_field('url_field')

View File

@ -6,6 +6,8 @@ from django.test import TestCase
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.core.cache import cache from django.core.cache import cache
from django.test.client import RequestFactory from django.test.client import RequestFactory
from rest_framework.decorators import api_view
from rest_framework.permissions import AllowAny
from rest_framework.views import APIView from rest_framework.views import APIView
from rest_framework.throttling import UserRateThrottle from rest_framework.throttling import UserRateThrottle
from rest_framework.response import Response from rest_framework.response import Response
@ -23,6 +25,7 @@ class User3MinRateThrottle(UserRateThrottle):
class MockView(APIView): class MockView(APIView):
throttle_classes = (User3SecRateThrottle,) throttle_classes = (User3SecRateThrottle,)
permission_classes = (AllowAny,)
def get(self, request): def get(self, request):
return Response('foo') return Response('foo')
@ -30,6 +33,7 @@ class MockView(APIView):
class MockView_MinuteThrottling(APIView): class MockView_MinuteThrottling(APIView):
throttle_classes = (User3MinRateThrottle,) throttle_classes = (User3MinRateThrottle,)
permission_classes = (AllowAny,)
def get(self, request): def get(self, request):
return Response('foo') return Response('foo')

View File

@ -2,7 +2,8 @@ from __future__ import unicode_literals
from django.test import TestCase from django.test import TestCase
from django.test.client import RequestFactory from django.test.client import RequestFactory
from rest_framework import status from rest_framework import status
from rest_framework.decorators import api_view from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import AllowAny
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.settings import api_settings from rest_framework.settings import api_settings
from rest_framework.views import APIView from rest_framework.views import APIView
@ -12,6 +13,7 @@ factory = RequestFactory()
class BasicView(APIView): class BasicView(APIView):
permission_classes = (AllowAny,)
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
return Response({'method': 'GET'}) return Response({'method': 'GET'})
@ -20,6 +22,7 @@ class BasicView(APIView):
@api_view(['GET', 'POST', 'PUT', 'PATCH']) @api_view(['GET', 'POST', 'PUT', 'PATCH'])
@permission_classes((AllowAny,))
def basic_view(request): def basic_view(request):
if request.method == 'GET': if request.method == 'GET':
return {'method': 'GET'} return {'method': 'GET'}