summaryrefslogtreecommitdiff
path: root/tests/admin_changelist
diff options
context:
space:
mode:
authorTom Carrick <tom@carrick.eu>2023-11-16 09:11:27 +0100
committerNatalia <124304+nessita@users.noreply.github.com>2024-02-05 21:42:04 -0300
commit9cefdfc43f0bae696b56fa5a0bf22346f85affff (patch)
tree3130851ba7b81e7ec5cc8a5467f860344c0547da /tests/admin_changelist
parent4ade8386ebfeb7a781dc2b62542c1cf5f8b9ddaf (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.py5
-rw-r--r--tests/admin_changelist/tests.py56
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)