aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/conftest.py7
-rw-r--r--tests/test_pagination.py8
-rw-r--r--tests/test_relations_pk.py20
-rw-r--r--tests/test_routers.py38
4 files changed, 62 insertions, 11 deletions
diff --git a/tests/conftest.py b/tests/conftest.py
index 44ed070b..03b4e328 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -18,7 +18,6 @@ def pytest_configure():
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',
),
@@ -27,7 +26,6 @@ def pytest_configure():
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
- 'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
@@ -35,12 +33,7 @@ def pytest_configure():
'tests',
),
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',
),
)
diff --git a/tests/test_pagination.py b/tests/test_pagination.py
index 13bfb627..6b39a6f2 100644
--- a/tests/test_pagination.py
+++ b/tests/test_pagination.py
@@ -24,9 +24,9 @@ class TestPaginationIntegration:
return [item for item in queryset if item % 2 == 0]
class BasicPagination(pagination.PageNumberPagination):
- paginate_by = 5
- paginate_by_param = 'page_size'
- max_paginate_by = 20
+ page_size = 5
+ page_size_query_param = 'page_size'
+ max_page_size = 20
self.view = generics.ListAPIView.as_view(
serializer_class=PassThroughSerializer,
@@ -185,7 +185,7 @@ class TestPageNumberPagination:
def setup(self):
class ExamplePagination(pagination.PageNumberPagination):
- paginate_by = 5
+ page_size = 5
self.pagination = ExamplePagination()
self.queryset = range(1, 101)
diff --git a/tests/test_relations_pk.py b/tests/test_relations_pk.py
index f872a8dc..ca43272b 100644
--- a/tests/test_relations_pk.py
+++ b/tests/test_relations_pk.py
@@ -143,6 +143,16 @@ class PKManyToManyTests(TestCase):
]
self.assertEqual(serializer.data, expected)
+ def test_many_to_many_unsaved(self):
+ source = ManyToManySource(name='source-unsaved')
+
+ serializer = ManyToManySourceSerializer(source)
+
+ expected = {'id': None, 'name': 'source-unsaved', 'targets': []}
+ # no query if source hasn't been created yet
+ with self.assertNumQueries(0):
+ self.assertEqual(serializer.data, expected)
+
def test_reverse_many_to_many_create(self):
data = {'id': 4, 'name': 'target-4', 'sources': [1, 3]}
serializer = ManyToManyTargetSerializer(data=data)
@@ -296,6 +306,16 @@ class PKForeignKeyTests(TestCase):
self.assertFalse(serializer.is_valid())
self.assertEqual(serializer.errors, {'target': ['This field may not be null.']})
+ def test_foreign_key_with_unsaved(self):
+ source = ForeignKeySource(name='source-unsaved')
+ expected = {'id': None, 'name': 'source-unsaved', 'target': None}
+
+ serializer = ForeignKeySourceSerializer(source)
+
+ # no query if source hasn't been created yet
+ with self.assertNumQueries(0):
+ self.assertEqual(serializer.data, expected)
+
def test_foreign_key_with_empty(self):
"""
Regression test for #1072
diff --git a/tests/test_routers.py b/tests/test_routers.py
index 08c58ec7..19eeb868 100644
--- a/tests/test_routers.py
+++ b/tests/test_routers.py
@@ -32,6 +32,13 @@ class NoteViewSet(viewsets.ModelViewSet):
lookup_field = 'uuid'
+class KWargedNoteViewSet(viewsets.ModelViewSet):
+ queryset = RouterTestModel.objects.all()
+ serializer_class = NoteSerializer
+ lookup_field = 'text__contains'
+ lookup_url_kwarg = 'text'
+
+
class MockViewSet(viewsets.ModelViewSet):
queryset = None
serializer_class = None
@@ -40,6 +47,9 @@ class MockViewSet(viewsets.ModelViewSet):
notes_router = SimpleRouter()
notes_router.register(r'notes', NoteViewSet)
+kwarged_notes_router = SimpleRouter()
+kwarged_notes_router.register(r'notes', KWargedNoteViewSet)
+
namespaced_router = DefaultRouter()
namespaced_router.register(r'example', MockViewSet, base_name='example')
@@ -47,6 +57,7 @@ urlpatterns = [
url(r'^non-namespaced/', include(namespaced_router.urls)),
url(r'^namespaced/', include(namespaced_router.urls, namespace='example')),
url(r'^example/', include(notes_router.urls)),
+ url(r'^example2/', include(kwarged_notes_router.urls)),
]
@@ -177,6 +188,33 @@ class TestLookupValueRegex(TestCase):
self.assertEqual(expected[idx], self.urls[idx].regex.pattern)
+class TestLookupUrlKwargs(TestCase):
+ """
+ Ensure the router honors lookup_url_kwarg.
+
+ Setup a deep lookup_field, but map it to a simple URL kwarg.
+ """
+ urls = 'tests.test_routers'
+
+ def setUp(self):
+ RouterTestModel.objects.create(uuid='123', text='foo bar')
+
+ def test_custom_lookup_url_kwarg_route(self):
+ detail_route = kwarged_notes_router.urls[-1]
+ detail_url_pattern = detail_route.regex.pattern
+ self.assertIn('^notes/(?P<text>', detail_url_pattern)
+
+ def test_retrieve_lookup_url_kwarg_detail_view(self):
+ response = self.client.get('/example2/notes/fo/')
+ self.assertEqual(
+ response.data,
+ {
+ "url": "http://testserver/example/notes/123/",
+ "uuid": "123", "text": "foo bar"
+ }
+ )
+
+
class TestTrailingSlashIncluded(TestCase):
def setUp(self):
class NoteViewSet(viewsets.ModelViewSet):