diff options
| author | Michal Dvorak (cen38289) | 2012-12-17 16:35:47 +0100 |
|---|---|---|
| committer | Michal Dvorak (cen38289) | 2012-12-17 17:01:00 +0100 |
| commit | 8ac77eaae8d6ad01ec8f6de18134c4aa1961d4dd (patch) | |
| tree | dbdfdf8d3bdb5fd255ff0c9ce7bad75f34b48b19 /rest_framework/tests/pagination.py | |
| parent | 2a82b64963792b353a7a2634c003692bd4957c9f (diff) | |
| parent | 70714c234630cd205ed88686ece3b594f387a48f (diff) | |
| download | django-rest-framework-8ac77eaae8d6ad01ec8f6de18134c4aa1961d4dd.tar.bz2 | |
Merge remote-tracking branch 'tom/master'
Conflicts:
rest_framework/serializers.py
rest_framework/tests/serializer.py
Diffstat (limited to 'rest_framework/tests/pagination.py')
| -rw-r--r-- | rest_framework/tests/pagination.py | 45 |
1 files changed, 44 insertions, 1 deletions
diff --git a/rest_framework/tests/pagination.py b/rest_framework/tests/pagination.py index 3062007d..81d297a1 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 @@ -148,6 +148,11 @@ class IntegrationTestPaginationAndFiltering(TestCase): self.assertEquals(response.data['previous'], None) +class PassOnContextPaginationSerializer(pagination.PaginationSerializer): + class Meta: + object_serializer_class = serializers.Serializer + + class UnitTestPagination(TestCase): """ Unit tests for pagination of primitive objects. @@ -172,6 +177,15 @@ class UnitTestPagination(TestCase): self.assertEquals(serializer.data['previous'], '?page=2') self.assertEquals(serializer.data['results'], self.objects[20:]) + def test_context_available_in_result(self): + """ + Ensure context gets passed through to the object serializer. + """ + serializer = PassOnContextPaginationSerializer(self.first_page) + serializer.data + results = serializer.fields[serializer.results_field] + self.assertTrue(serializer.context is results.context) + class TestUnpaginated(TestCase): """ @@ -236,3 +250,32 @@ class TestCustomPaginateByParam(TestCase): response = self.view(request).render() self.assertEquals(response.data['count'], 13) self.assertEquals(response.data['results'], self.data[:5]) + + +class CustomField(serializers.Field): + def to_native(self, value): + if not 'view' in self.context: + raise RuntimeError("context isn't getting passed into custom field") + return "value" + + +class BasicModelSerializer(serializers.Serializer): + text = CustomField() + + +class TestContextPassedToCustomField(TestCase): + def setUp(self): + BasicModel.objects.create(text='ala ma kota') + + def test_with_pagination(self): + class ListView(generics.ListCreateAPIView): + model = BasicModel + serializer_class = BasicModelSerializer + paginate_by = 1 + + self.view = ListView.as_view() + request = factory.get('/') + response = self.view(request).render() + + self.assertEquals(response.status_code, status.HTTP_200_OK) + |
