diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/conftest.py | 7 | ||||
| -rw-r--r-- | tests/test_pagination.py | 8 | ||||
| -rw-r--r-- | tests/test_relations_pk.py | 20 | ||||
| -rw-r--r-- | tests/test_routers.py | 38 | 
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): | 
