diff options
| author | Stephan Groß | 2012-11-15 14:35:34 +0100 | 
|---|---|---|
| committer | Stephan Groß | 2012-11-15 14:35:34 +0100 | 
| commit | a701a21587a69ed959533cbcfdaa9c63337c3ccc (patch) | |
| tree | 520dc39c32ac6f97fbdf659dc7cfcb361eee672b | |
| parent | 3ae203a0184d27318a8a828ce322b151ade0340f (diff) | |
| download | django-rest-framework-a701a21587a69ed959533cbcfdaa9c63337c3ccc.tar.bz2 | |
added page_size_kwarg tests
| -rw-r--r-- | rest_framework/tests/pagination.py | 143 | 
1 files changed, 142 insertions, 1 deletions
| diff --git a/rest_framework/tests/pagination.py b/rest_framework/tests/pagination.py index 713a7255..8aae2147 100644 --- a/rest_framework/tests/pagination.py +++ b/rest_framework/tests/pagination.py @@ -34,6 +34,29 @@ if django_filters:          filter_backend = filters.DjangoFilterBackend +class DefaultPageSizeKwargView(generics.ListAPIView): +    """ +    View for testing default page_size usage +    """ +    model = BasicModel + + +class CustomPageSizeKwargView(generics.ListAPIView): +    """ +    View for testing custom page_size usage +    """ +    model = BasicModel +    page_size_kwarg = 'ps' + + +class NonePageSizeKwargView(generics.ListAPIView): +    """ +    View for testing None page_size usage +    """ +    model = BasicModel +    page_size_kwarg = None + +  class IntegrationTestPagination(TestCase):      """      Integration tests for paginated list views. @@ -135,7 +158,7 @@ class IntegrationTestPaginationAndFiltering(TestCase):  class UnitTestPagination(TestCase):      """ -    Unit tests for pagination of primative objects. +    Unit tests for pagination of primitive objects.      """      def setUp(self): @@ -156,3 +179,121 @@ class UnitTestPagination(TestCase):          self.assertEquals(serializer.data['next'], None)          self.assertEquals(serializer.data['previous'], '?page=2')          self.assertEquals(serializer.data['results'], self.objects[20:]) + + +class TestDefaultPageSizeKwarg(TestCase): +    """ +    Tests for list views with default page size kwarg +    """ + +    def setUp(self): +        """ +        Create 13 BasicModel instances. +        """ +        for i in range(13): +            BasicModel(text=i).save() +        self.objects = BasicModel.objects +        self.data = [ +        {'id': obj.id, 'text': obj.text} +        for obj in self.objects.all() +        ] +        self.view = DefaultPageSizeKwargView.as_view() + +    def test_default_page_size(self): +        """ +        Tests the default page size for this view. +        no page size --> no limit --> no meta data +        """ +        request = factory.get('/') +        response = self.view(request).render() +        self.assertEquals(response.data, self.data) + +    def test_default_page_size_kwarg(self): +        """ +        If page_size_kwarg is set not set, the default page_size kwarg should limit per view requests. +        """ +        request = factory.get('/?page_size=5') +        response = self.view(request).render() +        self.assertEquals(response.data['count'], 13) +        self.assertEquals(response.data['results'], self.data[:5]) + + +class TestCustomPageSizeKwarg(TestCase): +    """ +    Tests for list views with default page size kwarg +    """ + +    def setUp(self): +        """ +        Create 13 BasicModel instances. +        """ +        for i in range(13): +            BasicModel(text=i).save() +        self.objects = BasicModel.objects +        self.data = [ +        {'id': obj.id, 'text': obj.text} +        for obj in self.objects.all() +        ] +        self.view = CustomPageSizeKwargView.as_view() + +    def test_default_page_size(self): +        """ +        Tests the default page size for this view. +        no page size --> no limit --> no meta data +        """ +        request = factory.get('/') +        response = self.view(request).render() +        self.assertEquals(response.data, self.data) + +    def test_disabled_default_page_size_kwarg(self): +        """ +        If page_size_kwarg is set set, the default page_size kwarg should not work. +        """ +        request = factory.get('/?page_size=5') +        response = self.view(request).render() +        self.assertEquals(response.data, self.data) + +    def test_custom_page_size_kwarg(self): +        """ +        If page_size_kwarg is set set, the new kwarg should limit per view requests. +        """ +        request = factory.get('/?ps=5') +        response = self.view(request).render() +        self.assertEquals(response.data['count'], 13) +        self.assertEquals(response.data['results'], self.data[:5]) + + +class TestNonePageSizeKwarg(TestCase): +    """ +    Tests for list views with default page size kwarg +    """ + +    def setUp(self): +        """ +        Create 13 BasicModel instances. +        """ +        for i in range(13): +            BasicModel(text=i).save() +        self.objects = BasicModel.objects +        self.data = [ +        {'id': obj.id, 'text': obj.text} +        for obj in self.objects.all() +        ] +        self.view = NonePageSizeKwargView.as_view() + +    def test_default_page_size(self): +        """ +        Tests the default page size for this view. +        no page size --> no limit --> no meta data +        """ +        request = factory.get('/') +        response = self.view(request).render() +        self.assertEquals(response.data, self.data) + +    def test_none_page_size_kwarg(self): +        """ +        If page_size_kwarg is set to None, custom page_size per request should be disabled. +        """ +        request = factory.get('/?page_size=5') +        response = self.view(request).render() +        self.assertEquals(response.data, self.data) | 
