summaryrefslogtreecommitdiff
path: root/tests/modeladmin/tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/modeladmin/tests.py')
-rw-r--r--tests/modeladmin/tests.py103
1 files changed, 102 insertions, 1 deletions
diff --git a/tests/modeladmin/tests.py b/tests/modeladmin/tests.py
index e4369dbe2f..ec46b04c2e 100644
--- a/tests/modeladmin/tests.py
+++ b/tests/modeladmin/tests.py
@@ -833,12 +833,59 @@ class ModelAdminTests(TestCase):
self.assertEqual(fetched.change_message, str(message))
self.assertEqual(fetched.object_repr, str(self.band))
+ def test_log_deletions(self):
+ ma = ModelAdmin(Band, self.site)
+ mock_request = MockRequest()
+ mock_request.user = User.objects.create(username="akash")
+ content_type = get_content_type_for_model(self.band)
+ Band.objects.create(
+ name="The Beatles",
+ bio="A legendary rock band from Liverpool.",
+ sign_date=date(1962, 1, 1),
+ )
+ Band.objects.create(
+ name="Mohiner Ghoraguli",
+ bio="A progressive rock band from Calcutta.",
+ sign_date=date(1975, 1, 1),
+ )
+ queryset = Band.objects.all().order_by("-id")[:3]
+ self.assertEqual(len(queryset), 3)
+ with self.assertNumQueries(1):
+ ma.log_deletions(mock_request, queryset)
+ logs = (
+ LogEntry.objects.filter(action_flag=DELETION)
+ .order_by("id")
+ .values_list(
+ "user_id",
+ "content_type",
+ "object_id",
+ "object_repr",
+ "action_flag",
+ "change_message",
+ )
+ )
+ expected_log_values = [
+ (
+ mock_request.user.id,
+ content_type.id,
+ str(obj.pk),
+ str(obj),
+ DELETION,
+ "",
+ )
+ for obj in queryset
+ ]
+ self.assertSequenceEqual(logs, expected_log_values)
+
+ # RemovedInDjango60Warning.
def test_log_deletion(self):
ma = ModelAdmin(Band, self.site)
mock_request = MockRequest()
mock_request.user = User.objects.create(username="bill")
content_type = get_content_type_for_model(self.band)
- created = ma.log_deletion(mock_request, self.band, str(self.band))
+ msg = "ModelAdmin.log_deletion() is deprecated. Use log_deletions() instead."
+ with self.assertWarnsMessage(RemovedInDjango60Warning, msg):
+ created = ma.log_deletion(mock_request, self.band, str(self.band))
fetched = LogEntry.objects.filter(action_flag=DELETION).latest("id")
self.assertEqual(created, fetched)
self.assertEqual(fetched.action_flag, DELETION)
@@ -848,6 +895,60 @@ class ModelAdminTests(TestCase):
self.assertEqual(fetched.change_message, "")
self.assertEqual(fetched.object_repr, str(self.band))
+ # RemovedInDjango60Warning.
+ def test_log_deletion_fallback(self):
+ class InheritedModelAdmin(ModelAdmin):
+ def log_deletion(self, request, obj, object_repr):
+ return super().log_deletion(request, obj, object_repr)
+
+ ima = InheritedModelAdmin(Band, self.site)
+ mock_request = MockRequest()
+ mock_request.user = User.objects.create(username="akash")
+ content_type = get_content_type_for_model(self.band)
+ Band.objects.create(
+ name="The Beatles",
+ bio="A legendary rock band from Liverpool.",
+ sign_date=date(1962, 1, 1),
+ )
+ Band.objects.create(
+ name="Mohiner Ghoraguli",
+ bio="A progressive rock band from Calcutta.",
+ sign_date=date(1975, 1, 1),
+ )
+ queryset = Band.objects.all().order_by("-id")[:3]
+ self.assertEqual(len(queryset), 3)
+ msg = (
+ "The usage of log_deletion() is deprecated. Implement log_deletions() "
+ "instead."
+ )
+ with self.assertNumQueries(3):
+ with self.assertWarnsMessage(RemovedInDjango60Warning, msg):
+ ima.log_deletions(mock_request, queryset)
+ logs = (
+ LogEntry.objects.filter(action_flag=DELETION)
+ .order_by("id")
+ .values_list(
+ "user_id",
+ "content_type",
+ "object_id",
+ "object_repr",
+ "action_flag",
+ "change_message",
+ )
+ )
+ expected_log_values = [
+ (
+ mock_request.user.id,
+ content_type.id,
+ str(obj.pk),
+ str(obj),
+ DELETION,
+ "",
+ )
+ for obj in queryset
+ ]
+ self.assertSequenceEqual(logs, expected_log_values)
+
def test_get_autocomplete_fields(self):
class NameAdmin(ModelAdmin):
search_fields = ["name"]