|
5 | 5 | from decimal import Decimal
|
6 | 6 |
|
7 | 7 | from django.conf.urls import url
|
| 8 | +from django.core.exceptions import ImproperlyConfigured |
8 | 9 | from django.core.urlresolvers import reverse
|
9 | 10 | from django.db import models
|
10 | 11 | from django.test import TestCase
|
@@ -754,6 +755,41 @@ class OrderingListView(generics.ListAPIView):
|
754 | 755 |
|
755 | 756 | self.assertContains(response, 'verbose title')
|
756 | 757 |
|
| 758 | + def test_ordering_with_overridden_get_serializer_class(self): |
| 759 | + class OrderingListView(generics.ListAPIView): |
| 760 | + queryset = OrderingFilterModel.objects.all() |
| 761 | + filter_backends = (filters.OrderingFilter,) |
| 762 | + ordering = ('title',) |
| 763 | + # note: no ordering_fields and serializer_class speficied |
| 764 | + |
| 765 | + def get_serializer_class(self): |
| 766 | + return OrderingFilterSerializer |
| 767 | + |
| 768 | + view = OrderingListView.as_view() |
| 769 | + request = factory.get('/', {'ordering': 'text'}) |
| 770 | + response = view(request) |
| 771 | + self.assertEqual( |
| 772 | + response.data, |
| 773 | + [ |
| 774 | + {'id': 1, 'title': 'zyx', 'text': 'abc'}, |
| 775 | + {'id': 2, 'title': 'yxw', 'text': 'bcd'}, |
| 776 | + {'id': 3, 'title': 'xwv', 'text': 'cde'}, |
| 777 | + ] |
| 778 | + ) |
| 779 | + |
| 780 | + def test_ordering_with_improper_configuration(self): |
| 781 | + class OrderingListView(generics.ListAPIView): |
| 782 | + queryset = OrderingFilterModel.objects.all() |
| 783 | + filter_backends = (filters.OrderingFilter,) |
| 784 | + ordering = ('title',) |
| 785 | + # note: no ordering_fields and serializer_class |
| 786 | + # or get_serializer_class speficied |
| 787 | + |
| 788 | + view = OrderingListView.as_view() |
| 789 | + request = factory.get('/', {'ordering': 'text'}) |
| 790 | + with self.assertRaises(ImproperlyConfigured): |
| 791 | + view(request) |
| 792 | + |
757 | 793 |
|
758 | 794 | class SensitiveOrderingFilterModel(models.Model):
|
759 | 795 | username = models.CharField(max_length=20)
|
|
0 commit comments