summaryrefslogtreecommitdiff
path: root/tests/admin_views
diff options
context:
space:
mode:
authordevin13cox <36718613+devin13cox@users.noreply.github.com>2024-04-02 18:00:25 -0700
committerGitHub <noreply@github.com>2024-04-02 22:00:25 -0300
commit8665cf03d79c4b6222514c5943ccf3863a19cf08 (patch)
tree6d818877b856027bbee43b5a9ef25dac4c702b4f /tests/admin_views
parent888b9042b3598bab6557c62de82505eec9ea62ed (diff)
Fixed #35330 -- Fixed the update of related widgets when the referenced model is camel case named.
Co-authored-by: Natalia <124304+nessita@users.noreply.github.com>
Diffstat (limited to 'tests/admin_views')
-rw-r--r--tests/admin_views/admin.py8
-rw-r--r--tests/admin_views/models.py12
-rw-r--r--tests/admin_views/test_related_object_lookups.py42
3 files changed, 62 insertions, 0 deletions
diff --git a/tests/admin_views/admin.py b/tests/admin_views/admin.py
index c157e70505..0ea64d594a 100644
--- a/tests/admin_views/admin.py
+++ b/tests/admin_views/admin.py
@@ -33,6 +33,8 @@ from .models import (
Book,
Bookmark,
Box,
+ CamelCaseModel,
+ CamelCaseRelatedModel,
Category,
Chapter,
ChapterXtra1,
@@ -1181,6 +1183,10 @@ class SquareAdmin(admin.ModelAdmin):
readonly_fields = ("area",)
+class CamelCaseAdmin(admin.ModelAdmin):
+ filter_horizontal = ["m2m"]
+
+
site = admin.AdminSite(name="admin")
site.site_url = "/my-site-url/"
site.register(Article, ArticleAdmin)
@@ -1305,6 +1311,8 @@ site.register(Box)
site.register(Country, CountryAdmin)
site.register(Traveler, TravelerAdmin)
site.register(Square, SquareAdmin)
+site.register(CamelCaseModel)
+site.register(CamelCaseRelatedModel, CamelCaseAdmin)
# Register core models we need in our tests
site.register(User, UserAdmin)
diff --git a/tests/admin_views/models.py b/tests/admin_views/models.py
index 341e5aaed0..812505de82 100644
--- a/tests/admin_views/models.py
+++ b/tests/admin_views/models.py
@@ -1155,3 +1155,15 @@ class Square(models.Model):
class Meta:
required_db_features = {"supports_stored_generated_columns"}
+
+
+class CamelCaseModel(models.Model):
+ interesting_name = models.CharField(max_length=100)
+
+ def __str__(self):
+ return self.interesting_name
+
+
+class CamelCaseRelatedModel(models.Model):
+ m2m = models.ManyToManyField(CamelCaseModel, related_name="m2m")
+ fk = models.ForeignKey(CamelCaseModel, on_delete=models.CASCADE, related_name="fk")
diff --git a/tests/admin_views/test_related_object_lookups.py b/tests/admin_views/test_related_object_lookups.py
index 145bf0d6de..955bebea9e 100644
--- a/tests/admin_views/test_related_object_lookups.py
+++ b/tests/admin_views/test_related_object_lookups.py
@@ -76,3 +76,45 @@ class SeleniumTests(AdminSeleniumTestCase):
with self.subTest(link_id):
link = self.selenium.find_element(By.XPATH, f'//*[@id="{link_id}"]')
self.assertIsNone(link.get_attribute("aria-disabled"))
+
+ def test_related_object_update_with_camel_casing(self):
+ from selenium.webdriver.common.by import By
+
+ def _get_HTML_inside_element_by_id(id_):
+ return self.selenium.find_element(By.ID, id_).get_attribute("innerHTML")
+
+ add_url = reverse("admin:admin_views_camelcaserelatedmodel_add")
+ self.selenium.get(self.live_server_url + add_url)
+ interesting_name = "A test name"
+
+ # Add a new CamelCaseModel using the "+" icon next to the "fk" field.
+ self.selenium.find_element(By.ID, "add_id_fk").click()
+
+ # Switch to the add popup window.
+ self.wait_for_and_switch_to_popup()
+
+ # Find the "interesting_name" field and enter a value, then save it.
+ self.selenium.find_element(By.ID, "id_interesting_name").send_keys(
+ interesting_name
+ )
+ self.selenium.find_element(By.NAME, "_save").click()
+
+ # Return to the main window.
+ self.wait_until(lambda d: len(d.window_handles) == 1, 1)
+ self.selenium.switch_to.window(self.selenium.window_handles[0])
+
+ # Check that both the "Available" m2m box and the "Fk" dropdown now
+ # include the newly added CamelCaseModel instance.
+ self.assertHTMLEqual(
+ self.selenium.find_element(By.ID, "id_fk"),
+ f"""
+ <option value="" selected="">---------</option>
+ <option value="1" selected>{interesting_name}</option>
+ """,
+ )
+ self.assertHTMLEqual(
+ self.selenium.find_element(By.ID, "id_m2m_from"),
+ f"""
+ <option value="1">{interesting_name}</option>
+ """,
+ )