From 3df13847d583f0e439d03dd85e4d8d2a36e6de73 Mon Sep 17 00:00:00 2001 From: MaximZemskov Date: Fri, 11 Jan 2019 13:13:31 +0300 Subject: [2.1.x] Fixed #30097 -- Made 'obj' arg of InlineModelAdmin.has_add_permission() optional. Restored backwards compatibility after refs #27991. Regression in be6ca89396c031619947921c81b8795d816e3285. Backport of 3c01fe30f3dd4dc1c8bb4fec816bd277d1ae5fa6 from master. --- tests/modeladmin/tests.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'tests/modeladmin/tests.py') diff --git a/tests/modeladmin/tests.py b/tests/modeladmin/tests.py index de216cbb11..d5a03b1a17 100644 --- a/tests/modeladmin/tests.py +++ b/tests/modeladmin/tests.py @@ -712,6 +712,10 @@ class ModelAdminPermissionTests(SimpleTestCase): def has_perm(self, perm): return perm == 'modeladmin.add_band' + class MockAddUserWithInline(MockUser): + def has_perm(self, perm): + return perm == 'modeladmin.add_concert' + class MockChangeUser(MockUser): def has_perm(self, perm): return perm == 'modeladmin.change_band' @@ -771,6 +775,26 @@ class ModelAdminPermissionTests(SimpleTestCase): self.assertEqual(len(inline_instances), 1) self.assertIsInstance(inline_instances[0], ConcertInline) + def test_inline_has_add_permission_without_obj(self): + # This test will be removed in Django 3.1 when `obj` becomes a required + # argument of has_add_permission() (#27991). + class ConcertInline(TabularInline): + model = Concert + + def has_add_permission(self, request): + return super().has_add_permission(request) + + class BandAdmin(ModelAdmin): + inlines = [ConcertInline] + + ma = BandAdmin(Band, AdminSite()) + request = MockRequest() + request.user = self.MockAddUserWithInline() + band = Band(name='The Doors', bio='', sign_date=date(1965, 1, 1)) + inline_instances = ma.get_inline_instances(request, band) + self.assertEqual(len(inline_instances), 1) + self.assertIsInstance(inline_instances[0], ConcertInline) + def test_has_change_permission(self): """ has_change_permission returns True for users who can edit objects and -- cgit v1.3