diff options
| author | Tom Christie | 2013-01-26 21:37:43 +0000 |
|---|---|---|
| committer | Tom Christie | 2013-01-26 21:37:43 +0000 |
| commit | b5d8f50f9dcace3ad3c708ed518f23ff260f6bea (patch) | |
| tree | 7a0fb931ad5841b863359719075dd55f8370b3a1 /rest_framework/tests/pagination.py | |
| parent | 4eb5861f3676781493af29f8e9fd87ec22e591aa (diff) | |
| parent | a75db4cfb8ed756c451bfda7ea0c73a73859216f (diff) | |
| download | django-rest-framework-b5d8f50f9dcace3ad3c708ed518f23ff260f6bea.tar.bz2 | |
Merge branch 'master' into many-fields
Diffstat (limited to 'rest_framework/tests/pagination.py')
| -rw-r--r-- | rest_framework/tests/pagination.py | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/rest_framework/tests/pagination.py b/rest_framework/tests/pagination.py index 3b550877..697dfb5b 100644 --- a/rest_framework/tests/pagination.py +++ b/rest_framework/tests/pagination.py @@ -252,6 +252,8 @@ class TestCustomPaginateByParam(TestCase): self.assertEquals(response.data['results'], self.data[:5]) +### Tests for context in pagination serializers + class CustomField(serializers.Field): def to_native(self, value): if not 'view' in self.context: @@ -262,6 +264,11 @@ class CustomField(serializers.Field): class BasicModelSerializer(serializers.Serializer): text = CustomField() + def __init__(self, *args, **kwargs): + super(BasicModelSerializer, self).__init__(*args, **kwargs) + if not 'view' in self.context: + raise RuntimeError("context isn't getting passed into serializer init") + class TestContextPassedToCustomField(TestCase): def setUp(self): @@ -279,3 +286,39 @@ class TestContextPassedToCustomField(TestCase): self.assertEquals(response.status_code, status.HTTP_200_OK) + +### Tests for custom pagination serializers + +class LinksSerializer(serializers.Serializer): + next = pagination.NextPageField(source='*') + prev = pagination.PreviousPageField(source='*') + + +class CustomPaginationSerializer(pagination.BasePaginationSerializer): + links = LinksSerializer(source='*') # Takes the page object as the source + total_results = serializers.Field(source='paginator.count') + + results_field = 'objects' + + +class TestCustomPaginationSerializer(TestCase): + def setUp(self): + objects = ['john', 'paul', 'george', 'ringo'] + paginator = Paginator(objects, 2) + self.page = paginator.page(1) + + def test_custom_pagination_serializer(self): + request = RequestFactory().get('/foobar') + serializer = CustomPaginationSerializer( + instance=self.page, + context={'request': request} + ) + expected = { + 'links': { + 'next': 'http://testserver/foobar?page=2', + 'prev': None + }, + 'total_results': 4, + 'objects': ['john', 'paul'] + } + self.assertEquals(serializer.data, expected) |
