diff options
| author | Akash Kumar Sen <Akash-Kumar-Sen@users.noreply.github.com> | 2023-06-12 08:50:55 +0530 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2023-10-31 18:06:44 +0100 |
| commit | 40b3975e7d3e1464a733c69171ad7d38f8814280 (patch) | |
| tree | dabd02bf22c82b52556931bb7c633b28753f6ab0 /tests/modeladmin | |
| parent | 45e0c5892f84b5bb47999cbe16eabb5a13293d85 (diff) | |
Fixed #34462 -- Made admin log actions in bulk.
This also deprecates ModelAdmin.log_deletion() and
LogEntryManager.log_action().
Diffstat (limited to 'tests/modeladmin')
| -rw-r--r-- | tests/modeladmin/tests.py | 103 |
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"] |
