diff options
| author | Tom Carrick <tom@carrick.eu> | 2023-11-16 09:11:27 +0100 |
|---|---|---|
| committer | Natalia <124304+nessita@users.noreply.github.com> | 2024-02-05 21:42:04 -0300 |
| commit | 9cefdfc43f0bae696b56fa5a0bf22346f85affff (patch) | |
| tree | 3130851ba7b81e7ec5cc8a5467f860344c0547da /tests/admin_changelist | |
| parent | 4ade8386ebfeb7a781dc2b62542c1cf5f8b9ddaf (diff) | |
Refs #10743 -- Enabled ordering for lookups in ModelAdmin.list_display.
Co-authored-by: Natalia <124304+nessita@users.noreply.github.com>
Co-authored-by: Nina Menezes <https://github.com/nmenezes0>
Diffstat (limited to 'tests/admin_changelist')
| -rw-r--r-- | tests/admin_changelist/admin.py | 5 | ||||
| -rw-r--r-- | tests/admin_changelist/tests.py | 56 |
2 files changed, 60 insertions, 1 deletions
diff --git a/tests/admin_changelist/admin.py b/tests/admin_changelist/admin.py index 3e6009b0c5..349ef7d465 100644 --- a/tests/admin_changelist/admin.py +++ b/tests/admin_changelist/admin.py @@ -3,7 +3,7 @@ from django.contrib.auth.admin import UserAdmin from django.contrib.auth.models import User from django.core.paginator import Paginator -from .models import Band, Child, Event, Parent, ProxyUser, Swallow +from .models import Band, Child, Event, GrandChild, Parent, ProxyUser, Swallow site = admin.AdminSite(name="admin") @@ -57,6 +57,9 @@ class GrandChildAdmin(admin.ModelAdmin): list_display = ["name", "parent__name", "parent__parent__name"] +site.register(GrandChild, GrandChildAdmin) + + class CustomPaginationAdmin(ChildAdmin): paginator = CustomPaginator diff --git a/tests/admin_changelist/tests.py b/tests/admin_changelist/tests.py index 72fac8cd61..4f267635f1 100644 --- a/tests/admin_changelist/tests.py +++ b/tests/admin_changelist/tests.py @@ -2073,3 +2073,59 @@ class SeleniumTests(AdminSeleniumTestCase): By.CSS_SELECTOR, "[data-filter-title='It\\'s OK']" ).get_attribute("open") ) + + def test_list_display_ordering(self): + from selenium.webdriver.common.by import By + + parent_a = Parent.objects.create(name="Parent A") + child_l = Child.objects.create(name="Child L", parent=None) + child_m = Child.objects.create(name="Child M", parent=parent_a) + GrandChild.objects.create(name="Grandchild X", parent=child_m) + GrandChild.objects.create(name="Grandchild Y", parent=child_l) + GrandChild.objects.create(name="Grandchild Z", parent=None) + + self.admin_login(username="super", password="secret") + changelist_url = reverse("admin:admin_changelist_grandchild_changelist") + self.selenium.get(self.live_server_url + changelist_url) + + def find_result_row_texts(): + table = self.selenium.find_element(By.ID, "result_list") + # Drop header from the result list + return [row.text for row in table.find_elements(By.TAG_NAME, "tr")][1:] + + def expected_from_queryset(qs): + return [ + " ".join("-" if i is None else i for i in item) + for item in qs.values_list( + "name", "parent__name", "parent__parent__name" + ) + ] + + cases = [ + # Order ascending by `name`. + ("th.sortable.column-name", ("name",)), + # Order descending by `name`. + ("th.sortable.column-name", ("-name",)), + # Order ascending by `parent__name`. + ("th.sortable.column-parent__name", ("parent__name", "-name")), + # Order descending by `parent__name`. + ("th.sortable.column-parent__name", ("-parent__name", "-name")), + # Order ascending by `parent__parent__name`. + ( + "th.sortable.column-parent__parent__name", + ("parent__parent__name", "-parent__name", "-name"), + ), + # Order descending by `parent__parent__name`. + ( + "th.sortable.column-parent__parent__name", + ("-parent__parent__name", "-parent__name", "-name"), + ), + ] + for css_selector, ordering in cases: + with self.subTest(ordering=ordering): + # self.selenium.get(self.live_server_url + changelist_url) + self.selenium.find_element(By.CSS_SELECTOR, css_selector).click() + expected = expected_from_queryset( + GrandChild.objects.all().order_by(*ordering) + ) + self.assertEqual(find_result_row_texts(), expected) |
