From 94c2f3b99364bcf2d6d6b4afa8e995bd9d61ed0a Mon Sep 17 00:00:00 2001 From: antoliny0919 Date: Thu, 24 Jul 2025 19:15:32 +0900 Subject: Fixed #36055 -- Prevented overlap of object-tools buttons and page header in the admin. --- tests/admin_views/models.py | 6 ++++++ tests/admin_views/tests.py | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) (limited to 'tests/admin_views') diff --git a/tests/admin_views/models.py b/tests/admin_views/models.py index a20130bb02..8f102dece3 100644 --- a/tests/admin_views/models.py +++ b/tests/admin_views/models.py @@ -973,6 +973,12 @@ class Restaurant(models.Model): city = models.ForeignKey(City, models.CASCADE) name = models.CharField(max_length=100) + class Meta: + verbose_name = ( + "very very very very very very very very very " + "loooooooooooooooooooooooooooooooooooooooooong name" + ) + def get_absolute_url(self): return "/dummy/%s/" % self.pk diff --git a/tests/admin_views/tests.py b/tests/admin_views/tests.py index 00b5d5ab89..65241becc0 100644 --- a/tests/admin_views/tests.py +++ b/tests/admin_views/tests.py @@ -126,6 +126,7 @@ from .models import ( Song, State, Story, + Subscriber, SuperSecretHideout, SuperVillain, Telegram, @@ -6955,6 +6956,37 @@ class SeleniumTests(AdminSeleniumTestCase): with self.wait_page_loaded(): save_button.click() + @screenshot_cases(["desktop_size", "mobile_size", "rtl", "dark", "high_contrast"]) + def test_long_header_with_object_tools_layout(self): + from selenium.webdriver.common.by import By + + self.admin_login( + username="super", password="secret", login_url=reverse("admin:index") + ) + s = Subscriber.objects.create(name="a " * 40, email="b " * 80) + self.selenium.get( + self.live_server_url + + reverse("admin:admin_views_subscriber_change", args=(s.pk,)) + ) + header = self.selenium.find_element(By.CSS_SELECTOR, "div#content h2") + self.assertGreater(len(header.text), 100) + object_tools = self.selenium.find_elements( + By.CSS_SELECTOR, "div#content ul.object-tools li" + ) + self.assertGreater(len(object_tools), 0) + self.take_screenshot("change_form") + + self.selenium.get( + self.live_server_url + reverse("admin:admin_views_restaurant_changelist") + ) + header = self.selenium.find_element(By.CSS_SELECTOR, "div#content h1") + self.assertGreater(len(header.text), 100) + object_tools = self.selenium.find_elements( + By.CSS_SELECTOR, "div#content ul.object-tools li" + ) + self.assertGreater(len(object_tools), 0) + self.take_screenshot("change_list") + @override_settings(ROOT_URLCONF="admin_views.urls") class ReadonlyTest(AdminFieldExtractionMixin, TestCase): -- cgit v1.3