From 11375127e2e0551fab352fd29841449a995530b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20Gro=C3=9F?= Date: Thu, 13 Dec 2012 10:40:05 +0100 Subject: [PATCH] added tests for absolute url pagination --- rest_framework/tests/pagination.py | 59 +++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/rest_framework/tests/pagination.py b/rest_framework/tests/pagination.py index 146b36ab9..2908e1269 100644 --- a/rest_framework/tests/pagination.py +++ b/rest_framework/tests/pagination.py @@ -4,7 +4,7 @@ from django.core.paginator import Paginator from django.test import TestCase from django.test.client import RequestFactory from django.utils import unittest -from rest_framework import generics, status, pagination, filters +from rest_framework import generics, status, pagination, filters, serializers from rest_framework.compat import django_filters from rest_framework.tests.models import BasicModel, FilterableItem @@ -34,6 +34,23 @@ if django_filters: filter_backend = filters.DjangoFilterBackend +class AbsoluteUrlsSerializer(serializers.ModelSerializer): + """ + Serializer for testing absolute urls + """ + class Meta: + use_absolute_urls = True + + +class AbsoluteUrlsView(generics.ListAPIView): + """ + View for testing absolute urls + """ + model = BasicModel + paginate_by = 1 + + + class DefaultPageSizeKwargView(generics.ListAPIView): """ View for testing default paginate_by_param usage @@ -173,6 +190,46 @@ class UnitTestPagination(TestCase): self.assertEquals(serializer.data['results'], self.objects[20:]) +class TestPaginationWithAbsoluteUrls(TestCase): + """ + Tests for using absolute urls + """ + + def setUp(self): + items = ['foo', 'bar', 'baz'] + for item in items: + BasicModel(text=item).save() + self.objects = BasicModel.objects + self.data = [ + {'id': obj.id, 'text': obj.text} + for obj in self.objects.all() + ] + self.view = AbsoluteUrlsView.as_view() + + def test_paginated_root_view_urls(self): + """ + Tests absolute/relative url switch + """ + request = factory.get('/') + response = self.view(request).render() + self.assertEquals(response.data['count'], 3) + self.assertEquals(response.data['next'], 'http://testserver/?page=2') + self.assertEquals(response.data['previous'], None) + self.assertEquals(response.data['results'], self.data[0:1]) + request = factory.get('/?page=2') + response = self.view(request).render() + self.assertEquals(response.data['count'], 3) + self.assertEquals(response.data['next'], 'http://testserver/?page=3') + self.assertEquals(response.data['previous'], 'http://testserver/?page=1') + self.assertEquals(response.data['results'], self.data[1:2]) + request = factory.get('/?page=3') + response = self.view(request).render() + self.assertEquals(response.data['count'], 3) + self.assertEquals(response.data['next'], None) + self.assertEquals(response.data['previous'], 'http://testserver/?page=2') + self.assertEquals(response.data['results'], self.data[2:3]) + + class TestUnpaginated(TestCase): """ Tests for list views without pagination.