aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorTom Christie2014-08-19 13:28:07 +0100
committerTom Christie2014-08-19 13:28:07 +0100
commitbf09c32de8f9d528f83e9cb7a2773d1f4c9ab563 (patch)
tree334c85c136fe1dc010f8d7860b9431b3a9d87e56 /tests
parente385a7b8eb6e538698f28128e43fe8bfaefd4e97 (diff)
downloaddjango-rest-framework-bf09c32de8f9d528f83e9cb7a2773d1f4c9ab563.tar.bz2
Code linting and added runtests.py
Diffstat (limited to 'tests')
-rw-r--r--tests/conftest.py88
-rw-r--r--tests/serializers.py1
-rw-r--r--tests/settings.py11
-rw-r--r--tests/test_authentication.py73
-rw-r--r--tests/test_breadcrumbs.py61
-rw-r--r--tests/test_fields.py14
-rw-r--r--tests/test_files.py11
-rw-r--r--tests/test_filters.py9
-rw-r--r--tests/test_genericrelations.py24
-rw-r--r--tests/test_htmlrenderer.py3
-rw-r--r--tests/test_hyperlinkedserializers.py3
-rw-r--r--tests/test_pagination.py12
-rw-r--r--tests/test_permissions.py58
-rw-r--r--tests/test_relations.py11
-rw-r--r--tests/test_relations_hyperlink.py15
-rw-r--r--tests/test_relations_pk.py12
-rw-r--r--tests/test_renderers.py59
-rw-r--r--tests/test_request.py3
-rw-r--r--tests/test_response.py3
-rw-r--r--tests/test_reverse.py3
-rw-r--r--tests/test_routers.py9
-rw-r--r--tests/test_serializer.py30
-rw-r--r--tests/test_serializer_bulk_update.py6
-rw-r--r--tests/test_serializer_nested.py2
-rw-r--r--tests/test_serializers.py4
-rw-r--r--tests/test_status.py2
-rw-r--r--tests/test_templatetags.py2
-rw-r--r--tests/test_testing.py6
-rw-r--r--tests/test_throttling.py48
-rw-r--r--tests/test_urlizer.py1
30 files changed, 389 insertions, 195 deletions
diff --git a/tests/conftest.py b/tests/conftest.py
new file mode 100644
index 00000000..fa5184dd
--- /dev/null
+++ b/tests/conftest.py
@@ -0,0 +1,88 @@
+def pytest_configure():
+ from django.conf import settings
+
+ settings.configure(
+ DEBUG_PROPAGATE_EXCEPTIONS=True,
+ DATABASES={'default': {'ENGINE': 'django.db.backends.sqlite3',
+ 'NAME': ':memory:'}},
+ SECRET_KEY='not very secret in tests',
+ USE_I18N=True,
+ USE_L10N=True,
+ STATIC_URL='/static/',
+ ROOT_URLCONF='tests.urls',
+ TEMPLATE_LOADERS=(
+ 'django.template.loaders.filesystem.Loader',
+ 'django.template.loaders.app_directories.Loader',
+ ),
+ MIDDLEWARE_CLASSES=(
+ 'django.middleware.common.CommonMiddleware',
+ 'django.contrib.sessions.middleware.SessionMiddleware',
+ 'django.middleware.csrf.CsrfViewMiddleware',
+ 'django.contrib.auth.middleware.AuthenticationMiddleware',
+ 'django.contrib.messages.middleware.MessageMiddleware',
+ ),
+ INSTALLED_APPS=(
+ 'django.contrib.auth',
+ 'django.contrib.contenttypes',
+ 'django.contrib.sessions',
+ 'django.contrib.sites',
+ 'django.contrib.messages',
+ 'django.contrib.staticfiles',
+
+ 'rest_framework',
+ 'rest_framework.authtoken',
+ 'tests',
+ 'tests.accounts',
+ 'tests.records',
+ 'tests.users',
+ ),
+ PASSWORD_HASHERS=(
+ 'django.contrib.auth.hashers.SHA1PasswordHasher',
+ 'django.contrib.auth.hashers.PBKDF2PasswordHasher',
+ 'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',
+ 'django.contrib.auth.hashers.BCryptPasswordHasher',
+ 'django.contrib.auth.hashers.MD5PasswordHasher',
+ 'django.contrib.auth.hashers.CryptPasswordHasher',
+ ),
+ )
+
+ try:
+ import oauth_provider
+ import oauth2
+ except ImportError:
+ pass
+ else:
+ settings.INSTALLED_APPS += (
+ 'oauth_provider',
+ )
+
+ try:
+ import provider
+ except ImportError:
+ pass
+ else:
+ settings.INSTALLED_APPS += (
+ 'provider',
+ 'provider.oauth2',
+ )
+
+ # guardian is optional
+ try:
+ import guardian
+ except ImportError:
+ pass
+ else:
+ settings.ANONYMOUS_USER_ID = -1
+ settings.AUTHENTICATION_BACKENDS = (
+ 'django.contrib.auth.backends.ModelBackend', # default
+ 'guardian.backends.ObjectPermissionBackend',
+ )
+ settings.INSTALLED_APPS += (
+ 'guardian',
+ )
+
+ try:
+ import django
+ django.setup()
+ except AttributeError:
+ pass
diff --git a/tests/serializers.py b/tests/serializers.py
index f2f85b6e..be7b3772 100644
--- a/tests/serializers.py
+++ b/tests/serializers.py
@@ -1,5 +1,4 @@
from rest_framework import serializers
-
from tests.models import NullableForeignKeySource
diff --git a/tests/settings.py b/tests/settings.py
index de41dc66..91c9ed09 100644
--- a/tests/settings.py
+++ b/tests/settings.py
@@ -68,7 +68,6 @@ SECRET_KEY = 'u@x-aj9(hoh#rb-^ymf#g2jx_hp0vj7u5#b@ag1n^seu9e!%cy'
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
-# 'django.template.loaders.eggs.Loader',
)
MIDDLEWARE_CLASSES = (
@@ -104,8 +103,8 @@ INSTALLED_APPS = (
# OAuth is optional and won't work if there is no oauth_provider & oauth2
try:
- import oauth_provider
- import oauth2
+ import oauth_provider # NOQA
+ import oauth2 # NOQA
except ImportError:
pass
else:
@@ -114,7 +113,7 @@ else:
)
try:
- import provider
+ import provider # NOQA
except ImportError:
pass
else:
@@ -125,13 +124,13 @@ else:
# guardian is optional
try:
- import guardian
+ import guardian # NOQA
except ImportError:
pass
else:
ANONYMOUS_USER_ID = -1
AUTHENTICATION_BACKENDS = (
- 'django.contrib.auth.backends.ModelBackend', # default
+ 'django.contrib.auth.backends.ModelBackend', # default
'guardian.backends.ObjectPermissionBackend',
)
INSTALLED_APPS += (
diff --git a/tests/test_authentication.py b/tests/test_authentication.py
index f5bfc5e6..9db4f62d 100644
--- a/tests/test_authentication.py
+++ b/tests/test_authentication.py
@@ -45,26 +45,39 @@ class MockView(APIView):
return HttpResponse({'a': 1, 'b': 2, 'c': 3})
-urlpatterns = patterns('',
+urlpatterns = patterns(
+ '',
(r'^session/$', MockView.as_view(authentication_classes=[SessionAuthentication])),
(r'^basic/$', MockView.as_view(authentication_classes=[BasicAuthentication])),
(r'^token/$', MockView.as_view(authentication_classes=[TokenAuthentication])),
(r'^auth-token/$', 'rest_framework.authtoken.views.obtain_auth_token'),
(r'^oauth/$', MockView.as_view(authentication_classes=[OAuthAuthentication])),
- (r'^oauth-with-scope/$', MockView.as_view(authentication_classes=[OAuthAuthentication],
- permission_classes=[permissions.TokenHasReadWriteScope]))
+ (
+ r'^oauth-with-scope/$',
+ MockView.as_view(
+ authentication_classes=[OAuthAuthentication],
+ permission_classes=[permissions.TokenHasReadWriteScope]
+ )
+ )
)
+
class OAuth2AuthenticationDebug(OAuth2Authentication):
allow_query_params_token = True
if oauth2_provider is not None:
- urlpatterns += patterns('',
+ urlpatterns += patterns(
+ '',
url(r'^oauth2/', include('provider.oauth2.urls', namespace='oauth2')),
url(r'^oauth2-test/$', MockView.as_view(authentication_classes=[OAuth2Authentication])),
url(r'^oauth2-test-debug/$', MockView.as_view(authentication_classes=[OAuth2AuthenticationDebug])),
- url(r'^oauth2-with-scope-test/$', MockView.as_view(authentication_classes=[OAuth2Authentication],
- permission_classes=[permissions.TokenHasReadWriteScope])),
+ url(
+ r'^oauth2-with-scope-test/$',
+ MockView.as_view(
+ authentication_classes=[OAuth2Authentication],
+ permission_classes=[permissions.TokenHasReadWriteScope]
+ )
+ )
)
@@ -278,12 +291,16 @@ class OAuthTests(TestCase):
self.TOKEN_KEY = "token_key"
self.TOKEN_SECRET = "token_secret"
- self.consumer = Consumer.objects.create(key=self.CONSUMER_KEY, secret=self.CONSUMER_SECRET,
- name='example', user=self.user, status=self.consts.ACCEPTED)
+ self.consumer = Consumer.objects.create(
+ key=self.CONSUMER_KEY, secret=self.CONSUMER_SECRET,
+ name='example', user=self.user, status=self.consts.ACCEPTED
+ )
self.scope = Scope.objects.create(name="resource name", url="api/")
- self.token = OAuthToken.objects.create(user=self.user, consumer=self.consumer, scope=self.scope,
- token_type=OAuthToken.ACCESS, key=self.TOKEN_KEY, secret=self.TOKEN_SECRET, is_approved=True
+ self.token = OAuthToken.objects.create(
+ user=self.user, consumer=self.consumer, scope=self.scope,
+ token_type=OAuthToken.ACCESS, key=self.TOKEN_KEY, secret=self.TOKEN_SECRET,
+ is_approved=True
)
def _create_authorization_header(self):
@@ -501,24 +518,24 @@ class OAuth2Tests(TestCase):
self.REFRESH_TOKEN = "refresh_token"
self.oauth2_client = oauth2_provider.oauth2.models.Client.objects.create(
- client_id=self.CLIENT_ID,
- client_secret=self.CLIENT_SECRET,
- redirect_uri='',
- client_type=0,
- name='example',
- user=None,
- )
+ client_id=self.CLIENT_ID,
+ client_secret=self.CLIENT_SECRET,
+ redirect_uri='',
+ client_type=0,
+ name='example',
+ user=None,
+ )
self.access_token = oauth2_provider.oauth2.models.AccessToken.objects.create(
- token=self.ACCESS_TOKEN,
- client=self.oauth2_client,
- user=self.user,
- )
+ token=self.ACCESS_TOKEN,
+ client=self.oauth2_client,
+ user=self.user,
+ )
self.refresh_token = oauth2_provider.oauth2.models.RefreshToken.objects.create(
- user=self.user,
- access_token=self.access_token,
- client=self.oauth2_client
- )
+ user=self.user,
+ access_token=self.access_token,
+ client=self.oauth2_client
+ )
def _create_authorization_header(self, token=None):
return "Bearer {0}".format(token or self.access_token.token)
@@ -569,8 +586,10 @@ class OAuth2Tests(TestCase):
@unittest.skipUnless(oauth2_provider, 'django-oauth2-provider not installed')
def test_post_form_passing_auth_url_transport(self):
"""Ensure GETing form over OAuth with correct client credentials in form data succeed"""
- response = self.csrf_client.post('/oauth2-test/',
- data={'access_token': self.access_token.token})
+ response = self.csrf_client.post(
+ '/oauth2-test/',
+ data={'access_token': self.access_token.token}
+ )
self.assertEqual(response.status_code, 200)
@unittest.skipUnless(oauth2_provider, 'django-oauth2-provider not installed')
diff --git a/tests/test_breadcrumbs.py b/tests/test_breadcrumbs.py
index f26c3eaf..780fd5c4 100644
--- a/tests/test_breadcrumbs.py
+++ b/tests/test_breadcrumbs.py
@@ -24,7 +24,8 @@ class NestedResourceRoot(APIView):
class NestedResourceInstance(APIView):
pass
-urlpatterns = patterns('',
+urlpatterns = patterns(
+ '',
url(r'^$', Root.as_view()),
url(r'^resource/$', ResourceRoot.as_view()),
url(r'^resource/(?P<key>[0-9]+)$', ResourceInstance.as_view()),
@@ -40,34 +41,60 @@ class BreadcrumbTests(TestCase):
def test_root_breadcrumbs(self):
url = '/'
- self.assertEqual(get_breadcrumbs(url), [('Root', '/')])
+ self.assertEqual(
+ get_breadcrumbs(url),
+ [('Root', '/')]
+ )
def test_resource_root_breadcrumbs(self):
url = '/resource/'
- self.assertEqual(get_breadcrumbs(url), [('Root', '/'),
- ('Resource Root', '/resource/')])
+ self.assertEqual(
+ get_breadcrumbs(url),
+ [
+ ('Root', '/'),
+ ('Resource Root', '/resource/')
+ ]
+ )
def test_resource_instance_breadcrumbs(self):
url = '/resource/123'
- self.assertEqual(get_breadcrumbs(url), [('Root', '/'),
- ('Resource Root', '/resource/'),
- ('Resource Instance', '/resource/123')])
+ self.assertEqual(
+ get_breadcrumbs(url),
+ [
+ ('Root', '/'),
+ ('Resource Root', '/resource/'),
+ ('Resource Instance', '/resource/123')
+ ]
+ )
def test_nested_resource_breadcrumbs(self):
url = '/resource/123/'
- self.assertEqual(get_breadcrumbs(url), [('Root', '/'),
- ('Resource Root', '/resource/'),
- ('Resource Instance', '/resource/123'),
- ('Nested Resource Root', '/resource/123/')])
+ self.assertEqual(
+ get_breadcrumbs(url),
+ [
+ ('Root', '/'),
+ ('Resource Root', '/resource/'),
+ ('Resource Instance', '/resource/123'),
+ ('Nested Resource Root', '/resource/123/')
+ ]
+ )
def test_nested_resource_instance_breadcrumbs(self):
url = '/resource/123/abc'
- self.assertEqual(get_breadcrumbs(url), [('Root', '/'),
- ('Resource Root', '/resource/'),
- ('Resource Instance', '/resource/123'),
- ('Nested Resource Root', '/resource/123/'),
- ('Nested Resource Instance', '/resource/123/abc')])
+ self.assertEqual(
+ get_breadcrumbs(url),
+ [
+ ('Root', '/'),
+ ('Resource Root', '/resource/'),
+ ('Resource Instance', '/resource/123'),
+ ('Nested Resource Root', '/resource/123/'),
+ ('Nested Resource Instance', '/resource/123/abc')
+ ]
+ )
def test_broken_url_breadcrumbs_handled_gracefully(self):
url = '/foobar'
- self.assertEqual(get_breadcrumbs(url), [('Root', '/')])
+ self.assertEqual(
+ get_breadcrumbs(url),
+ [('Root', '/')]
+ )
diff --git a/tests/test_fields.py b/tests/test_fields.py
index 97ef016f..094ac1eb 100644
--- a/tests/test_fields.py
+++ b/tests/test_fields.py
@@ -648,7 +648,7 @@ class DecimalFieldTest(TestCase):
s = DecimalSerializer(data={'decimal_field': '123'})
self.assertFalse(s.is_valid())
- self.assertEqual(s.errors, {'decimal_field': ['Ensure this value is less than or equal to 100.']})
+ self.assertEqual(s.errors, {'decimal_field': ['Ensure this value is less than or equal to 100.']})
def test_raise_min_value(self):
"""
@@ -660,7 +660,7 @@ class DecimalFieldTest(TestCase):
s = DecimalSerializer(data={'decimal_field': '99'})
self.assertFalse(s.is_valid())
- self.assertEqual(s.errors, {'decimal_field': ['Ensure this value is greater than or equal to 100.']})
+ self.assertEqual(s.errors, {'decimal_field': ['Ensure this value is greater than or equal to 100.']})
def test_raise_max_digits(self):
"""
@@ -672,7 +672,7 @@ class DecimalFieldTest(TestCase):
s = DecimalSerializer(data={'decimal_field': '123.456'})
self.assertFalse(s.is_valid())
- self.assertEqual(s.errors, {'decimal_field': ['Ensure that there are no more than 5 digits in total.']})
+ self.assertEqual(s.errors, {'decimal_field': ['Ensure that there are no more than 5 digits in total.']})
def test_raise_max_decimal_places(self):
"""
@@ -684,7 +684,7 @@ class DecimalFieldTest(TestCase):
s = DecimalSerializer(data={'decimal_field': '123.4567'})
self.assertFalse(s.is_valid())
- self.assertEqual(s.errors, {'decimal_field': ['Ensure that there are no more than 3 decimal places.']})
+ self.assertEqual(s.errors, {'decimal_field': ['Ensure that there are no more than 3 decimal places.']})
def test_raise_max_whole_digits(self):
"""
@@ -696,7 +696,7 @@ class DecimalFieldTest(TestCase):
s = DecimalSerializer(data={'decimal_field': '12345.6'})
self.assertFalse(s.is_valid())
- self.assertEqual(s.errors, {'decimal_field': ['Ensure that there are no more than 4 digits in total.']})
+ self.assertEqual(s.errors, {'decimal_field': ['Ensure that there are no more than 4 digits in total.']})
class ChoiceFieldTests(TestCase):
@@ -729,7 +729,7 @@ class ChoiceFieldTests(TestCase):
def test_invalid_choice_model(self):
s = ChoiceFieldModelSerializer(data={'choice': 'wrong_value'})
self.assertFalse(s.is_valid())
- self.assertEqual(s.errors, {'choice': ['Select a valid choice. wrong_value is not one of the available choices.']})
+ self.assertEqual(s.errors, {'choice': ['Select a valid choice. wrong_value is not one of the available choices.']})
self.assertEqual(s.data['choice'], '')
def test_empty_choice_model(self):
@@ -875,7 +875,7 @@ class SlugFieldTests(TestCase):
s = SlugFieldSerializer(data={'slug_field': 'a b'})
self.assertEqual(s.is_valid(), False)
- self.assertEqual(s.errors, {'slug_field': ["Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."]})
+ self.assertEqual(s.errors, {'slug_field': ["Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."]})
class URLFieldTests(TestCase):
diff --git a/tests/test_files.py b/tests/test_files.py
index 78f4cf42..af110df9 100644
--- a/tests/test_files.py
+++ b/tests/test_files.py
@@ -85,11 +85,8 @@ class FileSerializerTests(TestCase):
"""
Validation should still function when no data dictionary is provided.
"""
- now = datetime.datetime.now()
- file = BytesIO(six.b('stuff'))
- file.name = 'stuff.txt'
- file.size = len(file.getvalue())
- uploaded_file = UploadedFile(file=file, created=now)
-
- serializer = UploadedFileSerializer(files={'file': file})
+ uploaded_file = BytesIO(six.b('stuff'))
+ uploaded_file.name = 'stuff.txt'
+ uploaded_file.size = len(uploaded_file.getvalue())
+ serializer = UploadedFileSerializer(files={'file': uploaded_file})
self.assertFalse(serializer.is_valid())
diff --git a/tests/test_filters.py b/tests/test_filters.py
index 85840e01..b29760fa 100644
--- a/tests/test_filters.py
+++ b/tests/test_filters.py
@@ -74,7 +74,8 @@ if django_filters:
def get_queryset(self):
return FilterableItem.objects.all()
- urlpatterns = patterns('',
+ urlpatterns = patterns(
+ '',
url(r'^(?P<pk>\d+)/$', FilterClassDetailView.as_view(), name='detail-view'),
url(r'^$', FilterClassRootView.as_view(), name='root-view'),
url(r'^get-queryset/$', GetQuerysetView.as_view(),
@@ -653,8 +654,8 @@ class SensitiveOrderingFilterTests(TestCase):
self.assertEqual(
response.data,
[
- {'id': 1, username_field: 'userA'}, # PassB
- {'id': 2, username_field: 'userB'}, # PassC
- {'id': 3, username_field: 'userC'}, # PassA
+ {'id': 1, username_field: 'userA'}, # PassB
+ {'id': 2, username_field: 'userB'}, # PassC
+ {'id': 3, username_field: 'userC'}, # PassA
]
)
diff --git a/tests/test_genericrelations.py b/tests/test_genericrelations.py
index 3a8f3c7f..95295eaa 100644
--- a/tests/test_genericrelations.py
+++ b/tests/test_genericrelations.py
@@ -117,18 +117,18 @@ class TestGenericRelations(TestCase):
serializer = TagSerializer(Tag.objects.all(), many=True)
expected = [
- {
- 'tag': 'django',
- 'tagged_item': 'Bookmark: https://www.djangoproject.com/'
- },
- {
- 'tag': 'python',
- 'tagged_item': 'Bookmark: https://www.djangoproject.com/'
- },
- {
- 'tag': 'reminder',
- 'tagged_item': 'Note: Remember the milk'
- }
+ {
+ 'tag': 'django',
+ 'tagged_item': 'Bookmark: https://www.djangoproject.com/'
+ },
+ {
+ 'tag': 'python',
+ 'tagged_item': 'Bookmark: https://www.djangoproject.com/'
+ },
+ {
+ 'tag': 'reminder',
+ 'tagged_item': 'Note: Remember the milk'
+ }
]
self.assertEqual(serializer.data, expected)
diff --git a/tests/test_htmlrenderer.py b/tests/test_htmlrenderer.py
index 88d11c46..5a680f99 100644
--- a/tests/test_htmlrenderer.py
+++ b/tests/test_htmlrenderer.py
@@ -34,7 +34,8 @@ def not_found(request):
raise Http404()
-urlpatterns = patterns('',
+urlpatterns = patterns(
+ '',
url(r'^$', example),
url(r'^permission_denied$', permission_denied),
url(r'^not_found$', not_found),
diff --git a/tests/test_hyperlinkedserializers.py b/tests/test_hyperlinkedserializers.py
index d478ea73..d4548539 100644
--- a/tests/test_hyperlinkedserializers.py
+++ b/tests/test_hyperlinkedserializers.py
@@ -94,7 +94,8 @@ class OptionalRelationDetail(generics.RetrieveUpdateDestroyAPIView):
model_serializer_class = serializers.HyperlinkedModelSerializer
-urlpatterns = patterns('',
+urlpatterns = patterns(
+ '',
url(r'^basic/$', BasicList.as_view(), name='basicmodel-list'),
url(r'^basic/(?P<pk>\d+)/$', BasicDetail.as_view(), name='basicmodel-detail'),
url(r'^anchor/(?P<pk>\d+)/$', AnchorDetail.as_view(), name='anchor-detail'),
diff --git a/tests/test_pagination.py b/tests/test_pagination.py
index 293146c0..d5b9244d 100644
--- a/tests/test_pagination.py
+++ b/tests/test_pagination.py
@@ -1,7 +1,6 @@
from __future__ import unicode_literals
import datetime
from decimal import Decimal
-from django.db import models
from django.core.paginator import Paginator
from django.test import TestCase
from django.utils import unittest
@@ -12,6 +11,7 @@ from .models import BasicModel, FilterableItem
factory = APIRequestFactory()
+
# Helper function to split arguments out of an url
def split_arguments_from_url(url):
if '?' not in url:
@@ -274,8 +274,8 @@ class TestUnpaginated(TestCase):
BasicModel(text=i).save()
self.objects = BasicModel.objects
self.data = [
- {'id': obj.id, 'text': obj.text}
- for obj in self.objects.all()
+ {'id': obj.id, 'text': obj.text}
+ for obj in self.objects.all()
]
self.view = DefaultPageSizeKwargView.as_view()
@@ -302,8 +302,8 @@ class TestCustomPaginateByParam(TestCase):
BasicModel(text=i).save()
self.objects = BasicModel.objects
self.data = [
- {'id': obj.id, 'text': obj.text}
- for obj in self.objects.all()
+ {'id': obj.id, 'text': obj.text}
+ for obj in self.objects.all()
]
self.view = PaginateByParamView.as_view()
@@ -483,8 +483,6 @@ class NonIntegerPaginator(object):
class TestNonIntegerPagination(TestCase):
-
-
def test_custom_pagination_serializer(self):
objects = ['john', 'paul', 'george', 'ringo']
paginator = NonIntegerPaginator(objects, 2)
diff --git a/tests/test_permissions.py b/tests/test_permissions.py
index a2cb0c36..93f8020f 100644
--- a/tests/test_permissions.py
+++ b/tests/test_permissions.py
@@ -12,6 +12,7 @@ import base64
factory = APIRequestFactory()
+
class RootView(generics.ListCreateAPIView):
model = BasicModel
authentication_classes = [authentication.BasicAuthentication]
@@ -101,42 +102,54 @@ class ModelPermissionsIntegrationTests(TestCase):
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
def test_options_permitted(self):
- request = factory.options('/',
- HTTP_AUTHORIZATION=self.permitted_credentials)
+ request = factory.options(
+ '/',
+ HTTP_AUTHORIZATION=self.permitted_credentials
+ )
response = root_view(request, pk='1')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertIn('actions', response.data)
self.assertEqual(list(response.data['actions'].keys()), ['POST'])
- request = factory.options('/1',
- HTTP_AUTHORIZATION=self.permitted_credentials)
+ request = factory.options(
+ '/1',
+ HTTP_AUTHORIZATION=self.permitted_credentials
+ )
response = instance_view(request, pk='1')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertIn('actions', response.data)
self.assertEqual(list(response.data['actions'].keys()), ['PUT'])
def test_options_disallowed(self):
- request = factory.options('/',
- HTTP_AUTHORIZATION=self.disallowed_credentials)
+ request = factory.options(
+ '/',
+ HTTP_AUTHORIZATION=self.disallowed_credentials
+ )
response = root_view(request, pk='1')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertNotIn('actions', response.data)
- request = factory.options('/1',
- HTTP_AUTHORIZATION=self.disallowed_credentials)
+ request = factory.options(
+ '/1',
+ HTTP_AUTHORIZATION=self.disallowed_credentials
+ )
response = instance_view(request, pk='1')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertNotIn('actions', response.data)
def test_options_updateonly(self):
- request = factory.options('/',
- HTTP_AUTHORIZATION=self.updateonly_credentials)
+ request = factory.options(
+ '/',
+ HTTP_AUTHORIZATION=self.updateonly_credentials
+ )
response = root_view(request, pk='1')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertNotIn('actions', response.data)
- request = factory.options('/1',
- HTTP_AUTHORIZATION=self.updateonly_credentials)
+ request = factory.options(
+ '/1',
+ HTTP_AUTHORIZATION=self.updateonly_credentials
+ )
response = instance_view(request, pk='1')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertIn('actions', response.data)
@@ -153,6 +166,7 @@ class BasicPermModel(models.Model):
# add, change, delete built in to django
)
+
# Custom object-level permission, that includes 'view' permissions
class ViewObjectPermissions(permissions.DjangoObjectPermissions):
perms_map = {
@@ -205,7 +219,7 @@ class ObjectPermissionsIntegrationTests(TestCase):
app_label = BasicPermModel._meta.app_label
f = '{0}_{1}'.format
perms = {
- 'view': f('view', model_name),
+ 'view': f('view', model_name),
'change': f('change', model_name),
'delete': f('delete', model_name)
}
@@ -246,21 +260,27 @@ class ObjectPermissionsIntegrationTests(TestCase):
# Update
def test_can_update_permissions(self):
- request = factory.patch('/1', {'text': 'foobar'}, format='json',
- HTTP_AUTHORIZATION=self.credentials['writeonly'])
+ request = factory.patch(
+ '/1', {'text': 'foobar'}, format='json',
+ HTTP_AUTHORIZATION=self.credentials['writeonly']
+ )
response = object_permissions_view(request, pk='1')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data.get('text'), 'foobar')
def test_cannot_update_permissions(self):
- request = factory.patch('/1', {'text': 'foobar'}, format='json',
- HTTP_AUTHORIZATION=self.credentials['deleteonly'])
+ request = factory.patch(
+ '/1', {'text': 'foobar'}, format='json',
+ HTTP_AUTHORIZATION=self.credentials['deleteonly']
+ )
response = object_permissions_view(request, pk='1')
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
def test_cannot_update_permissions_non_existing(self):
- request = factory.patch('/999', {'text': 'foobar'}, format='json',
- HTTP_AUTHORIZATION=self.credentials['deleteonly'])
+ request = factory.patch(
+ '/999', {'text': 'foobar'}, format='json',
+ HTTP_AUTHORIZATION=self.credentials['deleteonly']
+ )
response = object_permissions_view(request, pk='999')
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
diff --git a/tests/test_relations.py b/tests/test_relations.py
index cd276d30..bc1db69f 100644
--- a/tests/test_relations.py
+++ b/tests/test_relations.py
@@ -108,19 +108,25 @@ class RelatedFieldSourceTests(TestCase):
doesn't exist.
"""
from tests.models import ManyToManySource
+
class Meta:
model = ManyToManySource
+
attrs = {
'name': serializers.SlugRelatedField(
slug_field='name', source='banzai'),
'Meta': Meta,
}
- TestSerializer = type(str('TestSerializer'),
- (serializers.ModelSerializer,), attrs)
+ TestSerializer = type(
+ str('TestSerializer'),
+ (serializers.ModelSerializer,),
+ attrs
+ )
with self.assertRaises(AttributeError):
TestSerializer(data={'name': 'foo'})
+
@unittest.skipIf(get_version() < '1.6.0', 'Upstream behaviour changed in v1.6')
class RelatedFieldChoicesTests(TestCase):
"""
@@ -141,4 +147,3 @@ class RelatedFieldChoicesTests(TestCase):
widget_count = len(field.widget.choices)
self.assertEqual(widget_count, choice_count + 1, 'BLANK_CHOICE_DASH option should have been added')
-
diff --git a/tests/test_relations_hyperlink.py b/tests/test_relations_hyperlink.py
index ab1c6664..0c8eb254 100644
--- a/tests/test_relations_hyperlink.py
+++ b/tests/test_relations_hyperlink.py
@@ -16,7 +16,8 @@ request = factory.get('/') # Just to ensure we have a request in the serializer
def dummy_view(request, pk):
pass
-urlpatterns = patterns('',
+urlpatterns = patterns(
+ '',
url(r'^dummyurl/(?P<pk>[0-9]+)/$', dummy_view, name='dummy-url'),
url(r'^manytomanysource/(?P<pk>[0-9]+)/$', dummy_view, name='manytomanysource-detail'),
url(r'^manytomanytarget/(?P<pk>[0-9]+)/$', dummy_view, name='manytomanytarget-detail'),
@@ -86,9 +87,9 @@ class HyperlinkedManyToManyTests(TestCase):
queryset = ManyToManySource.objects.all()
serializer = ManyToManySourceSerializer(queryset, many=True, context={'request': request})
expected = [
- {'url': 'http://testserver/manytomanysource/1/', 'name': 'source-1', 'targets': ['http://testserver/manytomanytarget/1/']},
- {'url': 'http://testserver/manytomanysource/2/', 'name': 'source-2', 'targets': ['http://testserver/manytomanytarget/1/', 'http://testserver/manytomanytarget/2/']},
- {'url': 'http://testserver/manytomanysource/3/', 'name': 'source-3', 'targets': ['http://testserver/manytomanytarget/1/', 'http://testserver/manytomanytarget/2/', 'http://testserver/manytomanytarget/3/']}
+ {'url': 'http://testserver/manytomanysource/1/', 'name': 'source-1', 'targets': ['http://testserver/manytomanytarget/1/']},
+ {'url': 'http://testserver/manytomanysource/2/', 'name': 'source-2', 'targets': ['http://testserver/manytomanytarget/1/', 'http://testserver/manytomanytarget/2/']},
+ {'url': 'http://testserver/manytomanysource/3/', 'name': 'source-3', 'targets': ['http://testserver/manytomanytarget/1/', 'http://testserver/manytomanytarget/2/', 'http://testserver/manytomanytarget/3/']}
]
self.assertEqual(serializer.data, expected)
@@ -114,9 +115,9 @@ class HyperlinkedManyToManyTests(TestCase):
queryset = ManyToManySource.objects.all()
serializer = ManyToManySourceSerializer(queryset, many=True, context={'request': request})
expected = [
- {'url': 'http://testserver/manytomanysource/1/', 'name': 'source-1', 'targets': ['http://testserver/manytomanytarget/1/', 'http://testserver/manytomanytarget/2/', 'http://testserver/manytomanytarget/3/']},
- {'url': 'http://testserver/manytomanysource/2/', 'name': 'source-2', 'targets': ['http://testserver/manytomanytarget/1/', 'http://testserver/manytomanytarget/2/']},
- {'url': 'http://testserver/manytomanysource/3/', 'name': 'source-3', 'targets': ['http://testserver/manytomanytarget/1/', 'http://testserver/manytomanytarget/2/', 'http://testserver/manytomanytarget/3/']}
+ {'url': 'http://testserver/manytomanysource/1/', 'name': 'source-1', 'targets': ['http://testserver/manytomanytarget/1/', 'http://testserver/manytomanytarget/2/', 'http://testserver/manytomanytarget/3/']},
+ {'url': 'http://testserver/manytomanysource/2/', 'name': 'source-2', 'targets': ['http://testserver/manytomanytarget/1/', 'http://testserver/manytomanytarget/2/']},
+ {'url': 'http://testserver/manytomanysource/3/', 'name': 'source-3', 'targets': ['http://testserver/manytomanytarget/1/', 'http://testserver/manytomanytarget/2/', 'http://testserver/manytomanytarget/3/']}
]
self.assertEqual(serializer.data, expected)
diff --git a/tests/test_relations_pk.py b/tests/test_relations_pk.py
index ff59b250..c051b076 100644
--- a/tests/test_relations_pk.py
+++ b/tests/test_relations_pk.py
@@ -65,9 +65,9 @@ class PKManyToManyTests(TestCase):
queryset = ManyToManySource.objects.all()
serializer = ManyToManySourceSerializer(queryset, many=True)
expected = [
- {'id': 1, 'name': 'source-1', 'targets': [1]},
- {'id': 2, 'name': 'source-2', 'targets': [1, 2]},
- {'id': 3, 'name': 'source-3', 'targets': [1, 2, 3]}
+ {'id': 1, 'name': 'source-1', 'targets': [1]},
+ {'id': 2, 'name': 'source-2', 'targets': [1, 2]},
+ {'id': 3, 'name': 'source-3', 'targets': [1, 2, 3]}
]
self.assertEqual(serializer.data, expected)
@@ -93,9 +93,9 @@ class PKManyToManyTests(TestCase):
queryset = ManyToManySource.objects.all()
serializer = ManyToManySourceSerializer(queryset, many=True)
expected = [
- {'id': 1, 'name': 'source-1', 'targets': [1, 2, 3]},
- {'id': 2, 'name': 'source-2', 'targets': [1, 2]},
- {'id': 3, 'name': 'source-3', 'targets': [1, 2, 3]}
+ {'id': 1, 'name': 'source-1', 'targets': [1, 2, 3]},
+ {'id': 2, 'name': 'source-2', 'targets': [1, 2]},
+ {'id': 3, 'name': 'source-3', 'targets': [1, 2, 3]}
]
self.assertEqual(serializer.data, expected)
diff --git a/tests/test_renderers.py b/tests/test_renderers.py
index 1d8adfa7..0403cde2 100644
--- a/tests/test_renderers.py
+++ b/tests/test_renderers.py
@@ -76,7 +76,6 @@ class MockGETView(APIView):
return Response({'foo': ['bar', 'baz']})
-
class MockPOSTView(APIView):
def post(self, request, **kwargs):
return Response({'foo': request.DATA})
@@ -102,7 +101,8 @@ class HTMLView1(APIView):
def get(self, request, **kwargs):
return Response('text')
-urlpatterns = patterns('',
+urlpatterns = patterns(
+ '',
url(r'^.*\.(?P<format>.+)$', MockView.as_view(renderer_classes=[RendererA, RendererB])),
url(r'^$', MockView.as_view(renderer_classes=[RendererA, RendererB])),
url(r'^cache$', MockGETView.as_view()),
@@ -312,16 +312,22 @@ class JSONRendererTests(TestCase):
class Dict(MutableMapping):
def __init__(self):
self._dict = dict()
+
def __getitem__(self, key):
return self._dict.__getitem__(key)
+
def __setitem__(self, key, value):
return self._dict.__setitem__(key, value)
+
def __delitem__(self, key):
return self._dict.__delitem__(key)
+
def __iter__(self):
return self._dict.__iter__()
+
def __len__(self):
return self._dict.__len__()
+
def keys(self):
return self._dict.keys()
@@ -330,22 +336,24 @@ class JSONRendererTests(TestCase):
x[2] = 3
ret = JSONRenderer().render(x)
data = json.loads(ret.decode('utf-8'))
- self.assertEquals(data, {'key': 'string value', '2': 3})
+ self.assertEquals(data, {'key': 'string value', '2': 3})
def test_render_obj_with_getitem(self):
class DictLike(object):
def __init__(self):
self._dict = {}
+
def set(self, value):
self._dict = dict(value)
+
def __getitem__(self, key):
return self._dict[key]
-
+
x = DictLike()
x.set({'a': 1, 'b': 'string'})
with self.assertRaises(TypeError):
JSONRenderer().render(x)
-
+
def test_without_content_type_args(self):
"""
Test basic JSON rendering.
@@ -394,35 +402,47 @@ class JSONPRendererTests(TestCase):
"""
Test JSONP rendering with View JSON Renderer.
"""
- resp = self.client.get('/jsonp/jsonrenderer',
- HTTP_ACCEPT='application/javascript')
+ resp = self.client.get(
+ '/jsonp/jsonrenderer',
+ HTTP_ACCEPT='application/javascript'
+ )
self.assertEqual(resp.status_code, status.HTTP_200_OK)
self.assertEqual(resp['Content-Type'], 'application/javascript; charset=utf-8')
- self.assertEqual(resp.content,
- ('callback(%s);' % _flat_repr).encode('ascii'))
+ self.assertEqual(
+ resp.content,
+ ('callback(%s);' % _flat_repr).encode('ascii')
+ )
def test_without_callback_without_json_renderer(self):
"""
Test JSONP rendering without View JSON Renderer.
"""
- resp = self.client.get('/jsonp/nojsonrenderer',
- HTTP_ACCEPT='application/javascript')
+ resp = self.client.get(
+ '/jsonp/nojsonrenderer',
+ HTTP_ACCEPT='application/javascript'
+ )
self.assertEqual(resp.status_code, status.HTTP_200_OK)
self.assertEqual(resp['Content-Type'], 'application/javascript; charset=utf-8')
- self.assertEqual(resp.content,
- ('callback(%s);' % _flat_repr).encode('ascii'))
+ self.assertEqual(
+ resp.content,
+ ('callback(%s);' % _flat_repr).encode('ascii')
+ )
def test_with_callback(self):
"""
Test JSONP rendering with callback function name.
"""
callback_func = 'myjsonpcallback'
- resp = self.client.get('/jsonp/nojsonrenderer?callback=' + callback_func,
- HTTP_ACCEPT='application/javascript')
+ resp = self.client.get(
+ '/jsonp/nojsonrenderer?callback=' + callback_func,
+ HTTP_ACCEPT='application/javascript'
+ )
self.assertEqual(resp.status_code, status.HTTP_200_OK)
self.assertEqual(resp['Content-Type'], 'application/javascript; charset=utf-8')
- self.assertEqual(resp.content,
- ('%s(%s);' % (callback_func, _flat_repr)).encode('ascii'))
+ self.assertEqual(
+ resp.content,
+ ('%s(%s);' % (callback_func, _flat_repr)).encode('ascii')
+ )
if yaml:
@@ -467,7 +487,6 @@ if yaml:
def assertYAMLContains(self, content, string):
self.assertTrue(string in content, '%r not in %r' % (string, content))
-
class UnicodeYAMLRendererTests(TestCase):
"""
Tests specific for the Unicode YAML Renderer
@@ -592,13 +611,13 @@ class CacheRenderTest(TestCase):
""" Return any errors that would be raised if `obj' is pickled
Courtesy of koffie @ http://stackoverflow.com/a/7218986/109897
"""
- if seen == None:
+ if seen is None:
seen = []
try:
state = obj.__getstate__()
except AttributeError:
return
- if state == None:
+ if state is None:
return
if isinstance(state, tuple):
if not isinstance(state[0], dict):
diff --git a/tests/test_request.py b/tests/test_request.py
index 0cde0fb4..8b048b5c 100644
--- a/tests/test_request.py
+++ b/tests/test_request.py
@@ -272,7 +272,8 @@ class MockView(APIView):
return Response(status=status.INTERNAL_SERVER_ERROR)
-urlpatterns = patterns('',
+urlpatterns = patterns(
+ '',
(r'^$', MockView.as_view()),
)
diff --git a/tests/test_response.py b/tests/test_response.py
index 0551f4a8..c28f186e 100644
--- a/tests/test_response.py
+++ b/tests/test_response.py
@@ -100,7 +100,8 @@ new_model_viewset_router = routers.DefaultRouter()
new_model_viewset_router.register(r'', HTMLNewModelViewSet)
-urlpatterns = patterns('',
+urlpatterns = patterns(
+ '',
url(r'^setbyview$', MockViewSettingContentType.as_view(renderer_classes=[RendererA, RendererB, RendererC])),
url(r'^.*\.(?P<format>.+)$', MockView.as_view(renderer_classes=[RendererA, RendererB, RendererC])),
url(r'^$', MockView.as_view(renderer_classes=[RendererA, RendererB, RendererC])),
diff --git a/tests/test_reverse.py b/tests/test_reverse.py
index 0d3fddf0..675a9d5a 100644
--- a/tests/test_reverse.py
+++ b/tests/test_reverse.py
@@ -10,7 +10,8 @@ factory = APIRequestFactory()
def null_view(request):
pass
-urlpatterns = patterns('',
+urlpatterns = patterns(
+ '',
url(r'^view$', null_view, name='view'),
)
diff --git a/tests/test_routers.py b/tests/test_routers.py
index 381569bd..b076f134 100644
--- a/tests/test_routers.py
+++ b/tests/test_routers.py
@@ -93,7 +93,8 @@ class TestCustomLookupFields(TestCase):
from tests import test_routers
urls = getattr(test_routers, 'urlpatterns')
- urls += patterns('',
+ urls += patterns(
+ '',
url(r'^', include(self.router.urls)),
)
@@ -104,7 +105,8 @@ class TestCustomLookupFields(TestCase):
def test_retrieve_lookup_field_list_view(self):
response = self.client.get('/notes/')
- self.assertEqual(response.data,
+ self.assertEqual(
+ response.data,
[{
"url": "http://testserver/notes/123/",
"uuid": "123", "text": "foo bar"
@@ -113,7 +115,8 @@ class TestCustomLookupFields(TestCase):
def test_retrieve_lookup_field_detail_view(self):
response = self.client.get('/notes/123/')
- self.assertEqual(response.data,
+ self.assertEqual(
+ response.data,
{
"url": "http://testserver/notes/123/",
"uuid": "123", "text": "foo bar"
diff --git a/tests/test_serializer.py b/tests/test_serializer.py
index 7d57fcf0..d27bdcf1 100644
--- a/tests/test_serializer.py
+++ b/tests/test_serializer.py
@@ -7,10 +7,12 @@ from django.utils import unittest
from django.utils.datastructures import MultiValueDict
from django.utils.translation import ugettext_lazy as _
from rest_framework import serializers, fields, relations
-from tests.models import (HasPositiveIntegerAsChoice, Album, ActionItem, Anchor, BasicModel,
- BlankFieldModel, BlogPost, BlogPostComment, Book, CallableDefaultValueModel, DefaultValueModel,
- ManyToManyModel, Person, ReadOnlyManyToManyModel, Photo, RESTFrameworkModel,
- ForeignKeySource, ManyToManySource)
+from tests.models import (
+ HasPositiveIntegerAsChoice, Album, ActionItem, Anchor, BasicModel,
+ BlankFieldModel, BlogPost, BlogPostComment, Book, CallableDefaultValueModel,
+ DefaultValueModel, ManyToManyModel, Person, ReadOnlyManyToManyModel, Photo,
+ RESTFrameworkModel, ForeignKeySource
+)
from tests.models import BasicModelSerializer
import datetime
import pickle
@@ -99,6 +101,7 @@ class ActionItemSerializer(serializers.ModelSerializer):
class Meta:
model = ActionItem
+
class ActionItemSerializerOptionalFields(serializers.ModelSerializer):
"""
Intended to test that fields with `required=False` are excluded from validation.
@@ -109,6 +112,7 @@ class ActionItemSerializerOptionalFields(serializers.ModelSerializer):
model = ActionItem
fields = ('title',)
+
class ActionItemSerializerCustomRestore(serializers.ModelSerializer):
class Meta:
@@ -295,8 +299,10 @@ class BasicTests(TestCase):
in the Meta data
"""
serializer = PersonSerializer(self.person)
- self.assertEqual(set(serializer.data.keys()),
- set(['name', 'age', 'info']))
+ self.assertEqual(
+ set(serializer.data.keys()),
+ set(['name', 'age', 'info'])
+ )
def test_field_with_dictionary(self):
"""
@@ -331,9 +337,9 @@ class BasicTests(TestCase):
— id field is not populated if `data` is accessed prior to `save()`
"""
serializer = ActionItemSerializer(self.actionitem)
- self.assertIsNone(serializer.data.get('id',None), 'New instance. `id` should not be set.')
+ self.assertIsNone(serializer.data.get('id', None), 'New instance. `id` should not be set.')
serializer.save()
- self.assertIsNotNone(serializer.data.get('id',None), 'Model is saved. `id` should be set.')
+ self.assertIsNotNone(serializer.data.get('id', None), 'Model is saved. `id` should be set.')
def test_fields_marked_as_not_required_are_excluded_from_validation(self):
"""
@@ -660,10 +666,10 @@ class ModelValidationTests(TestCase):
serializer.save()
second_serializer = AlbumsSerializer(data={'title': 'a'})
self.assertFalse(second_serializer.is_valid())
- self.assertEqual(second_serializer.errors, {'title': ['Album with this Title already exists.'],})
+ self.assertEqual(second_serializer.errors, {'title': ['Album with this Title already exists.']})
third_serializer = AlbumsSerializer(data=[{'title': 'b', 'ref': '1'}, {'title': 'c'}], many=True)
self.assertFalse(third_serializer.is_valid())
- self.assertEqual(third_serializer.errors, [{'ref': ['Album with this Ref already exists.']}, {}])
+ self.assertEqual(third_serializer.errors, [{'ref': ['Album with this Ref already exists.']}, {}])
def test_foreign_key_is_null_with_partial(self):
"""
@@ -959,7 +965,7 @@ class WritableFieldDefaultValueTests(TestCase):
self.assertEqual(got, self.expected)
def test_get_default_value_with_callable(self):
- field = self.create_field(default=lambda : self.expected)
+ field = self.create_field(default=lambda: self.expected)
got = field.get_default_value()
self.assertEqual(got, self.expected)
@@ -974,7 +980,7 @@ class WritableFieldDefaultValueTests(TestCase):
self.assertIsNone(got)
def test_get_default_value_returns_non_True_values(self):
- values = [None, '', False, 0, [], (), {}] # values that assumed as 'False' in the 'if' clause
+ values = [None, '', False, 0, [], (), {}] # values that assumed as 'False' in the 'if' clause
for expected in values:
field = self.create_field(default=expected)
got = field.get_default_value()
diff --git a/tests/test_serializer_bulk_update.py b/tests/test_serializer_bulk_update.py
index 8b0ded1a..67a8ed0d 100644
--- a/tests/test_serializer_bulk_update.py
+++ b/tests/test_serializer_bulk_update.py
@@ -83,9 +83,9 @@ class BulkCreateSerializerTests(TestCase):
self.assertEqual(serializer.is_valid(), False)
expected_errors = [
- {'non_field_errors': ['Invalid data']},
- {'non_field_errors': ['Invalid data']},
- {'non_field_errors': ['Invalid data']}
+ {'non_field_errors': ['Invalid data']},
+ {'non_field_errors': ['Invalid data']},
+ {'non_field_errors': ['Invalid data']}
]
self.assertEqual(serializer.errors, expected_errors)
diff --git a/tests/test_serializer_nested.py b/tests/test_serializer_nested.py
index 6d69ffbd..c09c24db 100644
--- a/tests/test_serializer_nested.py
+++ b/tests/test_serializer_nested.py
@@ -328,12 +328,14 @@ class NestedModelSerializerUpdateTests(TestCase):
class BlogPostSerializer(serializers.ModelSerializer):
comments = BlogPostCommentSerializer(many=True, source='blogpostcomment_set')
+
class Meta:
model = models.BlogPost
fields = ('id', 'title', 'comments')
class PersonSerializer(serializers.ModelSerializer):
posts = BlogPostSerializer(many=True, source='blogpost_set')
+
class Meta:
model = models.Person
fields = ('id', 'name', 'age', 'posts')
diff --git a/tests/test_serializers.py b/tests/test_serializers.py
index 2e276f15..09de9f4c 100644
--- a/tests/test_serializers.py
+++ b/tests/test_serializers.py
@@ -1,9 +1,7 @@
-from django.db import models
from django.test import TestCase
-
+from rest_framework.compat import six
from rest_framework.serializers import _resolve_model
from tests.models import BasicModel
-from rest_framework.compat import six
class ResolveModelTests(TestCase):
diff --git a/tests/test_status.py b/tests/test_status.py
index 7b1bdae3..721a6e30 100644
--- a/tests/test_status.py
+++ b/tests/test_status.py
@@ -30,4 +30,4 @@ class TestStatus(TestCase):
self.assertFalse(is_server_error(499))
self.assertTrue(is_server_error(500))
self.assertTrue(is_server_error(599))
- self.assertFalse(is_server_error(600)) \ No newline at end of file
+ self.assertFalse(is_server_error(600))
diff --git a/tests/test_templatetags.py b/tests/test_templatetags.py
index d4da0c23..b96bc0ca 100644
--- a/tests/test_templatetags.py
+++ b/tests/test_templatetags.py
@@ -48,4 +48,4 @@ class Issue1386Tests(TestCase):
self.assertEqual(i, res)
# example from issue #1386, this shouldn't raise an exception
- _ = urlize_quoted_links("asdf:[/p]zxcv.com")
+ urlize_quoted_links("asdf:[/p]zxcv.com")
diff --git a/tests/test_testing.py b/tests/test_testing.py
index 1b126e00..9c472026 100644
--- a/tests/test_testing.py
+++ b/tests/test_testing.py
@@ -28,7 +28,8 @@ def session_view(request):
})
-urlpatterns = patterns('',
+urlpatterns = patterns(
+ '',
url(r'^view/$', view),
url(r'^session-view/$', session_view),
)
@@ -142,7 +143,8 @@ class TestAPIRequestFactory(TestCase):
assertion error.
"""
factory = APIRequestFactory()
- self.assertRaises(AssertionError, factory.post,
+ self.assertRaises(
+ AssertionError, factory.post,
path='/view/', data={'example': 1}, format='xml'
)
diff --git a/tests/test_throttling.py b/tests/test_throttling.py
index 8c5eefe9..b0cb2fe7 100644
--- a/tests/test_throttling.py
+++ b/tests/test_throttling.py
@@ -27,7 +27,7 @@ class NonTimeThrottle(BaseThrottle):
if not hasattr(self.__class__, 'called'):
self.__class__.called = True
return True
- return False
+ return False
class MockView(APIView):
@@ -125,36 +125,42 @@ class ThrottlingTests(TestCase):
"""
Ensure for second based throttles.
"""
- self.ensure_response_header_contains_proper_throttle_field(MockView,
- ((0, None),
- (0, None),
- (0, None),
- (0, '1')
- ))
+ self.ensure_response_header_contains_proper_throttle_field(
+ MockView, (
+ (0, None),
+ (0, None),
+ (0, None),
+ (0, '1')
+ )
+ )
def test_minutes_fields(self):
"""
Ensure for minute based throttles.
"""
- self.ensure_response_header_contains_proper_throttle_field(MockView_MinuteThrottling,
- ((0, None),
- (0, None),
- (0, None),
- (0, '60')
- ))
+ self.ensure_response_header_contains_proper_throttle_field(
+ MockView_MinuteThrottling, (
+ (0, None),
+ (0, None),
+ (0, None),
+ (0, '60')
+ )
+ )
def test_next_rate_remains_constant_if_followed(self):
"""
If a client follows the recommended next request rate,
the throttling rate should stay constant.
"""
- self.ensure_response_header_contains_proper_throttle_field(MockView_MinuteThrottling,
- ((0, None),
- (20, None),
- (40, None),
- (60, None),
- (80, None)
- ))
+ self.ensure_response_header_contains_proper_throttle_field(
+ MockView_MinuteThrottling, (
+ (0, None),
+ (20, None),
+ (40, None),
+ (60, None),
+ (80, None)
+ )
+ )
def test_non_time_throttle(self):
"""
@@ -170,7 +176,7 @@ class ThrottlingTests(TestCase):
self.assertTrue(MockView_NonTimeThrottling.throttle_classes[0].called)
response = MockView_NonTimeThrottling.as_view()(request)
- self.assertFalse('X-Throttle-Wait-Seconds' in response)
+ self.assertFalse('X-Throttle-Wait-Seconds' in response)
class ScopedRateThrottleTests(TestCase):
diff --git a/tests/test_urlizer.py b/tests/test_urlizer.py
index 3dc8e8fe..a77aa22a 100644
--- a/tests/test_urlizer.py
+++ b/tests/test_urlizer.py
@@ -1,7 +1,6 @@
from __future__ import unicode_literals
from django.test import TestCase
from rest_framework.templatetags.rest_framework import urlize_quoted_links
-import sys
class URLizerTests(TestCase):