diff options
| author | antoliny0919 <antoliny0919@gmail.com> | 2025-02-28 12:17:17 +0100 |
|---|---|---|
| committer | Sarah Boyce <42296566+sarahboyce@users.noreply.github.com> | 2025-03-04 10:36:37 +0100 |
| commit | 5997fdc9214eafaaf2fadc065f1d2ced34641598 (patch) | |
| tree | 15ce8c0452c96e1b1fdf8a2e0d173890fc1d7540 /tests/admin_utils | |
| parent | 0e3a6c5fec53b2fa41c171ab43ad4d3bb9d72def (diff) | |
[5.2.x] Fixed #36217 -- Restored pre_save/post_save signal emission via LogEntry.save() for single-object deletion in the admin.
Regression in 40b3975e7d3e1464a733c69171ad7d38f8814280.
Thanks smiling-watermelon for the report.
Co-authored-by: Sarah Boyce <42296566+sarahboyce@users.noreply.github.com>
Backport of c09bceef68e5abb79accedd12dade16aa6577a09 from main.
Diffstat (limited to 'tests/admin_utils')
| -rw-r--r-- | tests/admin_utils/test_logentry.py | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/tests/admin_utils/test_logentry.py b/tests/admin_utils/test_logentry.py index e97441eb2e..37ddb0da7d 100644 --- a/tests/admin_utils/test_logentry.py +++ b/tests/admin_utils/test_logentry.py @@ -5,6 +5,7 @@ from django.contrib.admin.models import ADDITION, CHANGE, DELETION, LogEntry from django.contrib.admin.utils import quote from django.contrib.auth.models import User from django.contrib.contenttypes.models import ContentType +from django.db.models.signals import post_save, pre_save from django.test import TestCase, override_settings from django.urls import reverse from django.utils import translation @@ -42,11 +43,23 @@ class LogEntryTests(TestCase): [cls.a1], CHANGE, change_message="Changed something", - single_object=True, ) def setUp(self): self.client.force_login(self.user) + self.signals = [] + + pre_save.connect(self.pre_save_listener, sender=LogEntry) + self.addCleanup(pre_save.disconnect, self.pre_save_listener, sender=LogEntry) + + post_save.connect(self.post_save_listener, sender=LogEntry) + self.addCleanup(post_save.disconnect, self.post_save_listener, sender=LogEntry) + + def pre_save_listener(self, instance, **kwargs): + self.signals.append(("pre_save", instance)) + + def post_save_listener(self, instance, created, **kwargs): + self.signals.append(("post_save", instance, created)) def test_logentry_save(self): """ @@ -288,6 +301,7 @@ class LogEntryTests(TestCase): for obj in queryset ] self.assertSequenceEqual(logs, expected_log_values) + self.assertEqual(self.signals, []) # RemovedInDjango60Warning. def test_log_action_fallback(self): @@ -371,6 +385,8 @@ class LogEntryTests(TestCase): "created_1": "00:00", } changelist_url = reverse("admin:admin_utils_articleproxy_changelist") + expected_signals = [] + self.assertEqual(self.signals, expected_signals) # add proxy_add_url = reverse("admin:admin_utils_articleproxy_add") @@ -379,6 +395,10 @@ class LogEntryTests(TestCase): proxy_addition_log = LogEntry.objects.latest("id") self.assertEqual(proxy_addition_log.action_flag, ADDITION) self.assertEqual(proxy_addition_log.content_type, proxy_content_type) + expected_signals.extend( + [("pre_save", proxy_addition_log), ("post_save", proxy_addition_log, True)] + ) + self.assertEqual(self.signals, expected_signals) # change article_id = proxy_addition_log.object_id @@ -391,6 +411,10 @@ class LogEntryTests(TestCase): proxy_change_log = LogEntry.objects.latest("id") self.assertEqual(proxy_change_log.action_flag, CHANGE) self.assertEqual(proxy_change_log.content_type, proxy_content_type) + expected_signals.extend( + [("pre_save", proxy_change_log), ("post_save", proxy_change_log, True)] + ) + self.assertEqual(self.signals, expected_signals) # delete proxy_delete_url = reverse( @@ -401,6 +425,10 @@ class LogEntryTests(TestCase): proxy_delete_log = LogEntry.objects.latest("id") self.assertEqual(proxy_delete_log.action_flag, DELETION) self.assertEqual(proxy_delete_log.content_type, proxy_content_type) + expected_signals.extend( + [("pre_save", proxy_delete_log), ("post_save", proxy_delete_log, True)] + ) + self.assertEqual(self.signals, expected_signals) def test_action_flag_choices(self): tests = ((1, "Addition"), (2, "Change"), (3, "Deletion")) @@ -415,7 +443,6 @@ class LogEntryTests(TestCase): [self.a1], CHANGE, change_message="Article changed message", - single_object=True, ) c1 = Car.objects.create() LogEntry.objects.log_actions( @@ -423,7 +450,6 @@ class LogEntryTests(TestCase): [c1], ADDITION, change_message="Car created message", - single_object=True, ) exp_str_article = escape(str(self.a1)) exp_str_car = escape(str(c1)) |
