Source code for rest_framework_tricks.tests.test_ordering_filter

"""
Test OrderingFilter.
"""
from django.urls import reverse
import pytest
from rest_framework import status

import factories

from .base import BaseRestFrameworkTestCase

__author__ = "Artur Barseghyan <artur.barseghyan@gmail.com>"
__copyright__ = "2017-2022 Artur Barseghyan"
__license__ = "GPL-2.0-only OR LGPL-2.1-or-later"
__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)