Source code for rest_framework_tricks.tests.test_ordering_filter

"""
Test OrderingFilter.
"""

from __future__ import absolute_import

from decimal import Decimal

import unittest

from nine.versions import DJANGO_GTE_1_10

import pytest

from rest_framework import status

import factories

from .base import BaseRestFrameworkTestCase

if DJANGO_GTE_1_10:
    from django.urls import reverse
else:
    from django.core.urlresolvers import reverse

__title__ = 'rest_framework_tricks.tests.test_nested_proxy_field'
__author__ = 'Artur Barseghyan <artur.barseghyan@gmail.com>'
__copyright__ = '2017-2019 Artur Barseghyan'
__license__ = 'GPL 2.0/LGPL 2.1'
__all__ = (
    'TestOrderingFilter',
)


[docs]@pytest.mark.django_db class TestOrderingFilter(BaseRestFrameworkTestCase): """Test OrderingFilter.""" pytestmark = pytest.mark.django_db
[docs] @classmethod def setUpClass(cls): """Set up.""" super(TestOrderingFilter, cls).setUpClass() cls.bookproxy_listing_url = reverse('bookproxy-list', kwargs={}) cls.bookproxy2_listing_url = reverse('bookproxy2-list', kwargs={}) cls.books = factories.BookFactory.create_batch(10)
def _test_ordering(self, descending=False): """Test ordering. :param descending: :return: """ response = self.client.get( self.bookproxy_listing_url, {'ordering': '-city' if descending else 'city'}, format='json' ) self.assertEqual(response.status_code, status.HTTP_200_OK) data = [] for item in response.data['results']: data.append(item['city'] if item['city'] else '') sorted_data = sorted(data) if descending: sorted_data = list(reversed(sorted_data)) self.assertEqual(data, sorted_data)
[docs] def test_ordering(self): """Test ordering (ascending). :return: """ return self._test_ordering()
[docs] def test_ordering_descending(self): """Test ordering (descending). :return: """ return self._test_ordering(descending=True)
def _test_standard_ordering(self, descending=False): """Test standard ordering. :param descending: :return: """ response = self.client.get( self.bookproxy2_listing_url, {'ordering': '-id' if descending else 'id'}, format='json' ) self.assertEqual(response.status_code, status.HTTP_200_OK) data = [] for item in response.data['results']: data.append(item['id'] if item['id'] else '') sorted_data = sorted(data) if descending: sorted_data = list(reversed(sorted_data)) self.assertEqual(data, sorted_data)
[docs] def test_standard_ordering(self): """Test standard ordering (ascending). :return: """ return self._test_standard_ordering()
[docs] def test_standard_ordering_descending(self): """Test standard ordering (descending). :return: """ return self._test_standard_ordering(descending=True)
[docs] def test_standard_no_ordering(self): """Test standard no ordering. :return: """ response = self.client.get( self.bookproxy_listing_url, {}, format='json' ) self.assertEqual(response.status_code, status.HTTP_200_OK) data = [] for item in response.data['results']: data.append(item['id'] if item['id'] else '') sorted_data = sorted(data) self.assertEqual(data, sorted_data)
def _test_ordering_list(self, descending=False): """Test ordering list. :param descending: :return: """ response = self.client.get( self.bookproxy_listing_url, {'ordering': '-status' if descending else 'status'}, format='json' ) self.assertEqual(response.status_code, status.HTTP_200_OK) data = [] data_2 = [] for item in response.data['results']: _state = item['state'] if item['state'] else '' _pub_date = item['publishing_information']['publication_date'] \ if item['publishing_information']['publication_date'] \ else '' data.append(_state) data_2.append('{} {}'.format(_state, _pub_date)) sorted_data = sorted(data) sorted_data_2 = sorted(data_2) if descending: sorted_data = list(reversed(sorted_data)) sorted_data_2 = list(reversed(sorted_data_2)) self.assertEqual(data, sorted_data) self.assertEqual(data_2, sorted_data_2)
[docs] def test_ordering_list(self): """Test ordering list (ascending). :return: """ return self._test_ordering_list()
[docs] def test_ordering_list_descending(self): """Test ordering list (descending). :return: """ return self._test_ordering_list(descending=True)
if __name__ == '__main__': unittest.main()