diff options
| author | Tom Christie | 2013-05-14 11:27:03 +0100 | 
|---|---|---|
| committer | Tom Christie | 2013-05-14 11:27:03 +0100 | 
| commit | 6a037f63edf33e7a76f56828cf68bfae4ccb4f80 (patch) | |
| tree | c33f1d00434d987c2feb532c314102f4e260dbb9 /rest_framework/tests | |
| parent | 08bc97626960f108f01657e4ad12b7fd62e6183d (diff) | |
| download | django-rest-framework-6a037f63edf33e7a76f56828cf68bfae4ccb4f80.tar.bz2 | |
Added OrderingFilter
Diffstat (limited to 'rest_framework/tests')
| -rw-r--r-- | rest_framework/tests/filters.py | 116 | 
1 files changed, 116 insertions, 0 deletions
diff --git a/rest_framework/tests/filters.py b/rest_framework/tests/filters.py index e5414232..6b604deb 100644 --- a/rest_framework/tests/filters.py +++ b/rest_framework/tests/filters.py @@ -335,3 +335,119 @@ class SearchFilterTests(TestCase):                  {'id': 2, 'title': 'zz', 'text': 'bcd'}              ]          ) + + +class OrdringFilterModel(models.Model): +    title = models.CharField(max_length=20) +    text = models.CharField(max_length=100) + + +class OrderingFilterTests(TestCase): +    def setUp(self): +        # Sequence of title/text is: +        # +        # zyx abc +        # yxw bcd +        # xwv cde +        for idx in range(3): +            title = ( +                chr(ord('z') - idx) + +                chr(ord('y') - idx) + +                chr(ord('x') - idx) +            ) +            text = ( +                chr(idx + ord('a')) + +                chr(idx + ord('b')) + +                chr(idx + ord('c')) +            ) +            OrdringFilterModel(title=title, text=text).save() + +    def test_ordering(self): +        class OrderingListView(generics.ListAPIView): +            model = OrdringFilterModel +            filter_backends = (filters.OrderingFilter,) +            ordering = ('title',) + +        view = OrderingListView.as_view() +        request = factory.get('?order=text') +        response = view(request) +        self.assertEqual( +            response.data, +            [ +                {'id': 1, 'title': 'zyx', 'text': 'abc'}, +                {'id': 2, 'title': 'yxw', 'text': 'bcd'}, +                {'id': 3, 'title': 'xwv', 'text': 'cde'}, +            ] +        ) + +    def test_reverse_ordering(self): +        class OrderingListView(generics.ListAPIView): +            model = OrdringFilterModel +            filter_backends = (filters.OrderingFilter,) +            ordering = ('title',) + +        view = OrderingListView.as_view() +        request = factory.get('?order=-text') +        response = view(request) +        self.assertEqual( +            response.data, +            [ +                {'id': 3, 'title': 'xwv', 'text': 'cde'}, +                {'id': 2, 'title': 'yxw', 'text': 'bcd'}, +                {'id': 1, 'title': 'zyx', 'text': 'abc'}, +            ] +        ) + +    def test_incorrectfield_ordering(self): +        class OrderingListView(generics.ListAPIView): +            model = OrdringFilterModel +            filter_backends = (filters.OrderingFilter,) +            ordering = ('title',) + +        view = OrderingListView.as_view() +        request = factory.get('?order=foobar') +        response = view(request) +        self.assertEqual( +            response.data, +            [ +                {'id': 3, 'title': 'xwv', 'text': 'cde'}, +                {'id': 2, 'title': 'yxw', 'text': 'bcd'}, +                {'id': 1, 'title': 'zyx', 'text': 'abc'}, +            ] +        ) + +    def test_default_ordering(self): +        class OrderingListView(generics.ListAPIView): +            model = OrdringFilterModel +            filter_backends = (filters.OrderingFilter,) +            ordering = ('title',) + +        view = OrderingListView.as_view() +        request = factory.get('') +        response = view(request) +        self.assertEqual( +            response.data, +            [ +                {'id': 3, 'title': 'xwv', 'text': 'cde'}, +                {'id': 2, 'title': 'yxw', 'text': 'bcd'}, +                {'id': 1, 'title': 'zyx', 'text': 'abc'}, +            ] +        ) + +    def test_default_ordering_using_string(self): +        class OrderingListView(generics.ListAPIView): +            model = OrdringFilterModel +            filter_backends = (filters.OrderingFilter,) +            ordering = 'title' + +        view = OrderingListView.as_view() +        request = factory.get('') +        response = view(request) +        self.assertEqual( +            response.data, +            [ +                {'id': 3, 'title': 'xwv', 'text': 'cde'}, +                {'id': 2, 'title': 'yxw', 'text': 'bcd'}, +                {'id': 1, 'title': 'zyx', 'text': 'abc'}, +            ] +        )  | 
